{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Keith Wagner",
  "language": "en",
  "home_page_url": "https://kpwags.com/",
  "feed_url": "https://kpwags.com/rss/feed_no_politics.json",
  "description": "Thoughts and musings of a nerd and software developer.",
  "author": {
    "name": "Keith Wagner",
    "url": "https://kpwags.com/about"
  },
  "items": [
    {
      "id": "https://kpwags.com/notes/food-software-and-trade-offs/",
      "url": "https://kpwags.com/notes/food-software-and-trade-offs/",
      "title": "Food, Software, and Trade-offs",
      "content_html": "\n\t\t<blockquote>\n<p>Everything has trade-offs, a set of attributes optimized and balanced towards a particular outcome.</p>\n<p>You get X, but you lose Y.</p>\n<p>Life is full of trade-offs. Anyone who says otherwise is trying to sell you something.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-04-13T13:39:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/comprehension-debt--the-hidden-cost-of-ai-generated-code/",
      "url": "https://kpwags.com/notes/comprehension-debt--the-hidden-cost-of-ai-generated-code/",
      "title": "Comprehension Debt - the hidden cost of AI generated code",
      "content_html": "\n\t\t<blockquote>\n<p>Unlike technical debt, which announces itself through mounting friction - slow builds, tangled dependencies, the creeping dread every time you touch that one module - comprehension debt breeds false confidence. The codebase looks clean. The tests are green. The reckoning arrives quietly, usually at the worst possible moment.</p>\n<p><a href=\"https://margaretstorey.com/blog/2026/02/09/cognitive-debt/\">Margaret-Anne Storey</a>’s describes a student team that hit this wall in week seven: they could no longer make simple changes <strong>without breaking something unexpected</strong>. The real problem wasn’t messy code. It was that no one on the team could explain why design decisions had been made or how different parts of the system were supposed to work together. The theory of the system had evaporated.</p>\n</blockquote>\n<p>Knowing the code you are introducing to your codebase is so important. As soon as you offload that blindly to AI, the timebomb starts ticking.</p>\n<blockquote>\n<p>I read one engineer say that the bottleneck has always been a competent developer understanding the project. AI doesn’t change that constraint. It creates the illusion you’ve escaped it.</p>\n<p>And the inversion is sharper than it looks. When code was expensive to produce, senior engineers could review faster than junior engineers could write. <strong>AI flips this: a junior engineer can now generate code faster than a senior engineer can critically audit it.</strong> The rate-limiting factor that kept review meaningful has been removed. <strong>What used to be a quality gate is now a throughput problem.</strong></p>\n</blockquote>\n<p>The nightmare is when the AIs create such large PRs that make it so easy to miss wrong turns in code.</p>\n<blockquote>\n<p>There’s also a specific failure mode worth naming. <strong>When an AI changes implementation behavior and updates hundreds of test cases to match the new behavior, the question shifts from “is this code correct?” to “were all those test changes necessary, and do I have enough coverage to catch what I’m not thinking about?”</strong> Tests cannot answer that question. Only comprehension can.</p>\n</blockquote>\n<p>The tests pass...the code must work...right? Right?</p>\n<blockquote>\n<p>You will pay for comprehension sooner or later. The debt accrues interest rapidly.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-04-13T13:33:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/167/",
      "url": "https://kpwags.com/reading-log/167/",
      "title": "Reading Log - April 13, 2026 (#167)",
      "content_html": "\n\t\t<p>Double issue this week. Some suggestions for React's useEffect if you use them, more reasons for tests, some thoughts on Artemis II and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://neciudan.dev/name-your-effects\">Start naming your useEffect functions, you will thank me later</a> - <em>Neicu Dan</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://codeopinion.com/coding-isnt-the-hard-part/\">Coding Isn’t the Hard Part</a> - <em>Derek Comartin</em></li>\n<li><a href=\"https://dodov.dev/blog/write-tests-to-solve-trust-issues-not-code-coverage\">Write tests to solve trust issues, not code coverage</a> - <em>Hristiyan Dodov</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2026/food-software-and-trade-offs/\">Food, Software, and Trade-offs</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://adamsilver.io/blog/why-designing-in-code-makes-you-a-better-designer/\">Why designing in code makes you a better designer</a> - <em>Adam Silver</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/tech/905398/apple-iphone-anniversary-jobs-release\">Everything is iPhone now</a> - <em>Nilay Patel</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://nolanlawson.com/2026/03/22/the-diminished-art-of-coding/\">The diminished art of coding</a> - <em>Nolan Lawson</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2026/vibe-dreams-didnt-come-true/\">I Tried Vibing an RSS Reader and My Dreams Did Not Come True</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2026/opacity-of-generative-tools/\">You Might Debate It — If You Could See It</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://www.anildash.com/2026/03/13/coders-after-ai/\">What do coders do after AI?</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://addyosmani.com/blog/comprehension-debt/\">Comprehension Debt - the hidden cost of AI generated code.</a> - <em>Addy Osmani</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://defector.com/artemis-moon-why-we-fly?giftLink=7e1239447184bfae87e9e60409fcad5f\">Why We Fly</a> - <em>Barry Petchesky</em></li>\n</ul>\n<hr />\n<h2>Writing</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/entertainment/898918/project-hail-mary-andy-weir-writing-advice-interview\">Some writing advice from Project Hail Mary’s Andy Weir</a> - <em>Andrew Webster</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.404media.co/ridicule-as-praxis-with-emily-bender-and-alex-hanna/\">404 Media Podcast: Ridicule as Praxis (with Emily Bender and Alex Hanna)</a></li>\n<li><a href=\"https://www.npr.org/2026/03/31/nx-s1-5766278/whos-afraid-of-private-credit\">The Indicator: Who's afraid of private credit?</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/report/896820/lina-khan-ftc-meta-supernatural-antitrust?view_token=eyJhbGciOiJIUzI1NiJ9.eyJpZCI6IllXdHFBcHUyRGEiLCJwIjoiL3JlcG9ydC84OTY4MjAvbGluYS1raGFuLWZ0Yy1tZXRhLXN1cGVybmF0dXJhbC1hbnRpdHJ1c3QiLCJleHAiOjE3NzYwMjYzNTEsImlhdCI6MTc3NTU5NDM1MX0.J6ioSXjcSSCgPN8dz4oucazn7HTylgzEf_23CJ6ePcM&amp;utm_medium=gift-link\">Lina Khan was right</a> - <em>Victoria Song</em></li>\n<li><a href=\"https://www.404media.co/how-thomson-reuters-powers-ice-and-palantir/\">How Thomson Reuters Powers ICE and Palantir</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://www.404media.co/blockade-the-right-is-using-ai-content-scanners-to-try-to-supercharge-book-banning/\">‘BLOCKADE’: The Right Is Using AI Content Scanners to Try to Supercharge Book Banning</a> - <em>Claire Woodcock</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2026/04/make-something/\">Before I go: People like it when other people make things</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Steady Now</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_LeeIPmJ8sU\" title=\"Dave Hause - Steady Now\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-04-13T13:14:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/94/",
      "url": "https://kpwags.com/week-note/94/",
      "title": "Week Notes for March 29 - April 11 (#94)",
      "content_html": "\n\t\t<p>I was on vacation last week so this week is a double issue.</p>\n<h2>Cape May Trip</h2>\n<p>Cape May is one of my wife and my favorite places to be. Right by the Atlantic Ocean. Salt air and breeze, it's gorgeous and active year round. We decided to spend a long weekend there for my wife's birthday. The weather was mostly cooperative, though it rained on Easter. It wasn't a big deal as the temperature was nice we just sat out on Congress Hall's veranda covered and protected from the rain.</p>\n<p>It was a relaxing trip. We didn't do all that much overall. A trip to some wineries, and breweries, but other than than that, we just relaxed, reading, writing, and enjoying some time away from work. It was perect.</p>\n<h2>Short Work Weeks</h2>\n<p>Thanks to the long weekend, I had back to back short weeks at work. I felt productive the days I was in, but it's always nice to have a break.</p>\n<h2>Back to Yard Work</h2>\n<p>It's spring time here in Pennsylvania, which means we need to get back to taking care of our yards and gardens. I'm finally going to seed the spot in our yard where we had to take down a massive oak tree two years ago. I also want to finish clearing out the brush around one of our trees in the side yard that I meant to do last year but never got around to. And of course, back to mowing the lawn. I want to take care of most of this now before the temperature gets to be too hot. Working outside in the 60s is fine. 80+ out...not so much.</p>\n<h2>Alton Brown</h2>\n<p>On Saturday, my wife and I drove out to Lancaster, Pennsylvania to see <a href=\"https://www.altonbrownlive.com/\">An Evening of Alton Brown</a>. I'm a fan of his since I watched <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a>. I appreciate the way he mixes in science, food history, and jokes into talking about food and recipes. He describes his show as Julia Child meets Monty Python and Mr. Wizard. The show matches that, as did his live appearance. He went through some of his thoughts on food and as always did it in an interesting and humorous way with some live demonstrations. It was a fun night and if he by chance goes on tour again, I'd definitely go.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-04-12T18:32:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/amazon-essentially-bricked-my-kindle/",
      "url": "https://kpwags.com/posts/2026/amazon-essentially-bricked-my-kindle/",
      "title": "Amazon Essentially Bricked My Kindle",
      "content_html": "\n\t\t<p>I got an email yesterday saying that Amazon is going to completely stop supporting my Kindle Paperwhite. This means no more downloading books, no more borrowing books from the library...all of it.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/8Cpy_12uIX-639.webp 639w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/8Cpy_12uIX-639.gif 639w\" /><img alt=\"Dear Customer, Thank you for being a longtime Kindle customer. We're glad our devices have served you well for as long as they have. Starting May 20, 2026 — 14 to 18 years after their initial launches — we are discontinuing support for Kindle devices released in 2012 or earlier. Here's what this means for you: You can continue to read books already downloaded on these devices, but you will not be able to purchase, borrow, or download additional books on them after that date. If you deregister or factory reset these devices, you will not be able to re-register or use these devices in any way. Affected devices include Kindle 1st and 2nd Generation, Kindle DX and DX Graphite, Kindle Keyboard, Kindle 4, Kindle Touch, Kindle 5, and Kindle Paperwhite 1st Generation. To minimize any disruption, we're offering a promotional code for 20% off select new Kindle devices B4PT5XAJ74 as well as a $20 eBook credit that will be automatically added to your account after purchasing a new device (valid through June 20th, 2026, 11:59pm PST - Terms and Conditions apply). Our newer Kindle devices bring meaningful improvements in screen quality, performance and accessibility — and you'll have access to your complete Kindle library and the Kindle Store. You can also continue to read all your books on our free Kindle apps (Android, iOS, Mac, and PC) and Kindle for Web. If you have any questions or require assistance, please visit https:// www.amazon.com/help/kindle/devicedeprecation. Sincerely, The Kindle Team\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/8Cpy_12uIX-639.png\" width=\"639\" height=\"649\" /></picture></p>\n<p>I have a 1st generation Kindle Paperwhite which was released at the end of 2012. I've been using it extensively for 14 years as I love reading and it provides me easy access to multiple books on longer vacations as well as access to borrowing books from my local library.</p>\n<p>Now while I understand that the device is old, it's still perfectly usable. The battery life has degraded slightly, but other than that, it still works great. I can borrow books through Libby without issue, it's great and I love that I, until now, didn't have to replace it.</p>\n<p>But come May 20, I will no longer be able to download any new books to it whether I buy them from the Amazon Kindle Store, or borrow them on Libby. And to make things even more fucked up, thanks to DRM, I can't legally copy the books (okay, there might be a few DRM-free books, but most have DRM) I've bought onto any device other than a Kindle. I've mentioned it before in some of my posts on ownership, the lock-in will get you. I've avoided buying books on Amazon of late for this exact reason. I can't remember the last book I've bought on their store, but I've used it extensively to borrow books, and now I can't even do that.</p>\n<p>I'm frustrated, but also can't say I'm surprised, sadly. I have purchased a <a href=\"https://us.kobobooks.com/products/kobo-libra-colour?variant=41267371376710\">Kobo Libra Color</a> to replace it, and while I'm sure it will have its own lock-in issues, it's at least not Amazon. I'm still going to try to focus more on DRM-free books when possible. It'll also be nice to have an e-reader than can natively handle the epub format.</p>\n<p>I'm also not going to lie, I have been eyeing the Libra Color for a while, I just was never able to pull the trigger to buy it since my Kindle was still working just fine.</p>\n<p>So what will I do with my Kindle? I'm not sure, I don't think I'll throw it out, I still have a large collection on it and I'll still be able to read what I have on it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-04-09T13:15:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/march-2026-check-in/",
      "url": "https://kpwags.com/posts/2026/march-2026-check-in/",
      "title": "March 2026 Check-In",
      "content_html": "\n\t\t<p>I still can't believe it's already April. The year has been flying by. I'm not sure how to feel about that part, but I am glad the weather is beginning to turn nicer.</p>\n<h2>Roller Coaster Weather</h2>\n<p>The weather in March was kind of crazy. It hit 80º at one point only to drop below freezing the next day. The weather would get warm, cold, hot, cold...it was kind of funny not knowing how to dress to take Tess for her morning walk.</p>\n<h2>Moving Back to More Analog</h2>\n<p>This month I started switching back to notebooks and pens and pencils. There really is something about physically writing something down. I've been journaling more and experimenting more with using pen and paper to keep track of life.</p>\n<h2>Sick</h2>\n<p>Mid-month I caught a nasty cold. Knocked me out for a weekend and more. It does make me glad to be able to work from home. I was feeling well enough to work once the worst of the weekend went by, but didn't have to burn sick days to keep co-workers from getting sick.</p>\n<h2>Running</h2>\n<li></li>\nI started the month out well and even got some distance runs in. I'm not sure if it was whatever bug I picked up limited me, but my end-of-month runs didn't go as well. Oh well, still got some runs in which was nice since the weather was cooperating.\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>11</span> runs - <span>44.99</span> miles</li>\n<li><strong>Walking:</strong> <span>29</span> walks - <span>20.37</span> miles</li>\n<li><strong>Biking:</strong> <span>0</span> rides - <span>0</span> miles</li>\n<li><strong>Lifting:</strong> <span>3</span> sessions - <span>45,605</span> lbs.</li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/blood-in-the-machine-the-origins-of-the-rebellion-against-big-tech-brian-merchant/17824365?ean=9780316487740\">Blood in the Machine: The Origins of the Rebellion Against Big Tech</a> by Brian Merchant</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/frankenstein-mary-shelley/6a5ab762f4a4486e\">Frankenstein</a> by Mary Shelley</li>\n<li>Finished <a href=\"https://bookshop.org/books/project-hail-mary/9780593135204\">Project Hail Mary</a> by Andy Weir</li>\n<li>Finished <a href=\"https://www.simonandschuster.com/books/Mood-Machine/Liz-Pelly/9781668083505\">Mood Machine: The Rise of Spotify and the Costs of the Perfect Playlist</a> by Liz Pelly</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/too-big-to-fail-the-inside-story-of-how-wall-street-and-washington-fought-to-save-the-financial-system-and-themselves-andrew-ross-sorkin/d5832fe5c3b9f33b\">Too Big to Fail: The Inside Story of How Wall Street and Washington Fought to Save the Financial System--and Themselves</a> by Andrew Ross Sorkin</li>\n<li>Started <a href=\"https://bookshop.org/p/books/wheel-of-the-infinite-updated-and-revised-edition-martha-wells/3299c7e680d68a1b\">Wheel of the Infinite</a> by Martha Wells</li>\n<li>Started <a href=\"https://bookshop.org/p/books/a-peace-to-end-all-peace-the-fall-of-the-ottoman-empire-and-the-creation-of-the-modern-middle-east-david-fromkin/df210f7a1fb6f9b4\">A Peace to End All Peace: The Fall of the Ottoman Empire and the Creation of the Modern Middle East</a> by David Fromkin</li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/162/\">March 2 (#162)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/163/\">March 9 (#163)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/164/\">March 16 (#164)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/165/\">March 23 (#165)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/166/\">March 30 (#166)</a></li>\n</ul><p></p>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/90/\">March 1 - 7 (#90)</a></li>\n<li><a href=\"https://kpwags.com/week-note/91/\">March 8 - 14 (#91)</a></li>\n<li><a href=\"https://kpwags.com/week-note/92/\">March 15 - 21 (#92)</a></li>\n<li><a href=\"https://kpwags.com/week-note/93/\">March 22 - 28 (#93)</a></li>\n</ul><p></p>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about the <a href=\"https://kpwags.com/posts/2026/well-my-ipod-update-might-be-short-lived/\">issues I found with my iPod</a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2026/i-should-be-excited-about-artemis-ii/\">why I'm not as excited about Artemis II as I'd expect</a></li>\n<li>Ranted about <a href=\"https://kpwags.com/posts/2026/im-still-mad-at-microsoft-for-killing-azure-data-studio/\">Microsoft killing Azure Data Studio</a></li>\n<li>Asked for <a href=\"https://kpwags.com/posts/2026/looking-for-music-recommendations/\">music recommendations</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/things-im-not-planning-to-replace-when-they-break-or-wear-out/\">tech I'm not going to replace</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://www.ea.com/games/starwars/squadrons\">Star Wars Squadrons</a></li>\n<li>Started <a href=\"https://www.nintendo.com/us/store/products/english-pokemon-firered-version-switch/\">Pokemon: FireRed</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0212671/\">Malcolm in the Middle</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt35515733/\">Armed Only with a Camera</a></li>\n<li><a href=\"https://www.imdb.com/title/tt8760684/\">Apollo 11</a></li>\n<li><a href=\"https://www.imdb.com/title/tt30851137/\">The Bride!</a></li>\n<li><a href=\"https://www.imdb.com/title/tt12042730/\">Project Hail Mary</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>🎵 New Music</h3><p></p>\n<p></p><ul>\n<li>American Aquarium - Burn.Flickr.Die</li>\n<li>American Aquarium - Slappers, Bangers &amp; Certified Twangers: Volumne Two</li>\n<li>American Aquarium - Wolves</li>\n<li>Free Throw - Bear Your Mind</li>\n<li>Free Throw - Moments Before the Wind</li>\n<li>Free Throw - Piecing it Together</li>\n<li>Hot Water Music - Fuel for the Hate Game</li>\n<li>Hot Water Music - Moonpies for Misfits</li>\n<li>Hot Water Music - Never Ender</li>\n<li>Rocky Votolato - Makers (Extended Edition)</li>\n</ul><p></p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-04-09T11:12:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/people-are-not-friction/",
      "url": "https://kpwags.com/notes/people-are-not-friction/",
      "title": "People are Not Friction",
      "content_html": "\n\t\t<blockquote>\n<p>People, the context-bearers, have experience and capabilities that machines might never understand encoded in our muscles and memory. I’m on record saying I despise nuance –<em>and I do</em>– but it’s more important than ever to be able to connect to our fellow humans over this nuance so our world is not paved over by contextless opinions from ill-informed robots. Empower and believe people over machines.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-30T14:27:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/building-the-good-web/",
      "url": "https://kpwags.com/notes/building-the-good-web/",
      "title": "Building the Good Web",
      "content_html": "\n\t\t<blockquote>\n<p>Let me try to define the Good Web. The Good Web is any part of the internet built in good faith, which I mean in the specific, contractual sense. The maker is not optimizing against the user. No dark patterns. No retention schemes. No bloated scripts designed to keep you scrolling past the point of nourishment into the territory of compulsion. Nobody on a bbCode forum is selling your reading habits to an insurance company. The Good Web is not a technology, not a protocol, not even a community—though it contains all of those things. It's a disposition toward the person on the other end of the connection. It's the difference between a neighbour who bakes you bread and a supermarket that puts the bread at the back of the store because they know you'll buy chips on the way. Both are offering you something. Only one of them gives a shit whether you leave full.</p>\n</blockquote>\n<p>More of this please.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-30T14:26:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/166/",
      "url": "https://kpwags.com/reading-log/166/",
      "title": "Reading Log - March 30, 2026 (#166)",
      "content_html": "\n\t\t<p>This week it's GitHub Copilot being creepy with ads, a cool image from Hubble, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/its-about-to-get-a-lot-easier-for-your-javascript-to-clean-up-after-itself/\">It’s about to get a lot easier for your JavaScript to clean up after itself</a> - <em>Mat Marquis</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://brennan.day/building-the-good-web/\">Building the Good Web</a> - <em>Brennan Kenneth Brown</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://blog.mozilla.org/netpolicy/2026/03/23/competition-innovation-and-the-future-of-the-web/\">Competition, Innovation, and the Future of the Web – Why Independent Browser Engines Matter</a> - <em>Andrew Overholt</em></li>\n</ul>\n<hr />\n<h2>Cybersecurity</h2>\n<ul>\n<li><a href=\"https://www.404media.co/a-top-google-search-result-for-claude-plugins-was-planted-by-hackers/\">A Top Google Search Result for Claude Plugins Was Planted by Hackers</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://notes.zachmanson.com/copilot-edited-an-ad-into-my-pr/\">Copilot Edited an Ad Into My PR</a> - <em>Zach Manson</em></li>\n<li><a href=\"https://daverupert.com/2026/03/people-are-not-friction/\">People are not friction</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/hubble-accidentally-catches-a-comet-tearing-itself-apart\">Hubble (accidentally!) catches a comet tearing itself apart</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/report/901818/hbo-harry-potter-jk-rowling-transphobia\">There is no ethical consumption of HBO’s Harry Potter series</a> - <em>Charles Pulliam-Moore</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Free Throw - MissingNo.</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/cwOKCrlgTZs\" title=\"Free Throw - MissingNo.\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-30T10:43:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/93/",
      "url": "https://kpwags.com/week-note/93/",
      "title": "Week Notes for March 22 - 28 (#93)",
      "content_html": "\n\t\t<p>It was a mostly quiet week, somewhat productive, somewhat lazy.</p>\n<h2>Project Hail Mary</h2>\n<p>My wife and I saw <a href=\"https://www.imdb.com/title/tt12042730/\">Project Hail Mary Tuesday</a> on IMAX and it was really good. Having recently re-read the book in anticipation of the movie, I was impressed with how well they kept true to the spirit and the content of the book. I'd <em>highly</em> recommend going to see it.</p>\n<h2>Progress on the Sunroom</h2>\n<p>I put the first coat of paint on the windowsill and trim on one side of the sunroom. It looks really nice. It might be white paint against primer, but the white pops. Which is what I want. I'm looking forward to getting the paint for the bead board to bring in some color.</p>\n<h2>Pokémon FireRed</h2>\n<p>Succumbing to nostalgia, I picked up Pokémon FireRed for the Nintendo Switch. So far it seems to hold the magic the original Pokémon Red &amp; Blue had back in the day.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-29T11:51:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/andrew-ross-sorkin-too-big-to-fail/",
      "url": "https://kpwags.com/books/andrew-ross-sorkin-too-big-to-fail/",
      "title": "Book Notes for Too Big to Fail: The Inside Story of How Wall Street and Washington Fought to Save the Financial System--and Themselves",
      "content_html": "\n\t\t<p>I graduated college and started my career shortly before the 2008 financial crisis hit. I remember the aftermath and learning about the subprime mortgages that were the primary cause behind it. This book provides an interesting perspective about some of the government officials and company executives dealing with the collapse of Lehman Brothers and AIG.</p>\n<p>The book focuses a great deal on both Lehman Brothers and AIG as they were two of the biggest failures leading into the crisis. It does a good job talking about how the CEOs for both Lehman Brothers and AIG both trying to escape the disaster. Neither of them seemed to fully grasp the trouble they were in and neither seemed to be willing to take responsibility for the failures.</p>\n<p>The book also looks at Ben Bernanke (US Fed Chairman), Henry Paulson (US Treasury Secretary), &amp; Timothy Geithner (President of the New York Federal Reserve Bank) and how they reacted to and handled the looming crisis. It talks about their beliefs of no bailouts or rescues to the creation of TARP (Troubled Assets Relief Program).</p>\n<p>Overall it was an interesting look at one of the greatest economic crises since the Great Depression.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/liz-pelly-mood-machine/",
      "url": "https://kpwags.com/books/liz-pelly-mood-machine/",
      "title": "Book Notes for Mood Machine: The Rise of Spotify and the Costs of the Perfect Playlist",
      "content_html": "\n\t\t<p>I've known now for a while that streaming is bad for artists, and while I still have and use my Apple Music subscription, I have been using it less and less, focusing on growing my music collection. This book focuses on Spotify and how it ruthlessly worked to cut costs squeezing more and more from musicians and songwriters.</p>\n<p>Spotify's stated goal when it launched was to &quot;level the playing field&quot; for musicians and artists. While it would be a goal that could be great for all involved, like so many things in life, words sound better than the actions actually taken.</p>\n<p>The book goes into how so much of the opportunities bands and musicians got came down to getting onto the right playlists. Getting onto a playlist could mean the difference between making any kind of money and walking away with nothing. To make matters even more challenging, it talks about how Spotify was paying for &quot;ghost artists&quot; to write songs for some playlists with lower royalty costs. They were then encouraging their curators to use more of these songs in their playlists, further pushing out bands and musicians who were trying to make a name for themselves. The further irony of this is that eventually many of the &quot;ghost artists&quot; eventually started complaining that there was no way to link their songs back to them.</p>\n<p>One thing I thought was interesting was how Spotify's stance on AI was talked about. A company named Boomy, allowed their users to use AI tools to generate music and quickly post it to Spotify and split any royalties. Boomy eventually got banned from Spotify, not because AI was used, but because they were caught creating bots to generate fraudulent listens. This showed Spotify's stance...AI was fine so long as you didn't try to fraudulently drum up listens.</p>\n<p>The book does talk about the one thing you can't really blame Spotify (or any of the streaming platforms) for, the consolidation of the music industry. The big labels control an overwhelmingly large percentage of the music market and their oversized influence gives them special deals with Spotify and the like which only further squeezes independent artists and bands. I more mention this because it is important to understand the full picture of the problem. And while the music industry at large does factor into things, Spotify in particular, should still shoulder a fair amount of the blame for its actions in the music business.</p>\n<p>I'll end this with a quote from the book I thought was quite on the nose:</p>\n<blockquote>\n<p>If DIY artists banking on the &quot;opportunities&quot; of the streaming landscape was like playing the slots, then there's another phrase from the casinos that comes to mind: &quot;The house always wins.&quot;</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/things-im-not-planning-to-replace-when-they-break-or-wear-out/",
      "url": "https://kpwags.com/posts/2026/things-im-not-planning-to-replace-when-they-break-or-wear-out/",
      "title": "Things I&#39;m Not Planning to Replace When They Break or Wear Out",
      "content_html": "\n\t\t<p>I recently read a <a href=\"https://geoffgraham.me/things-im-not-replacing/\">post by Geoff Graham about things he's not planning on replacing</a>. I rather liked the post and the thought, so I figured I'd copy the idea and share some things I have that I probably won't replace.</p>\n<h2>Apple Watch</h2>\n<p>I briefly talked about this in my <a href=\"https://kpwags.com/posts/2026/thinking-about-my-next-laptop-phone-and-tablet/\">post about my next laptop</a>. It has a few nice features, but it's biggest utility for me is as a fitness tracker. I could replace it with a Garmin GPS watch like the one I used to have and I'd be fine. The only thing it's tracking has going for it is that I think it's a little more privacy-focused. At the end of the day though, I do appreciate the look of your more classic analog and digital watches.</p>\n<h2>Xbox</h2>\n<p>I've generally been getting both the PlayStation and Xboxes each generation. I love the Halo game franchise, but given Microsoft's latest issues with Xbox, combined with the less time I have for gaming nowadays, I think I'll probably just stick with PlayStation. It doesn't hurt that Microsoft is releasing it's (now former) exclusives to PlayStation, maybe it's not that big of a deal. Hell, they're releasing the original Halo on the PS5 later this year.</p>\n<h2>Gaming PC</h2>\n<p>I've had a PC and a laptop for 20+ years now. I think my current PC will be my last. I might splurge on one more video card for it, but we'll see. The pricing now is just so high, I just can't justify it.</p>\n<h2>Stream Deck</h2>\n<p>I got a Streamdeck on sale at some point. I thought it'd be kind of a cool thing to play around with and maybe I'd find some way to integrate it into some of my workflows. That hasn't really happened so when it dies, I'll get some desk space back.</p>\n<h2>Dual Monitors</h2>\n<p>I currently use 2 <a href=\"https://www.amazon.com/gp/product/B07PGL2WVS\">LG 27UL500-W 27&quot; 4k Monitors</a> for my personal machine setup. When they bite the dust, I think I'll go down to a single monitor. That's probably not coming for a little while, but I figure I'd look at a nice 30&quot; or so 5k monitor and keep it simple.</p>\n<h2>Things I'm Going to Replace But Not With the Same Thing</h2>\n<p>I'm going to throw the following items into their own category. I'm going to replace them, but in alternative ways.</p>\n<h3>Kindle Paperwhite</h3>\n<p>While I very much enjoy the feel of a physical book, I love my Kindle. But it's not really the Kindle as much as it is the e-ink display and a portable device. Given Bezos and Amazon's issues, I'll be moving to Kobo once my current Kindle dies. I haven't been able to really justify replacing it since it still works. I've been using it to borrow from the library and some book deals at places like Humble Bundle.</p>\n<h3>Apple Watch</h3>\n<p>I'm putting this here as well because I'll still get a Garmin to track my runs. It will be a single-use tool. Worn only when I go out for a run or a bike ride.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-25T19:56:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/i-am-in-an-abusive-relationship-with-the-technology-industry/",
      "url": "https://kpwags.com/notes/i-am-in-an-abusive-relationship-with-the-technology-industry/",
      "title": "I Am in an Abusive Relationship with the Technology Industry",
      "content_html": "\n\t\t<blockquote>\n<p>You simply cannot <em>breathe</em> without seeing, hearing, or engaging in any kind of technical conversation about AI. AI has dominated the Zeitgeist so catastrophically that the only way to escape is to turn off the WiFi and delete all the apps. Every single piece of fucking software has some kind of shitty AI add-on, forced into your face at regular intervals whilst you’re trying to go about your life or do your job or check your email or write an email or read an email or talk to a human support agent or read a recipe or open an issue on an open-source project or watch a YouTube video or open your IDE or do a fucking internet search. The cognitive overload of AI trying to Make You More Productive™️ whilst you’re actually trying to <strong>be</strong> productive is so shockingly absurd. And yet, we are being made to feel like we are stagnating, being left behind, not good enough, that we are luddites should we not adopt this imposing technology. We are being told we’re missing out, even though we’re probably doing just fine. The technology is gaslighting us.</p>\n</blockquote>\n<p>It's all opt-out (if you're lucky enough to be able to turn it off) too.</p>\n<blockquote>\n<p>What’s even more personally terrifying: what if I need to find a new job in the near future? There are seemingly no non-generative-AI-centred options left for someone like me. I’m afraid that every opportunity will either be for a company building some kind of generative AI experience, or one that mandates the use of generative AI in your daily responsibilities, or one that refuses to use AI at the expense of their financial success and the stability of my employment. At this point I cannot escape. I am at the mercy of the profession I chose. I have a family to feed and a mortgage to pay. Retraining is not an option right now. I must force myself to adapt.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-25T19:50:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/165/",
      "url": "https://kpwags.com/reading-log/165/",
      "title": "Reading Log - March 23, 2026 (#165)",
      "content_html": "\n\t\t<p>This week it's Major League Baseball gets deeper entwined with gambling, thoughts on debugging best practices, the value of <code>z-index</code>, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://dev.to/playfulprogramming/two-react-design-choices-developers-dont-like-but-cant-avoid-d6g\">Two React Design Choices Developers Don’t Like—But Can’t Avoid</a> - <em>Ryan Carniato</em></li>\n<li><a href=\"https://css-tricks.com/the-value-of-z-index/\">The Value of z-index</a> - <em>Amit Sheen</em></li>\n<li><a href=\"https://kilianvalkhof.com/2026/css-html/progressive-enhancement-as-a-benefit-of-css-nesting/\">Progressive enhancement as a benefit of CSS Nesting</a> - <em>Kilian Valkhof</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://codemanship.wordpress.com/2026/01/30/coding-is-when-were-least-productive/\">Coding Is When We’re Least Productive</a> - <em>Jason Gorman</em></li>\n<li><a href=\"https://jeremydmiller.com/2026/02/24/on-debugging-problems/\">On Debugging Problems</a> - <em>Jeremy Miller</em></li>\n<li><a href=\"https://testingil.com/2026/03/your-api-tests-are-passing-thats-the-problem.html\">Your API Tests Are Passing. That’s the Problem.</a> - <em>Gil Zilberfeld</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://matduggan.com/boy-i-was-wrong-about-the-fediverse/\">Boy I was wrong about the Fediverse</a> - <em>Mat Duggan</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://whitep4nth3r.com/blog/i-am-in-an-abusive-relationship-with-the-technology-industry/\">I Am in an Abusive Relationship with the Technology Industry</a> - <em>Salma Alam-Naylor</em></li>\n<li><a href=\"https://www.theverge.com/cs/features/877388/white-collar-workers-training-ai-mercor?view_token=eyJhbGciOiJIUzI1NiJ9.eyJpZCI6Ild0Y2FLZml3dnciLCJwIjoiL2NzL2ZlYXR1cmVzLzg3NzM4OC93aGl0ZS1jb2xsYXItd29ya2Vycy10cmFpbmluZy1haS1tZXJjb3IiLCJleHAiOjE3NzQ1NTE5MzAsImlhdCI6MTc3NDExOTkzMH0.hPESRB70zS3Q9ICgSxvsoHtjksM4FYwCEf8BK1VkraA&amp;utm_medium=gift-link\">The Laid-off Scientists and Lawyers Training AI to Steal Their Careers</a> - <em>Josh Dzieza</em></li>\n<li><a href=\"https://event-driven.io/en/the_end_of_coding_wrong_question/\">The End of Coding? Wrong Question</a> - <em>Oskar Dudycz</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/its-gambling\">It’s Gambling</a> - <em>Lauren Theisen</em></li>\n<li><a href=\"https://www.theguardian.com/sport/2026/mar/18/world-baseball-classic-usa-venezuela-trump-war\">Other nations danced for joy at the World Baseball Classic. Team USA played toy soldiers</a> - <em>Howard Bryant</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2026/03/17/techdirt-podcast-episode-446-mike-karl-talk-ai/\">Techdirt Podcast: Mike &amp; Karl Talk AI</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2026/03/12/can-i-monetize-my-hobby-without-killing-the-joy\">This is Uncomfortable: Can I monetize my hobby without killing the joy?</a></li>\n<li><a href=\"https://www.npr.org/2026/03/12/nx-s1-5745189/this-reporter-went-bust-while-covering-americas-sports-betting-boom\">Fresh Air: This reporter went bust while covering America's sports betting boom</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.theatlantic.com/ideas/2026/03/trump-iran-war-allies/686423/?gift=hVZeG3M9DnxL4CekrWGK31dWsRj9tVhI4YolO-4zzIE\">Everyone but Trump Understands What He’s Done</a> - <em>Anne Applebaum</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>the Mountain Goats - This Year</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/H7fBFtif9H4\" title=\"the Mountain Goats - This Year\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-23T12:25:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/mike-and-karl-talk-ai/",
      "url": "https://kpwags.com/notes/mike-and-karl-talk-ai/",
      "title": "Mike and Karl Talk AI",
      "content_html": "\n\t\t<p>This was a fantastic conversation bringing in a bunch of the nuance that is so often missed.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-23T10:15:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-artisanal-web/",
      "url": "https://kpwags.com/notes/the-artisanal-web/",
      "title": "The Artisanal Web",
      "content_html": "\n\t\t<blockquote>\n<p>No one was particularly optimizing for engagement or time-on-site or conversion. People made websites because they had something to say, or something to show, or just because they could. The web was weird and slow and full of bad tiled backgrounds, bad fonts and dumb ideas.</p>\n<p>It was also weirdly, wildly, wonderfully human.</p>\n</blockquote>\n<p>I almost feel like this is one benefit of Musk's takeover of Twitter/X. More people seem to have started building or resurrecting their own personal sites.</p>\n<blockquote>\n<p>There are still people building the web by hand, very much like we did it in the early days. They know all about what's possible using modern tooling, yet they choose to expend their time and attention to the craft of doing it by hand. They care about the craft, and they care about what they're making. They believe in their unique skill and vision over engagement strategies and analytics and content algorithms. They don't need a platform, or they'll build their own.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-23T10:14:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/programming-in-the-swamp/",
      "url": "https://kpwags.com/notes/programming-in-the-swamp/",
      "title": "Programming in the Swamp",
      "content_html": "\n\t\t<blockquote>\n<p>But agentic coding is about more than moving upwards in abstraction. The compiler gave us abstraction without ambiguity. You wrote C, and it became assembly, deterministically. The layers were clean, and you remained a programmer in the traditional sense of how we’ve always understood the word.</p>\n<p>What’s happening with agentic coding might better be captured by <a href=\"https://contraptions.venkateshrao.com/p/fear-of-oozification\">a term coined by Venkatesh Rao</a>: “oozification.” Oozification, as Rao describes it, is the tendency of technological systems to evolve from structures built of large, rule-heavy building blocks to ones composed of smaller, more fluid, less constrained components.</p>\n<p>Imagine, if you will, the difference between a man-made, plantation forest and a swamp. The forest has legible structure: tidy rows, canopy, understory, floor. The swamp is murkier, richer in evolutionary possibility, but also much harder to read. Oozification is the transformation of the forest into the swamp. The number of possibilities increases, while the number of certainties decreases, and that combination tends to make people downright nervous.</p>\n<p>A natural language prompt doesn’t compile into code. Instead, it gets interpreted, completed and sometimes second-guessed by a probabilistic system. Intent blurs into elaboration and precise control gives way to fuzzy suggestion. It’s oozy and messy programming, and the role of the programmer blurs as well into something with unclear boundaries—part orchestrator, delegator, babysitter, designer, reviewer. People have always struggled to call software development honest-to-goodness “engineering,” and with the oozification of the practice, that highly-esteemed label has only become more ill-fitting.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-23T10:13:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/nobody-gets-promoted-for-simplicity/",
      "url": "https://kpwags.com/notes/nobody-gets-promoted-for-simplicity/",
      "title": "Nobody Gets Promoted for Simplicity",
      "content_html": "\n\t\t<blockquote>\n<p>Complexity looks smart. Not because it is, but because our systems are set up to reward it. And the incentive problem doesn’t start at promotion time. It starts before you even get the job.</p>\n</blockquote>\n<p>I've learned so much over the years, and while it is always helpful to think about how features might be used in the future, it's even more helpful to know when to worry about it now, and when to leave it for later...if later ever comes.</p>\n<blockquote>\n<p>The actual path to seniority isn’t learning more tools and patterns, but learning when not to use them. <strong>Anyone can add complexity. It takes experience and confidence to leave it out.</strong></p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-22T18:11:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/design-first-collaboration/",
      "url": "https://kpwags.com/notes/design-first-collaboration/",
      "title": "Design-First Collaboration",
      "content_html": "\n\t\t<p>I've heard the term cognitive debt being bandied about. Having to deal with larger PRs, especially with a good deal of AI-generated code can be taxing.</p>\n<blockquote>\n<p>This, I believe, is why reviewing AI-generated code feels so much more exhausting than reviewing a colleague's work. When a human pair submits code after a whiteboarding session, I am reviewing implementation against a design I already understand and agreed to. When AI generates code from a single prompt, I am simultaneously evaluating scope (did it build what I needed?), architecture (are the component boundaries right?), integration (does it fit our existing infrastructure?), contracts (are the interfaces correct?), and code quality (is the implementation clean?) — all at once, all entangled.</p>\n<p>That is too many dimensions of judgment for a single pass. The brain is not built for it. Things get missed — not because I am careless, but because I am overloaded.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-22T18:09:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/92/",
      "url": "https://kpwags.com/week-note/92/",
      "title": "Week Notes for March 15 - 21 (#92)",
      "content_html": "\n\t\t<p>Spent the first half recovering from a cold, then enjoyed the nice weekend weather.</p>\n<h2>Recovering</h2>\n<p>I took it easy this week recovering from whatever cold I caught. Monday was crud and I missed hockey, but starting Tuesday I got back on the mend. My nose was like a faucet most of the week, but it's starting to get back to normal...just in time for allergy season. Despite the urge to get right back out exercising, I opted to rest most of the week to put myself in a better position.</p>\n<h2>Beautiful Weekend Weather</h2>\n<p>Other than some rain overnight on Friday, the weather has been gorgeous. All weekend I spent time out on my porch going through my RSS feeds, writing, and enjoying the nice weather. I did get back on the exercise train, taking advantage of the weather to run Friday, Saturday, and Sunday. Only 3-4 miles each, but it felt good to be out running in shorts and a t-shirt.</p>\n<h2>Yard Work Season</h2>\n<p>It's spring, so that means the weather is nice enough for me to do some yard work. It ends up being too hot in the summer, so I try to do most of the necessary work in the spring and fall. This weekend's task was to get some dirt and finally plant grass where the oak tree we had to have taken down two years ago sat. I had to hold off on the grass seed as I realized we need to have a plumber over to fix our outdoor spigot as it snapped off at the end of last year. It'll give us time to see if we need more dirt as it settles, but it's always something with home ownership.</p>\n<h2>Finally Starting the Sunroom</h2>\n<p>Last week, before I got sick, I started putting the first coat of primer on the beadboard. Friday, I put the second coat on. Due to the furniture, I'm doing half the room at a time, but it looks nice being all white. I need to do the two coats of paint on the window sill and trim, then two coats on the walls, then shift the furniture and do it all over again. Might not be the most efficient, especially since we'll be revamping the room afterwards, but it's nice to have some progress made.</p>\n<h2>Cooking</h2>\n<h3>Chicken Pot Pie Pasta</h3>\n<p><a href=\"https://therecipecritic.com/chicken-pot-pie-pasta/\">This</a> turned out great. It had a nice creamy texture that you'd expect to find in a chicken pot pie. The egg noodles were a nice touch.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-22T18:05:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/looking-for-music-recommendations/",
      "url": "https://kpwags.com/posts/2026/looking-for-music-recommendations/",
      "title": "Looking for Music Recommendations",
      "content_html": "\n\t\t<p>I'm currently reading <a href=\"https://www.simonandschuster.com/books/Mood-Machine/Liz-Pelly/9781668083505\">Mood Machine: The Rise of Spotify and the Costs of the Perfect Playlist</a> by Liz Pelly. It's been an interesting read so far talking about how so many bands and artists live and die by inclusion or exclusion from Spotify's generated playlists. How inclusion can be a boon to an artist, but for smaller or independent artists, there's so much going against them in streaming between the big labels putting their thumb on the scale or Spotify going with &quot;ghost artists&quot; to save on royalties. So that's why I'm asking for recommendations.</p>\n<p>I've been focusing on purchasing more and more of my music. But of late I've realized that I've often been listening and purchasing music from the same artists. I'm not complaining or anything, it's nice filling out my collection with more of their discography. But at the same time it would be nice to find some new bands to listen to and enjoy.</p>\n<p>So please, send me your recommendations. I'm not picky on genre as my tastes can be quite &quot;eclectic&quot;. I'm looking for more independent bands and artists. Bands and musicians who might not be as well known are all great. Send me their Bandcamp, YouTube, or Apple Music links. I'd love to check them out and maybe even buy an album or two. Send me an <a href=\"mailto:hello@kpwags.com\">email</a> or reach out to me on <a href=\"https://hachyderm.io/@kpwags\">Mastodon</a> or <a href=\"https://bsky.app/profile/kpwags.com\">Bluesky</a>.</p>\n<p>Thanks in advance!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-19T20:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/im-still-mad-at-microsoft-for-killing-azure-data-studio/",
      "url": "https://kpwags.com/posts/2026/im-still-mad-at-microsoft-for-killing-azure-data-studio/",
      "title": "I&#39;m Still Mad at Microsoft for Killing Azure Data Studio",
      "content_html": "\n\t\t<p>I'm a .NET developer who outside of work, seldom uses Windows. My primary machine has been a MacBook Pro for around twenty years. I've lately been slowly <a href=\"https://kpwags.com/posts/2025/12/23/linux-as-a-daily-driver/\">migrating to Linux</a>, but that's <em>also</em> not Windows. Now that Microsoft made .NET cross-platform, it's great, I can develop on MacOS, Linux, Windows, whatever I want. It's great for everyone in my opinion. The one thing that hasn't been made cross platform is SQL Server and SQL Server Management Studio (SSMS).</p>\n<p>It's not that big of a deal as there's a Docker image I can use for development. What I do need is a way to easily query it. <a href=\"https://learn.microsoft.com/en-us/previous-versions/azure-data-studio/download-azure-data-studio?tabs=win-install%2Cwin-user-install%2Credhat-install%2Cwindows-uninstall%2Credhat-uninstall\">Azure Data Studio</a> fit that bill nicely. It felt like Visual Studio Code and provided a nice UI. I even used it on Windows despite SSMS being available. It was nice, it was its own standalone app, and I liked it.</p>\n<p><a href=\"https://learn.microsoft.com/en-us/sql/tools/whats-happening-azure-data-studio?view=sql-server-ver17&amp;tabs=dev\">Microsoft retired it at the end of February</a>.</p>\n<p>Yes, Microsoft is keeping it &quot;going&quot; as a Visual Studio Code Extension. But I liked it better as its own app. I liked the UI in its app, I liked that it worked &quot;separately&quot; and I could easily keep it and my other IDEs separate.</p>\n<p>It might be small, it might be something stupid, it might be petty, but I don't like it and I'm mad at Microsoft for this. And yes, there's plenty of other reasons to be mad at Microsoft for, but I'm going to add this one to the list and highlight it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-17T17:12:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/164/",
      "url": "https://kpwags.com/reading-log/164/",
      "title": "Reading Log - March 16, 2026 (#164)",
      "content_html": "\n\t\t<p>A look at how far behind the US is with privacy laws, some thoughts on AI coding assistants, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://bartwullems.blogspot.com/2026/02/cleaner-switch-expressions-with-pattern.html\">Cleaner switch expressions with pattern matching in C#</a> - <em>Bart Wullems</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.keithcirkel.co.uk/too-much-color/\">Too Much Color</a> - <em>Keith Cirkel</em></li>\n<li><a href=\"https://adamsilver.io/blog/native-html-components-dont-guarantee-good-ux/\">Native HTML components don’t guarantee good UX</a> - <em>Adam Silver</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/my-favorite-way-to-write-code-in-2026-on-becoming-a-tdd-addict/\">My favorite way to write code in 2026 (on becoming a TDD addict)</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://seanvoisen.com/writing/programming-in-the-swamp/\">Programming in the swamp</a> - <em>Sean Voisen</em></li>\n<li><a href=\"https://terriblesoftware.org/2026/03/03/nobody-gets-promoted-for-simplicity/\">Nobody Gets Promoted for Simplicity</a> - <em>Matheus Lima</em></li>\n<li><a href=\"https://martinfowler.com/articles/reduce-friction-ai/design-first-collaboration.html\">Design-First Collaboration</a> - <em>Rahul Garg</em></li>\n<li><a href=\"https://codemanship.wordpress.com/2026/02/23/will-you-finally-address-your-development-bottlenecks-in-2026/\">Will You Finally Address Your Development Bottlenecks In 2026?</a> - <em>Jason Gorman</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://another.rodeo/artisanal-web/\">The Artisanal Web</a> - <em>Carter Baxter</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/column/882516/privacy-laws-america\">America desperately needs new privacy laws</a> - <em>Adi Robertson</em></li>\n</ul>\n<hr />\n<h2>Privacy</h2>\n<ul>\n<li><a href=\"https://www.404media.co/flock-ice-surveillance-technology-reddit-ama/\">From Flock to ICE, Here’s a Breakdown of How You’re Being Watched</a> - <em>Evy Kwong, Joseph Cox, &amp; Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://codemanship.wordpress.com/2026/02/26/71-of-developers-and-engineering-leaders-believe-ai-makes-engineering-discipline-more-important/\">71% of Developers and Engineering Leaders Believe “AI” Makes Engineering Discipline More Important</a> - <em>Jason Gorman</em></li>\n<li><a href=\"https://codemanship.wordpress.com/2026/02/21/is-comprehension-debt-in-your-risk-register/\">Rely On AI And Get Left Behind</a> - <em>Jason Gorman</em></li>\n<li><a href=\"https://www.techdirt.com/2026/03/09/if-youre-going-to-defend-ai-and-whine-about-its-critics-you-should-probably-be-honest-about-its-actual-harms/\">If You’re Going To Defend AI And Whine About Its Critics, You Should Probably Be Honest About Its Actual Harms</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.universetoday.com/articles/research-reveals-why-tatooine-planets-are-rare\">Research Reveals Why Tatooine Planets are Rare</a> - <em>Matthew Williams</em></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2026/02/23/the-media-still-cant-figure-out-that-trump-says-things-that-arent-true/\">The Media Still Can’t Figure Out That Trump Says Things That Aren’t True</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://samhenri.gold/blog/20260312-this-is-not-the-computer-for-you/\">“This Is Not The Computer For You”</a> - <em>Sam Henri Gold</em></li>\n<li><a href=\"https://lynnandtonic.com/thoughts/entries/what-if-you-said-no/\">What if You Said No?</a> - <em>Lynn Fisher</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Sleep Token - Fall for Me</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/44gbx5VEYPY\" title=\"Sleep Token - Fall for Me\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-16T08:26:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/91/",
      "url": "https://kpwags.com/week-note/91/",
      "title": "Week Notes for March 8 - 14 (#91)",
      "content_html": "\n\t\t<p>It was a quiet week for the most part. The biggest downside is that I woke up feeling crummy Saturday.</p>\n<h2>Smoke Alarm Mystery</h2>\n<p>Over the last three weeks, my wife and I have been dealing with a mystery in one of our bedrooms. The smoke detector keeps going off. There's no sight, smell, or hint of smoke in the room. I've tried rotating the smoke detectors around (we have 4 identical ones) and regardless of which detector is in that bedroom, it is the one that goes off. So I suspect there's something in that room causing the problem. The problem is that I don't know what. I've had humidity in our basement trigger the one in our basement, but it's March, it's not humid, and it's definitely not humid in the bedroom.  Dust is another potential, but I've blown them out with compressed air, and they're not even three months old. I bought and installed them January 1st! So it's still a mystery to figure out what in that room is causing the smoke alarm to trigger.</p>\n<h2>Bombers Season Over</h2>\n<p>Tuesday was my hockey team's final game of the season. We ended up outmatched, losing 6-0. Ouch. It was a bummer of a season. We finished 6-12 so a slight improvement from last season. Either way, it was still a fun season. Good way to get some exercise, socialize and have some fun. Next season starts in less than a month and my other league is still going, so I'll still get plenty of hockey in.</p>\n<h2>Sick</h2>\n<p>Saturday morning I started feeling crummy. Feels like a cold. Sore throat, runny nose, and just generally lethargic. Fortunately we had no plans this weekend so I plopped myself down on the couch and relaxed all day. I spent a lot of the day going through my RSS feeds as I was well behind on them. It was a relaxing day that I would've enjoyed more if I was feeling so drained of energy. It stinks too because I was doing well with hitting my workouts this week. Runs Monday, Wednesday and Friday, combined with strength training Tuesday and Thursday. I was in the groove. Hopefully this passes quickly enough and I can get back to it. Rest should do me good.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-15T10:39:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/i-should-be-excited-about-artemis-ii/",
      "url": "https://kpwags.com/posts/2026/i-should-be-excited-about-artemis-ii/",
      "title": "I Should Be Excited About Artemis II",
      "content_html": "\n\t\t<p>One of, if not my favorite movie is <a href=\"https://www.imdb.com/title/tt0112384/\">Apollo 13</a>, a 1995 blockbuster film telling the story of what was supposed to be NASA's third mission to land on the moon, but turned into a heroic effort to bring the three astronauts home after an explosion aboard the spacecraft. Needless to say, I'm kind of a space nerd following along with what NASA has done with the Space Shuttle, the International Space Station (ISS), its various missions around the solar system, and more. Artemis II is preparing to launch. This is the first manned mission of the Artemis program, and they're going to the moon. They won't be landing, but this is kind of a big mission. Yet, for some strange reason I just haven't been as excited about it as I would've expected.</p>\n<p>I've been trying to figure out why that is. This is the first time NASA, or any other country for that matter are sending astronauts beyond low Earth orbit since 1972 and Apollo 17. All missions since launched by the US, Russia, or China have all been in Earth orbit whether it was a mission to Mir, the ISS, or anything else. It <em>should</em> be an exciting time, to see us break the bonds of Earth's gravity and head to the moon.</p>\n<p>Maybe it has been all the delays. There have been plenty of hiccups since President George W. Bush indicated for the end of the Shuttle program and for us to return to the moon back in the early 2000s. The <a href=\"https://en.wikipedia.org/wiki/Constellation_program\">Constellation Program</a> was started in 2005 to do just that. It was short lived though. NASA launched Ares I-X in October 2009 before President Obama cancelled it in 2010 due to findings that it would need more funding in order to be successful. The manned capsule lived on to be part of the <a href=\"https://en.wikipedia.org/wiki/Space_Launch_System\">Space Launch System</a> and the Artemis Program funded by Congress in 2011. It took 11 years for the first Artemis mission, <a href=\"https://en.wikipedia.org/wiki/Artemis_I\">Artemis I</a> to launch. It was an unmanned mission that launched in November 2022. It flew around the moon and returned to earth, <a href=\"https://kpwags.com/posts/2022/11/23/artemis-i/\">taking some fantastic photos</a>. Three and a half years later, we're only now gearing up for Artemis II. Part of that was I believe caused by some questions about the heat shield on the Orion capsule, but even the Space Shuttle launched more often. Obviously, I'd much rather NASA be safe rather than risk the astronauts' lives by repeating mistakes that helped cause the Challenger and Columbia disasters, but the delays keep putting it further back in my mind.</p>\n<p>In January, NASA rolled the SLS rocket out to the pad for Artemis II for a March launch. After 2 dress rehearsals, one cancelled by a hydrogen leak and another cancelled by a problem with the helium system in the upper stage. This was apparently an issue that could not be fixed on the pad, so the whole rocket <a href=\"https://arstechnica.com/space/2026/02/nasa-says-it-needs-to-haul-the-artemis-ii-rocket-back-to-the-hangar-for-repairs/\">had to be rolled back to the Vehicle Assembly Building (VAB)</a> so they could fix the problem. They've since corrected it and are preparing to roll it back to the launch pad in the hopes of an early April launch.</p>\n<p>Since then, there's also been <a href=\"https://www.cnn.com/2026/02/27/science/nasa-moon-landing-artemis-schedule\">changes to the Artemis program</a>. Artemis III was supposed to have humans land on the moon. That's been pushed back to Artemis IV. Artemis III is slated for 2027 with Artemis IV scheduled for 2028. Given all the delays and time between Artemis I and II, I'm skeptical, as are those overseeing NASA.</p>\n<p>The other thing I've noticed is that there's been little press about the mission in the news. I know the war in Iran is taking a lot of the news cycles, and before that it was ICE in Minnesota, the Epstein files, and hell knows what other firestorms coming out of the White House. But I'd think this mission would be broadcast, even if it was just something cynical to distract us from what are genuinely more serious issues. And that really could also be what's tripping me up. There's so much awfulness going on in my home country, and the world that I'm often distracted by the latest disaster out of Washington that I struggle to follow everything going on in the world without finding myself in a dark place.</p>\n<p>And despite the <a href=\"https://kpwags.com/posts/2024/09/19/the-lunacy-of-artemis/\">lunacy of the Artemis Program</a>, I still am in awe of the engineering and science it takes to launch rockets into space and send spacecraft, manned or unmanned, to other celestial bodies. And it is a nice looking rocket.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/BYNMbxjIyV-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/BYNMbxjIyV-1920.gif 1920w\" /><img alt=\"The SLS rocket carrying Artemis II rolling on the crawler.\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/BYNMbxjIyV-1920.jpeg\" width=\"1920\" height=\"1281\" /></picture></p>\n<div class=\"image-credit\">Credit: NASA</div>\n<p>Despite the lessened excitement, I'm looking forward to watching the launch and following the mission. Here's hoping the mission will go smoothly and safely.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-13T08:57:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/if-youre-going-to-defend-ai-and-whine-about-its-critics-you-should-probably-be-honest-about-its-actual-harms/",
      "url": "https://kpwags.com/notes/if-youre-going-to-defend-ai-and-whine-about-its-critics-you-should-probably-be-honest-about-its-actual-harms/",
      "title": "If You’re Going To Defend AI And Whine About Its Critics, You Should Probably Be Honest About Its Actual Harms",
      "content_html": "\n\t\t<blockquote>\n<p>There’s no mention of how these tools are causing corporations to <a href=\"https://news.cornell.edu/stories/2025/11/roadmap-shows-environmental-impact-ai-data-center-boom\">blow past their already tepid climate goal</a>; no mention of how the affluent, surveillance-obsessed exec dictating its trajectory <a href=\"https://www.axios.com/2025/09/05/trump-tech-dinner-ceo-zuckerberg-musk\">enthusiastically cozied up to fascists</a>; no mention of how Elon Musk and Mark Zuckerberg’s data centers are <a href=\"https://time.com/7308925/elon-musk-memphis-ai-data-center/\">funneling pollution directly into black neighborhoods</a>; zero mention of the technofascist plan to <a href=\"https://www.techdirt.com/2025/08/25/politico-management-insists-ai-shouldnt-be-held-to-any-sort-of-human-editorial-standards-because-its-built-by-coders-not-journalists/\">leverage AI to decimate unions</a>; no mention of the <a href=\"https://www.wheresyoured.at/why-everybody-is-losing-money-on-ai/\">weird and precarious financial shell games</a> powering the sector.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-12T13:29:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/well-my-ipod-update-might-be-short-lived/",
      "url": "https://kpwags.com/posts/2026/well-my-ipod-update-might-be-short-lived/",
      "title": "Well...My iPod Update Might Be Short Lived",
      "content_html": "\n\t\t<p>I mentioned in my <a href=\"https://kpwags.com/week-note/90/\">latest week note</a> that I got my iPod Classic back up and running. Sadly, the battery seems to be having a hard time keeping a charge.</p>\n<p>This morning I was trying to get the database to refresh after all the music transfers. I finally got it updated but I was having a hard time keeping the iPod charged. My two USB charging hubs weren't doing the trick so I had to plug it into my desktop. Eventually I got it charged enough to refresh the database but then I found that the iPod lost its charge very quickly.</p>\n<p>I'll be playing around with it for a while to see if I can figure out what's going on, but this is making me sad. I looked online and <a href=\"https://www.ifixit.com/Guide/iPod+Classic+Battery+Replacement/561\">iFixit says it's a very difficult</a> repair to replace the battery. I've never done anything like this so my confidence of being able to open the thing and do it myself. I might try to see if any of the fix-it stores nearby do iPods, but most seem to have moved on to only phones. I can't say I blame them, how many people use a 15+ year old digital music player.</p>\n<p>There's still the possibility I attempt it anyway...I mean if the battery <em>is</em> dead, the iPod would be less useful, so there's little harm in trying my hand at it. I'm hoping I can get it up and running.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-12T10:38:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/163/",
      "url": "https://kpwags.com/reading-log/163/",
      "title": "Reading Log - March 9, 2026 (#163)",
      "content_html": "\n\t\t<p>A really enlightening deep dive into HTML lists, thoughts on JS-heavy sites, thoughts on the WNBA negotiations and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://web.dev/blog/baseline-navigation-api?hl=en\">Navigation API - a better way to navigate, is now Baseline Newly Available</a> - <em>Jay Rungta</em></li>\n<li><a href=\"https://adactio.com/journal/22399\">Magic</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://aarontgrogg.github.io/NoLoJS/\">Reduce the JS Workload with no- or lo-JS options</a> - <em>Aaron T. Grogg</em></li>\n<li><a href=\"https://sgom.es/posts/2026-02-13-js-heavy-approaches-are-not-compatible-with-long-term-performance-goals/\">JS-heavy approaches are not compatible with long-term performance goals</a> - <em>Sérgio Gomes</em></li>\n<li><a href=\"https://piccalil.li/blog/an-in-depth-guide-to-customising-lists-with-css/\">An in-depth guide to customising lists with CSS</a> - <em>Richard Rutter</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://nolanlawson.com/2026/02/18/you-had-a-story/\">You had a story</a> - <em>Nolan Lawson</em></li>\n<li><a href=\"https://daverupert.com/2020/11/technical-debt-as-a-lack-of-understanding/\">Technical debt as a lack of understanding</a> - <em>Dave Rupert</em></li>\n<li><a href=\"https://www.nicchan.me/blog/wishcessibility/\">Wishcessibility</a> - <em>Nic Chan</em></li>\n<li><a href=\"https://www.abhinavomprakash.com/posts/i-am-happier-writing-code-by-hand/\">I Am Happier Writing Code By Hand</a> - <em>Abhinav Omprakash</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://unsung.aresluna.org/molly-guard-in-reverse/\">Molly guard in reverse</a> - <em>Marcin Wichary</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2026/02/17/preserving-the-web-is-not-the-problem-losing-it-is/\">Preserving The Web Is Not The Problem. Losing It Is.</a> - <em>Mark Graham</em></li>\n<li><a href=\"https://www.carolinecrampton.com/the-view-from-rss/\">The View From RSS</a> - <em>Caroline Crampton</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/with-iran-war-kalshi-and-polymarket-bet-that-the-depravity-economy-has-no-bottom/\">With Iran War, Kalshi and Polymarket Bet That the Depravity Economy Has No Bottom</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.sfgate.com/sports/article/wnba-mess-players-21957800.php\">The WNBA is a mess</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/podcast/889177/prediction-markets-news-gambling-polymarket-kalshi-iran-war-regulation\">Decoder: Prediction markets in the news are a dangerous gamble</a></li>\n<li><a href=\"https://kpwags.com/reading-log/163/www.nytimes.com/2026/02/28/podcasts/hardfork-pentagon-anthropic-openai.html\">Hard Fork Podcast: At the Pentagon, OpenAI is In and Anthropic Is Out</a></li>\n<li><a href=\"https://www.npr.org/2026/02/04/nx-s1-5699388/is-the-u-s-heading-into-a-dictatorship\">Fresh Air: Is the U.S. heading into a dictatorship?</a></li>\n<li><a href=\"https://www.404media.co/how-to-detect-phone-spying-tech-with-cooper-quintin/\">404 Media Podcast: How to Detect Phone Spying Tech (with Cooper Quintin)</a></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://lpeproject.org/blog/the-american-media-polycrisis-cascading-layers-of-capture/\">The American Media Polycrisis: Cascading Layers of Capture</a> - <em>Viktor Pickard</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://ratfactor.com/tech-nope2\">A programmer's loss of a social identity</a> - <em>Dave Gauer</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Green Day - American Idiot</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Ee_uujKuJMI\" title=\"Green Day - American Idiot\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-09T09:56:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/magic/",
      "url": "https://kpwags.com/notes/magic/",
      "title": "Magic",
      "content_html": "\n\t\t<blockquote>\n<p>I don’t like using code that I haven’t written and understood myself. Sometimes its unavoidable. I use two JavaScript libraries on The Session. One for displaying interactive maps and another for generating sheet music. As dependencies go, they’re very good but I still don’t like the feeling of being dependant on anything I don’t fully understand.</p>\n<p>I can’t stomach the idea of using npm to install client-side JavaScript (which then installs more JavaScript, which in turn is dependant on even more JavaScript). It gives me the heebie-jeebies. I’m kind of astonished that most front-end developers have normalised doing daily trust falls with their codebases.</p>\n</blockquote>\n<p>I don’t think I’m as adverse to dependencies as Jeremy, but I’ve definitely shifted more to his views over the years. I’ll definitely write my own code more readily than I would’ve several years ago.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-08T18:23:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/js-heavy-approaches-are-not-compatible-with-long-term-performance-goals/",
      "url": "https://kpwags.com/notes/js-heavy-approaches-are-not-compatible-with-long-term-performance-goals/",
      "title": "JS-Heavy Approaches are Not Compatible with Long-Term Performance Goals",
      "content_html": "\n\t\t<blockquote>\n<p>I do get the appeal of building in React, really, I do. It’s a fun programming model, and there are inherent organisational benefits to the component paradigm it pushes so hard. There’s also a lot you can reuse out there, and maybe that gives you the confidence that you’ll spend less time in the initial implementation, leaving you longer for improvements and polish.</p>\n<p>And that’s fair, you probably won’t find a larger ecosystem of components, libraries, and complementary frameworks, ready to use! But beyond generally poor performance, they come with another pretty big caveat: they don’t seem to last very long. In my experience, there isn’t much in the way of stability in the React ecosystem, or even the JS ecosystem as a whole. Perhaps that’s changing lately, but historically, I’ve seen multiple large applications end up rewriting massive portions of their code after a while, not because of product reasons, but because of dependencies</p>\n</blockquote>\n<p>It is easy to find a library for anything you need in React. It's what it makes it easy to quickly build things. But building quickly doesn't mean building well.</p>\n<blockquote>\n<p>It’s time to stop lying to ourselves that JS-heavy client-side approaches are the way to develop a web app nowadays. We really should stop reflexively reaching for JS frameworks for everything we build, and to stop basing our architecture decisions on the stack we’re most familiar with.</p>\n</blockquote>\n<p>&quot;How we've always done it&quot; is so often too easy to say and do.</p>\n<blockquote>\n<p>We really owe it to our users to do better as an industry, because right now we’re often building the way we want to, not the way they need us to.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-08T18:21:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/an-in-depth-guide-to-customising-lists-with-css/",
      "url": "https://kpwags.com/notes/an-in-depth-guide-to-customising-lists-with-css/",
      "title": "An In-Depth Guide to Customising Lists with CSS",
      "content_html": "\n\t\t<p>This is a phenomenal deep dive into all the different ways you can customize the HTML list elements.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-08T18:18:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/a-programmers-loss-of-a-social-identity/",
      "url": "https://kpwags.com/notes/a-programmers-loss-of-a-social-identity/",
      "title": "A Programmer&#39;s Loss of a Social Identity",
      "content_html": "\n\t\t<blockquote>\n<p>I enjoy programming computers because they function on a set of precise and rigid rules. This creates a kind of fantasy world where you can gain wizard-like powers as you accumulate knowledge. Yes, programming is hard and it can be exasperating, but that makes the eventual accomplishment of mastering the skill all the sweeter. Over time, you gain fluency and dexterity as a programmer. It feels good.</p>\n<p>Which is to say that the pleasure I get from programming is mostly about <strong>learning</strong> the underlying truths about computation and <strong>applying</strong> what I’ve learned. Always improving the craft. This, to me, is the practice of programming.</p>\n<p>As the saying goes, the more you learn, the more you realize how much there is still to learn. I’ve spent countless hours over the last 30 years reading about, thinking about, and practicing the art, hobby, occupation, and discipline of programming computers. If only by volume, it’s a big part of who I am.</p>\n</blockquote>\n<p>This is why I love development.</p>\n<blockquote>\n<p>We value learning. We value the merits of language design, type systems, software maintenance, levels of abstraction, and yeah, if I’m honest, minute syntactical differences, the color of the bike shed, and the best way to get that perfectly smooth shave on a yak. I’m not sure what we’re called now, &quot;heirloom programmers&quot;?</p>\n<p>Do I sound like a machine code programmer in the 1950s refusing to learn structured programming and compiled languages? I reject that comparison. I love a beautiful abstraction just as much as I love a good low-level trick.</p>\n<p>If the problem is that we’ve painted our development environments into a corner that requires tons of boilerplate, then <em>that</em> is the problem. We should have been chopping the cruft away and replacing it with deterministic abstractions like we’ve always done. That’s what that Larry Wall quote about good programmers being lazy was about. It did <em>not</em> mean that we would be okay with pulling a damn slot machine lever a couple times to generate the boilerplate.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-08T18:17:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/technical-debt-as-a-lack-of-understanding/",
      "url": "https://kpwags.com/notes/technical-debt-as-a-lack-of-understanding/",
      "title": "Technical Debt as a Lack of Understanding",
      "content_html": "\n\t\t<blockquote>\n<p>I like this definition that the problem lies in “never reorganizing [the code] to reflect your understanding.” In a go-go-go product cycle, that loss of understanding begins to create problems that have literal and figurative costs. A general sense of confusion builds and builds. The developer economics are fairly simple to quantify; either you slow down and pay someone to refactor and document the code after every major iteration, or you pay every developer who works on the project until the end of time to stare at the code for a few hours and wonder what the hell is going on. That dumbfounded staring at the codebase compounds over time. Organizationally, you pay in velocity and turnover; talented people are going to leave after a few rounds of bullshit.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-08T18:16:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/90/",
      "url": "https://kpwags.com/week-note/90/",
      "title": "Week Notes for March 1 - 7 (#90)",
      "content_html": "\n\t\t<p>It was a gloomy week with lots of rain. I could've used some sun.</p>\n<h2>A Lot of Laziness</h2>\n<p>I don't know what it was this week, but I just felt lazy. After work, I really just wanted to plop myself down and do a whole lot of nothing. I managed to shake off the laziness Friday and Saturday with a 4 and 7 mile run respectively, so that was good, but it just felt like a weird week for me.</p>\n<h2>Distance Running</h2>\n<p>One thing I was hoping to do this year was get back into some distance running. The weather cleared up enough on Saturday to give it a go. I was hoping for 6 miles but was feeling good and ended up finishing at 7.04 miles. I'll chalk it up as a success. Let's see if I can continue to build on it.</p>\n<h2>Solved the Work Frustrations</h2>\n<p>We finally found the issue with the project I was struggling with <a href=\"https://kpwags.com/week-note/89/\">last week</a>. Oddly enough it was a new seemingly unrelated bug that triggered the key hint as to what was causing the problem that allowed us to reproduce and eventually fix it.</p>\n<h2>Bandcamp Friday</h2>\n<p>Another Bandcamp Friday got me to open up my wallet some. Walked away with 9 new albums.</p>\n<ul>\n<li><a href=\"https://americanaquarium.bandcamp.com/album/burn-flickr-die\">American Aquarium - Burn.Flickr.Die</a></li>\n<li><a href=\"https://americanaquarium.bandcamp.com/album/slappers-bangers-certified-twangers-vol-2\">American Aquarium - Slappers, Bangers &amp; Certified Twangers: Volume Two</a></li>\n<li><a href=\"https://americanaquarium.bandcamp.com/album/wolves\">American Aquarium - Wolves</a></li>\n<li><a href=\"https://freethrowemo.bandcamp.com/album/bear-your-mind\">Free Throw - Bear Your Mind</a></li>\n<li><a href=\"https://freethrowemo.bandcamp.com/album/piecing-it-together\">Free Throw - Piecing it Together</a></li>\n<li><a href=\"https://hotwatermusic.bandcamp.com/album/fuel-for-the-hate-game\">Hot Water Music - Fuel for the Hate Game</a></li>\n<li><a href=\"https://hotwatermusic.bandcamp.com/album/moonpies-for-misfits\">Hot Water Music - Moonpies for Misfits</a></li>\n<li><a href=\"https://hotwatermusic.bandcamp.com/album/never-ender\">Hot Water Music - Never Ender</a></li>\n<li><a href=\"https://rockyvotolato.bandcamp.com/album/makers-expanded-edition\">Rocky Votolato - Makers (Extended Edition)</a></li>\n</ul>\n<h2>Refreshing My iPod</h2>\n<p>I have an 160GB iPod Classic that's been sitting around. I've been struggling restoring it on either my MacBook Pro (it's an Apple device trying to restore an Apple device...seriously?). Finally I decided to try booting my desktop into Windows 11 and try to do it on Windows. Oddly enough, it was pretty easy on Windows. Once restored, I flashed <a href=\"https://www.rockbox.org/\">Rockbox</a> on it to give it FLAC support and loaded my music collection onto it. It's working nicely.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/ri6a2k8jgF-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/ri6a2k8jgF-1440.gif 1440w\" /><img alt=\"My iPod sitting on my desk\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/ri6a2k8jgF-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p>The downside of the FLAC support is that the music files are larger which might cause my iPod to run out of space. I wonder how hard it would be to install a bigger storage medium on it.</p>\n<h2>Recipes</h2>\n<h3>Panda Express Chow Mein</h3>\n<p>I found <a href=\"https://therecipecritic.com/panda-express-chow-mein/\">this recipe</a> and it turned out well. I did add steak to it. I just got a strip steak, sliced it thin, coated it in corn starch, and started out by frying it before adding the veggies.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-08T18:14:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/i-am-happier-writing-code-by-hand/",
      "url": "https://kpwags.com/notes/i-am-happier-writing-code-by-hand/",
      "title": "I Am Happier Writing Code By Hand",
      "content_html": "\n\t\t<blockquote>\n<p>The other major part of the job is to ensure correctness. For me, it is much harder to verify the correctness of code I didn’t write compared to code I wrote. The process of writing code helps internalize the context and is easier for my brain to think deeply about it. If I outsource this to an LLM, I skip over the process of internalizing the problem domain and I can’t be certain that the generated code is correct.</p>\n</blockquote>\n<p>Writing the code helps you understand what it's doing. The better your understanding of code, the easier it tends to be to debug it when you're trying to track down a bug or other issue.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-03T19:04:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/february-2026-check-in/",
      "url": "https://kpwags.com/posts/2026/february-2026-check-in/",
      "title": "February 2026 Check-In",
      "content_html": "\n\t\t<p>It's been a month. The first half of the month was frigid, we got some warmer weather mixed in along with several significant snowfalls. Tess loved the snow, but I'm glad to have some milder weather coming.</p>\n<h2>Hard Time Staying Focused</h2>\n<p>I'm not sure why, but this whole past month I've had a hard time staying focused on anything. I didn't write nearly as much as I intended, my side project that I've been tinkering around with has been mostly stuck in place. I'm not sure whether its the cold weather or what, but it's felt like I've been in some funk. Hopefully I can break free this month.</p>\n<h2>Some Improvements to My Blogging Process</h2>\n<p>I mentioned in a previous <a href=\"https://kpwags.com/week-note/88/\">week note</a> that I migrated my blog tooling to Node.js apps to make the process of building my site a little easier. Also included in that was some tweaks to my <a href=\"https://kpwags.com/now/\">/now</a> page. I added a section for my recently purchased music. I figured since I started tracking when I purchased my albums, I'd add them there as well.</p>\n<h2>Not the Greatest Month for Fitness</h2>\n<p>When it comes to working out, it wasn't a great month. Sometimes it was just doctor appointments that got in the way, but part of it was my own laziness. The extreme cold didn't help either. I'm not going running in 10°F (-12°C) weather. It was cold enough walking Tess the half mile around the block. I-League started back up so now I'll have a more steady stream of hockey games the next 2 months.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>5</span> runs - <span>21.87</span> miles</li>\n<li><strong>Walking:</strong> <span>26</span> walks - <span>18.97</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>5</span> sessions - <span>78,055</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/chip-war-the-fight-for-the-world-s-most-critical-technology-chris-miller/18265375?ean=9781982172008\">Chip War: The Fight for the World's Most Critical Technology</a> by Chris Miller</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/children-of-memory-adrian-tchaikovsky/2bdd73055c954a77\">Children of Memory</a> by Adrian Tchaikovsky</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/how-to-think-like-socrates-ancient-philosophy-as-a-way-of-life-in-the-modern-world-donald-j-robertson/4bb0f6ae0feb0ce1\">How to Think Like Socrates: Ancient Philosophy as a Way of Life in the Modern World</a> by Donald J. Robertson</li>\n<li>Started <a href=\"https://bookshop.org/p/books/blood-in-the-machine-the-origins-of-the-rebellion-against-big-tech-brian-merchant/17824365?ean=9780316487740\">Blood in the Machine: The Origins of the Rebellion Against Big Tech</a> by Brian Merchant</li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/158/\">February 2 (#158)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/159/\">February 9 (#159)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/160/\">February 16 (#160)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/161/\">February 23 (#161)</a></li>\n</ul><p></p>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/86/\">February 1 - 7 (#86)</a></li>\n<li><a href=\"https://kpwags.com/week-note/87/\">February 8 - 14 (#87)</a></li>\n<li><a href=\"https://kpwags.com/week-note/88/\">February 15 - 21 (#88)</a></li>\n<li><a href=\"https://kpwags.com/week-note/89/\">February 22 - 28 (#89)</a></li>\n</ul><p></p>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/thoughts-on-far-cry-5-and-far-cry-new-dawn/\">Far Cry 5 &amp; New Dawn</a></li>\n<li>Shared my thoughts on <a href=\"https://kpwags.com/posts/2026/just-start/\">just starting</a></li>\n<li>Shook my head about <a href=\"https://kpwags.com/posts/2026/discord-is-just-the-next-in-line/\">Discord's age verification rules</a></li>\n<li>Disclosed <a href=\"https://kpwags.com/posts/2026/my-new-substack-policy/\">my new policy for Substack</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/still-using-sublime-text/\">still using Sublime Text</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/thinking-about-my-next-laptop-phone-and-tablet/\">my next phone, tablet &amp; computer</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2026/my-star-ratings/\">my thoughts on my star ratings</a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2026/just-keep-creating/\">AI &amp; just keep creating</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.ea.com/games/starwars/squadrons\">Star Wars Squadrons</a></li>\n<li>Continued <a href=\"https://www.playstation.com/en-us/games/helldivers-2/\">Helldivers II</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0212671/\">Malcolm in the Middle</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt32642706/\">The Rip</a></li>\n<li><a href=\"https://www.imdb.com/title/tt8385148/\">Hitman's Wife's Bodyguard</a></li>\n<li><a href=\"https://www.imdb.com/title/tt26683420/\">John Candy: I Like Me</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1341338/\">Good Luck, Have Fun, Don't Die</a></li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>🎵 New Music</h3><p></p>\n<p></p><ul>\n<li>American Aquarium - Antique Hearts Revisited</li>\n<li>American Aquarium - Slappers, Bangers &amp; Certified Twangers: Volume One</li>\n<li>American Aquarium - Things Change</li>\n<li>Brian Fallon - Georgia</li>\n<li>Dave Hause - Resolutions XV Part 1</li>\n<li>Free Throw - Lessons that We Swear to Keep</li>\n<li>Lax Poetic - My Best Impression of Being Okay</li>\n<li>The Menzingers - Hold On, Dodge</li>\n<li>Microwave - Let's Start Degeneracy</li>\n<li>Microwave - Stovall</li>\n<li>Thursday - War All the Time (Live)</li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-03T18:55:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/162/",
      "url": "https://kpwags.com/reading-log/162/",
      "title": "Reading Log - March 2, 2026 (#162)",
      "content_html": "\n\t\t<p>NASA has to delay Artemis II, looking at a new HTML tag, contrast color help, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/css-bar-charts-using-modern-functions/\">CSS Bar Charts Using Modern Functions</a> - <em>Preethi</em></li>\n<li><a href=\"https://ishadeed.com/article/too-early-breakpoint/\">The Too Early Breakpoint</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://piccalil.li/blog/some-css-only-contrast-options-until-contrast-color-is-baseline-widely-available/\">Some CSS only contrast options until contrast-color() is Baseline widely available</a> - <em>Donnie D’Amato</em></li>\n<li><a href=\"https://www.matuzo.at/blog/2026/geolocation-element\">Introduction to the new HTML element <geolocation></geolocation></a> - <em>Manuel Matuzović</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/the-open-source-design-stack/\">The open source design stack</a> - <em>Scott Riley</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://ia.net/topics/trapped-in-ms-office\">Trapped in MS Office</a> - <em>iA</em></li>\n<li><a href=\"https://www.404media.co/this-app-warns-you-if-someone-is-wearing-smart-glasses-nearby/\">This App Warns You if Someone Is Wearing Smart Glasses Nearby</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/whats-the-point-of-school-when-ai-can-do-your-homework/\">What’s the Point of School When AI Can Do Your Homework?</a> - <em>Matthew Gault</em></li>\n<li><a href=\"https://www.404media.co/meta-director-of-ai-safety-allows-ai-agent-to-accidentally-delete-her-inbox/\">Meta Director of AI Safety Allows AI Agent to Accidentally Delete Her Inbox</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2026/02/nasa-says-it-needs-to-haul-the-artemis-ii-rocket-back-to-the-hangar-for-repairs/\">NASA says it needs to haul the Artemis II rocket back to the hangar for repairs</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/tech/883015/microsoft-xbox-new-ceo-shakeup-notepad\">Inside Microsoft’s big Xbox leadership shake-up</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/team-usa-had-connor-hellebuyck-golden-goalie?giftLink=7905fb5e566530fa0d2a87abb1539963\">Team USA Had The Golden Goalie</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/articles/the-ellisons-prepare-to-expand-their-media-empire\">On the Media: The Ellisons Prepare to Expand Their Media Empire</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2026/02/26/kai-returns-to-unpack-trumps-new-tariff\">Make Me Smart: Kai returns to unpack Trump's new tariff</a></li>\n<li><a href=\"https://podcasts.apple.com/us/podcast/mike-masnick-on-the-decentralised-internet/id1831285114?i=1000751154702\">Humans in the Loop: Mike Masnick on the decentralised internet</a></li>\n<li><a href=\"https://www.npr.org/2026/02/21/nx-s1-5720178/trump-military-ban-rights-transgender-troops\">Lauren Hodges: Former top general calls military's removal of trans troops a costly mistake</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://blog.apaonline.org/2025/11/12/the-problem-is-epistemic-the-solution-is-not/\">The Problem is Epistemic. The Solution is Not.</a> - <em>Samuel Bagg</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2026/02/21/nx-s1-5721755/how-nazgul-the-wolfdog-made-his-run-for-winter-olympic-glory-in-italy\">How Nazgul the wolfdog made his run for Winter Olympic glory in Italy</a> - <em>Nathaniel Herz</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - Nobody's Heroes</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/U3ZGRsbBH94\" title=\"The Menzingers - Nobody's Heroes\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-02T09:30:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/89/",
      "url": "https://kpwags.com/week-note/89/",
      "title": "Week Notes for February 22 - 28 (#89)",
      "content_html": "\n\t\t<p>It was a weird week. Weather was gorgeous at the end of it to counter some frustrations.</p>\n<h2>Back-to-Back Hockey Games</h2>\n<p>On Monday night I ended up playing back-to-back games helping out another team who needed a netminder. Talk about a tale of two extremes. The first game I hardly faced any shots, winning 3-0. The second game was me getting hammered with shots. I managed to stop all but 2, and unfortunately, that's all it took as we lost 2-1. I felt good about my play despite the loss.</p>\n<h2>Some Frustrating Days at Work</h2>\n<p>We went live in production on one of the projects I'm working on at work with the .NET 10 upgrade. Everything looked good in the lower environments, but in production we've been getting reports of issues. Most of the week has been us struggling to figure out what is going on as we're not seeing any errors to indicate a problem, nor can we reproduce what's being reported. Hopefully we'll find some hints soon.</p>\n<h2>Struggling to Focus</h2>\n<p>This entire week I've just been distracted and struggling to focus on whatever it is that I want to work on. I wanted to get more writing done, but just couldn't focus enough to actually put words to paper. Can't really place a reason for it, but I'm hoping I can regain some of it.</p>\n<h2>Beautiful Saturday Weather</h2>\n<p>Saturday the temperature hit 60°F (~16°C). For the end of February, it was crazy. I took advantage of that and went for a run and sat out on my porch with Tess catching up on my RSS feeds. I also finally ripped out my Ring doorbell to <a href=\"https://www.404media.co/leaked-email-suggests-ring-plans-to-expand-search-party-surveillance-beyond-dogs/\">avoid joining</a> <a href=\"https://www.404media.co/with-ring-american-consumers-built-a-surveillance-dragnet/\">the dystopian surveillance dragnet</a>. I could've done it in the cold, but it's easier to handle tools without my hands freezing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-01T10:27:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/brian-merchant-blood-in-the-machine/",
      "url": "https://kpwags.com/books/brian-merchant-blood-in-the-machine/",
      "title": "Book Notes for Blood in the Machine: The Origins of the Rebellion Against Big Tech",
      "content_html": "\n\t\t<p>I picked a good time to read this book. Right now, the tech job market is in a weird place. The layoffs have slowed a bit lately, but we're also in a low-hire environment where those who have been laid off, as well as recent graduates are often having trouble finding work.</p>\n<p>Today, much of that is coming from how AI and LLMs are being used to try to supplement workers or replace the need to hire additional staff. Back in the early 1800s, it was similar, but instead of AI, you had power looms and other inventions tied to the industrial revolution that were putting many who worked in the textile business out of work.</p>\n<p>Brian Merchant does a fantastic job in this book going through the history of the Luddite Rebellions. He describes the struggles of those facing the toughest of economic times and the lack of support they got from their governments. He also explains so many of the misconceptions of the Luddites. They weren't anti-technology. They were against how the new technology was being used.</p>\n<blockquote>\n<p>The message did not just appeal to weavers and cloth dressers and knitters, which perhaps worried the magistrates and the Home Office most. Artisans, hat-makers, shoemakers, bricklayers, small shop owners, and farmers joined the cause. So did coal miners and railroad workers, whose industries were on the <em>rise</em> due in part to the technology and automation - because the Luddite movement was not about technology; it was about workers' rights. Luddism started as a tactical strike against the technologies of control, but had exploded into a greater expression of the rage against a system where the privileged few with access to the right levers could lift themselves up at the expense of the many.</p>\n</blockquote>\n<p>This book really does make me think about all that is going on today. Between AI, the rise of the gig economy and everything else, capitalism feels broken. During the unrest in England in the early 1800s, while it was only the textile industry dealing with the rise of the machines at the time, other industries saw the writing on the wall and supported the textile workers. We should make sure we do the same for everyone today.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-03-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/just-keep-creating/",
      "url": "https://kpwags.com/posts/2026/just-keep-creating/",
      "title": "Just Keep Creating",
      "content_html": "\n\t\t<p>There's a lot of talk going on around AI and how it's things become faster and easier to create and build. Now instead of spending the countless hours at the keyboard typing out the next great American novel, you can open up ChatGPT. Digital art more your thing? Don't worry it can do that too, and if you're lucky, any humans will have 5 fingers. It's depressing, really. So much AI slop is now out there, everyone is trying to sift through all the junk to find the real stuff, the stuff we want to read, want to look at, want to admire. And none of this even begins to factor in the environmental costs to all of it. Well I have one thing to say to everyone grumbling about that, keep doing your thing, keep creating.</p>\n<p>I want to read books written by humans. Fiction, non-fiction, funny, serious, all of them. I want to watch TV and movies made by humans, acted and voiced by humans. I want to play video games designed by humans. I want to enjoy art that was made by humans. I want to listen to music written and played by humans. Art, books, music, everything is so much better when we make it ourselves with a human touch, with our talents and lived experiences. And I know I'm not the only one who feels this way. There are many like me.</p>\n<p>What this means is that keep making your art, keep writing your stories, blog posts, thoughts. Keep building your fun little websites and apps. People like me want to see, read, watch, stare in amazement at all the amazing things you, and everyone like you create. Don't let all the AI slop discourage you from being creative. AI and LLMs sadly will not be going away anytime soon, no matter how much we might want them to. It's important that our creative endeavors continue to persist.</p>\n<p>Just. Keep. Creating.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-26T19:22:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/my-star-ratings/",
      "url": "https://kpwags.com/posts/2026/my-star-ratings/",
      "title": "My Star Ratings",
      "content_html": "\n\t\t<p>If you go to my <a href=\"https://kpwags.com/bookshelf/\">bookshelf</a>, <a href=\"https://kpwags.com/movies/\">movies</a>, <a href=\"https://kpwags.com/tv/\">TV</a>, or <a href=\"https://kpwags.com/video-game\">video game</a> pages, you'll notice I'll use a five star rating system. I thought I'd share what I generally mean when I use each rating to make it a little more understandable.</p>\n<p>Like with any form of media, how good something is is subjective and aligns with one's personal taste. I could think a book or movie is amazing, and someone else could think it's crap. It doesn't mean I'm right and they're wrong. We all like what we like, and I don't want to yuck anyone's yum. I'm thinking explaining my ratings might help those who read them better understand what I saw in each movie, book, TV show or video game.</p>\n<h2>1 STAR ⭐️</h2>\n<p>This should be pretty self-explanatory. I didn't like it, at all. nor would I recommend it. I don't give out zero stars...at least not yet...so this is the lowest something can receive.</p>\n<h2>2 STARS ⭐️⭐️</h2>\n<p>I generally didn't like this. Sometimes it's just that I didn't get it, maybe it just wasn't what I was looking for. It might still have some redeeming qualities, but on the whole I found it more unfavorable than good. I wouldn't necessarily say don't consume it, but I wouldn't really recommend it either.</p>\n<h2>3 STARS ⭐️⭐️⭐️</h2>\n<p>It was fine. I'm generally glad I watched, read or played it, but it wasn't by any means my favorite. I'd still recommend it though.</p>\n<h2>4 Stars ⭐️⭐️⭐️⭐️</h2>\n<p>I liked it. I thought it was really good and would recommend it to anyone. While it might not have absolutely knocked my socks off, it was better than most.</p>\n<h2>5 STARS ⭐️⭐️⭐️⭐️⭐️</h2>\n<p>I loved it. I sometimes worry that I'm too liberal in using this rating, but at the same time, if I love a book, movie or whatnot, share it. Obviously if everything is rated 5 stars, it becomes meaningless, but I fail to see why it shouldn't be used when appropriate. Needless to say, if I rate something five stars...I would <em>highly</em> recommend checking it out as soon as you can.</p>\n<hr />\n<p>Again, please take all the ratings I give to pieces of media with a grain of salt knowing that it's what I thought. For most pieces of media, I'll also add some short notes that might provide better context to my thoughts on the piece rather than some silly, arbitrary number.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-24T20:02:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/meta-director-of-ai-safety-allows-ai-agent-to-accidentally-delete-her-inbox/",
      "url": "https://kpwags.com/notes/meta-director-of-ai-safety-allows-ai-agent-to-accidentally-delete-her-inbox/",
      "title": "Meta Director of AI Safety Allows AI Agent to Accidentally Delete Her Inbox",
      "content_html": "\n\t\t<blockquote>\n<p>Meta’s director of safety and alignment at its “superintelligence” lab, supposedly the person at the company who is working to make sure that powerful AI tools don’t go rogue and act against human interests, had to scramble to stop an AI agent from deleting her inbox against her wishes and called it a “rookie mistake.”</p>\n</blockquote>\n<p>I don't know about you, but this really inspires my confidence in Meta to handle AI safely and effectively.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-24T08:09:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/161/",
      "url": "https://kpwags.com/reading-log/161/",
      "title": "Reading Log - February 23, 2026 (#161)",
      "content_html": "\n\t\t<p>An interesting article about the issues of privacy and the Meta smart glasses, a look at an all-AI school, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://erikej.github.io/dotnet/dacfx/sqlserver/visualstudio/2026/01/29/sqlproj-power-tools-guide.html\">Getting Started with SQL Database Project Power Tools</a> - <em>Erik Ejlskov Jensen</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/programming-principles-for-self-taught-front-end-developers/\">Programming principles for self taught front-end developers</a> - <em>Kilian Valkhof</em></li>\n<li><a href=\"https://webkit.org/blog/17758/when-will-css-grid-lanes-arrive-how-long-until-we-can-use-it/\">When will CSS Grid Lanes arrive? How long until we can use it?</a> - <em>Jen Simmons</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://drewdevault.com/2026/01/29/2026-01-29-Cult-of-TDD-and-LLMs.html\">The cults of TDD and GenAI</a> - <em>Drew DeVault</em></li>\n<li><a href=\"https://codemanship.wordpress.com/2026/01/29/writing-code-may-be-dead-not-really-but-reading-code-will-live-on/\">Writing Code May Be Dead (Not Really), But Reading Code Will Live On</a> - <em>Jason Gorman</em></li>\n<li><a href=\"https://github.blog/developer-skills/programming-languages-and-frameworks/7-learnings-from-anders-hejlsberg-the-architect-behind-c-and-typescript/\">7 learnings from Anders Hejlsberg: The architect behind C# and TypeScript</a> - <em>Aaron Winston</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/column/881744/meta-smart-glasses-facial-recognition-rayban-privacy-wearables?view_token=eyJhbGciOiJIUzI1NiJ9.eyJpZCI6InpZYjhxeWxZVmsiLCJwIjoiL2NvbHVtbi84ODE3NDQvbWV0YS1zbWFydC1nbGFzc2VzLWZhY2lhbC1yZWNvZ25pdGlvbi1yYXliYW4tcHJpdmFjeS13ZWFyYWJsZXMiLCJleHAiOjE3NzIyMTE1MjEsImlhdCI6MTc3MTc3OTUyMX0.e9uMcQl0Nrq0UYgXNIuwU3P811wrDOx1G8AUIo_V6os&amp;utm_medium=gift-link\">Meta will ruin its smart glasses by being Meta</a> - <em>Victoria Song</em></li>\n<li><a href=\"https://www.theverge.com/tech/880812/ramageddon-ram-shortage-memory-crisis-price-2026-phones-laptops\">The RAM shortage is coming for everything you care about</a> - <em>Sean Hollister</em></li>\n<li><a href=\"https://www.404media.co/leaked-email-suggests-ring-plans-to-expand-search-party-surveillance-beyond-dogs/\">Leaked Email Suggests Ring Plans to Expand ‘Search Party’ Surveillance Beyond Dogs</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://www.404media.co/underground-facial-recognition-tool-unmasks-camgirls/\">Underground Facial Recognition Tool Unmasks Camgirls</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/students-are-being-treated-like-guinea-pigs-inside-an-ai-powered-private-school/\">'Students Are Being Treated Like Guinea Pigs:' Inside an AI-Powered Private School</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/all-i-want-is-a-womens-hockey-broadcast-that-talks-about-the-hockey?utm_source=defector.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=the-cipher-with-an-nba-refresher-and-nirvanna-the-band&amp;_bhlid=cab1c04eb8c9a91d027fe7e664d91e16f44c0cb6&amp;giftLink=a38ec4ce0dc03c742d5d0431e14667bc\">All I Want Is A Women’s Hockey Broadcast That Talks About The Hockey</a> - <em>Lesley Ryder</em></li>\n<li><a href=\"https://defector.com/team-usas-gold-is-sweeter-for-the-struggle?giftLink=1281d7845af53bb88af84d82e40db62c\">Team USA’s Gold Is Sweeter For The Struggle</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://aworkinglibrary.com/writing/designed-to-be-specialists\">Designed to be specialists</a> - <em>Mandy Brown</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Thursday - War All the Time</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/zs5Jc6RTr00\" title=\"Thursday - War All the Time\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-23T10:25:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/88/",
      "url": "https://kpwags.com/week-note/88/",
      "title": "Week Notes for February 15 - 21 (#88)",
      "content_html": "\n\t\t<p>It was a mostly quiet week. Had hockey 2 nights, a nice date night Saturday, and otherwise uneventful.</p>\n<h2>I-League Starts Back Up</h2>\n<p>The I-League I play in as a goalie started back up Monday. The roster changed over this season some which often happens. We played a strong game. Outside of trading goals in the first period, that game ended up being a goalie battle. Both me and our opponent's goalie played well and the game ended in a 1-1 tie. I was happy with my performance, didn't feel rusty after 6-7 weeks off from games. Still saw some things I could work on.</p>\n<h2>Migrated Blog Tooling to Node.js</h2>\n<p>I have a few .NET console applications that help me build my posts and site. I spent a good portion of this week rebuilding them using Node.js to make switching between my Mac and Linux machines a little easier. More to come on this.</p>\n<h2>Lazy-ish Week</h2>\n<p>Outside hockey Monday and Wednesday nights, I didn't work out as much as I wanted to. I did take advantage of the nicer weather Saturday to go for a 5.5 mile run which actually felt good.</p>\n<h2>Date Night</h2>\n<p>Saturday night was another date night. We went to Stable 12 for dinner followed by the movies to see <em>Good Luck, Have Fun, Don't Die</em>, which was enjoyable. It was a good way to spend a weekend night.</p>\n<p><media-box title=\"Good Luck, Have Fun, Don't Die\" link=\"https://www.imdb.com/title/tt1341338\" image=\"https://i.postimg.cc/J09zLP0g/good-luck-have-fun-dont-die.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/J09zLP0g/good-luck-have-fun-dont-die.jpg\" alt=\"Good Luck, Have Fun, Don't Die\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt1341338\">Good Luck, Have Fun, Don't Die</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI really enjoyed this. It was offbeat, had some good laughs, cast was excellent, and would highly recommend.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Recipes</h2>\n<h3>Miso Chicken</h3>\n<p>I found <a href=\"https://therecipecritic.com/miso-chicken/\">this recipe</a> and decided to give it a try. I had never used miso paste for anything and figured this would be a good candidate to first try it out on. The chicken thigh skins crisped up nicely and the flavor was subtle, yet still good. It was also a nice easy recipe to make and a good weeknight meal. The only thing I found was that it took around 50 minutes in the oven at 400ºF rather than the 30-35 mentioned in the recipe. It's not a big deal at all, especially since it's just baking time.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-22T13:24:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/7-learnings-from-anders-hejlsberg-the-architect-behind-c-and-typescript/",
      "url": "https://kpwags.com/notes/7-learnings-from-anders-hejlsberg-the-architect-behind-c-and-typescript/",
      "title": "7 learnings from Anders Hejlsberg: The architect behind C# and TypeScript",
      "content_html": "\n\t\t<blockquote>\n<p>Any system that needs to scale across teams requires a shift from personal taste to shared outcomes. The goal stops being code that looks the way you would write it, and starts being code that many people can understand, maintain, and evolve together. C# did not emerge from a clean-slate ideal. It emerged from conflicting demands. Visual Basic developers wanted approachability, C++ developers wanted power, and Windows demanded pragmatism.</p>\n<p>The result was not theoretical purity. It was a language that enough people could use effectively.</p>\n<p>Languages do not succeed because they are perfectly designed. They succeed because they accommodate the way teams actually work</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-18T08:19:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/students-are-being-treated-like-guinea-pigs-inside-an-ai-powered-private-school/",
      "url": "https://kpwags.com/notes/students-are-being-treated-like-guinea-pigs-inside-an-ai-powered-private-school/",
      "title": "&#39;Students Are Being Treated Like Guinea Pigs:&#39; Inside an AI-Powered Private School",
      "content_html": "\n\t\t<blockquote>\n<p>Despite thoroughly documenting the AI-generated errors in its lesson plans, Alpha School relies on AI to test the quality of its AI-generated lessons, creating a situation where a faulty AI is tasked with fixing its own faulty generations.</p>\n</blockquote>\n<p>And people are paying up to $65,000 a year for this...it only makes me appreciate my teachers more.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-18T08:18:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/thinking-about-my-next-laptop-phone-and-tablet/",
      "url": "https://kpwags.com/posts/2026/thinking-about-my-next-laptop-phone-and-tablet/",
      "title": "Thinking About My Next Laptop, Phone and Tablet",
      "content_html": "\n\t\t<p>My laptop is a 2020 13&quot; M1 MacBook Pro. The thing is 6 years old, but it's still running great. I have no intention of replacing it anytime soon if I can help it. Lately though, looking at Apple and Tim Cook cozying up to Donald Trump, combined with how well Linux Mint has been running on my desktop, my stretch of Apple laptops might be coming to an end.</p>\n<p>I've been using an Apple laptop since around 2005 when I got a used iBook G4. I fell in love with OSX and the Apple laptops. I got the first generation MacBook Pro using Intel's chip. I upgraded in 2010, 2015, and 2020. I love the hardware, the operating system and the general ease of use. I even had a 27&quot; iMac for a little while. I am very much hooked into the Apple ecosystem as well with an iPhone 14 Pro, Apple Watch, iPad Pro, and 2 Apple TVs. Needless to say, I am very much reliant upon Apple hardware, and to a lesser extent, services.</p>\n<p>So what's made me consider this rather noteworthy change?</p>\n<p>One is how easy I was able to get Linux Mint running on my desktop with everything I need for gaming and dev work. I've been a fan of Linux since I started playing around with it in college. At some points though it sometimes felt like I had to fiddle too much to get things to work well enough. Now, with my experience with my desktop and anecdotal stories across my social feeds and blogs I read, it seems that it's gotten better. I know I had to do some fiddling with Linux Mint, especially for gaming, but it wasn't nearly as bad as I remember it being 20 or so years ago.</p>\n<p>A second is more political. I try to put my money where my mouth is. While I don't always have the option to always do this, I try when I can to either limit or cease spending money with companies or services whose values clash too much with mine. It's not always possible and I sometimes fail, but it's still something I try to do. Seeing Tim Cook in the Oval Office kissing up to Trump by offering him a trophy sickened me. Seeing <a href=\"https://www.theverge.com/policy/859902/apple-google-run-by-cowards\">Tim Cook do nothing</a> when the richest man in the world made a CSAM generator and charged for it, while at the same time <a href=\"https://www.404media.co/the-crackdown-on-ice-spotting-apps-with-joshua-aaron/\">banning apps like ICE Block</a> is just so maddening. Now I know we're living under an authoritarian regime where CEOs have to have a balancing act to not piss off &quot;Cheeto Jesus&quot;, and pay him protection money, but it amazes me how little of a spine Tim Cook has.</p>\n<p>Another reason, though less significant, is Apple's move to Liquid Glass, and what I'm concerned that might signify. I have the latest iOS and iPadOS installed and while I don't hate Liquid Glass, I don't like it either. It is. That's probably the best I can say about it. The UI has definitely taken a step backward. I haven't had to deal with this yet on my MacBook Pro because I prefer to stay a year behind on MacOS updates and this is <em>definitely</em> not an exception. Sequoia is fine by me. It runs well, it runs smoothly and I can't find anything in Tahoe that gives me any reason to update. This is definitely a much less important consideration in migrating away from Apple, but I'm not sure what that means for their interface design going forward. I've noticed a lot of questionable design choices I couldn't imagine seeing 10 years ago from Apple.</p>\n<h2>What About My Phone, Watch &amp; Tablet</h2>\n<p>It's been a long time since I've used anything other than an iPhone. I went from the iPhone 6 to the 8, to the 12 Pro, and now the 14 Pro. I know Apple has their own issues with ads and tracking, but I &quot;trust&quot; them more than Google.</p>\n<p>For my phone, when it comes time to upgrade, I'll probably look into <a href=\"https://grapheneos.org/\">GrapheneOS</a> on a Pixel phone. Whether I make that jump is still up for debate, but given the little I've read so far, it seems like a solid option.</p>\n<p>My Apple Watch? I find it useful, but I'd be fine getting a basic Garmin watch to track my runs and bike rides, and just get a nice analog watch. Would save me some money too.</p>\n<p>The iPad, that's the tough one. I'd probably stick with it, though all I really use it for is writing, doodling, and reading my RSS feeds and digital magazines. I see myself replacing this last, assuming I do.</p>\n<h2>What Would I Miss</h2>\n<p>I think the primary thing I would miss would be some of the Apple-specific apps I use, which at this point, really is only two. Things for my to-do list, and iA Writer for my longer-form writing (yes I know iA Writer has a Windows version, but if I leave Apple, it will be to Linux, not Windows). Writing it down though, feels funny as the two apps are both, well, not entirely &quot;unique&quot;. There are plenty of todo apps out there, many can run on Linux. And a Markdown editor? Well, it's really just plain text. I just like the iA Writer simplistic experience.</p>\n<p>A more secondary thing would probably be the hardware. The trackpad on the Macs I've had has always been leaps and bounds better than anything I've ever used on a Windows laptop. I've also been somewhat concerned about how long Windows laptops hold up performance-wise. I've had great luck with my MacBooks having long lifespans. With Linux, I'm not nearly as concerned about it. I can always go with a less-memory intensive desktop environment like XFCE.</p>\n<h2>No Rush</h2>\n<p>Thankfully, there's not really a rush right now (<em>knock on wood</em>) for me to make up my mind. I'm not on the market right now, and maybe Apple will reverse course some. Nothing has been decided and I'll cross that bridge when I get to it. Given recent events, and thinking about my technology use, it's made me wonder what direction I want to go, what hardware and operating systems I want to use when my current devices bite the dust.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-17T18:25:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/160/",
      "url": "https://kpwags.com/reading-log/160/",
      "title": "Reading Log - February 16, 2026 (#160)",
      "content_html": "\n\t\t<p>An interesting look at the history and near ubiquity of Markdown, AI agents run amok, an interesting link between the sewing machine and software, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.code4it.dev/blog/code-opinion-async-suffix/\">Why I Prefer Avoiding the Async Suffix in C# Asynchronous Methods</a> - <em>Davide Bellone</em></li>\n<li><a href=\"https://andrewlock.net/making-foreach-on-an-ienumerable-allocation-free-using-reflection-and-dynamic-methods/\">Making foreach on an IEnumerable allocation-free using reflection and dynamic methods</a> - <em>Andrew Lock</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/dotnet-11-preview-1/\">.NET 11 Preview 1 is now available!</a> - <em>.NET Team</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://paulmakeswebsites.com/writing/shadcn-radio-button/\">The Incredible Overcomplexity of the Shadcn Radio Button</a> - <em>Paul Hebert</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://bartwullems.blogspot.com/2026/01/permission-to-experiment-granted.html\">Permission to Experiment Granted</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://terriblesoftware.org/2026/01/05/creating-your-own-opportunities/\">Creating Your Own Opportunities</a> - <em>Matheus Lima</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.theguardian.com/media/2026/feb/07/revealed-how-substack-makes-money-from-hosting-nazi-newsletters\">Revealed: How Substack makes money from hosting Nazi newsletters</a> - <em>Geraldine McKelvie</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://infrequently.org/2026/01/naked-power/\">Naked Power</a> - <em>Alex Russell</em></li>\n<li><a href=\"https://www.anildash.com/2026/01/09/how-markdown-took-over-the-world/\">How Markdown took over the world</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/\">An AI Agent Published a Hit Piece on Me</a> - <em>Scott Shambaugh</em></li>\n<li><a href=\"https://www.404media.co/vibe-coding-is-killing-open-source-software-researchers-argue/\">Vibe Coding Is Killing Open Source Software, Researchers Argue</a> - <em>Matthew Gault</em></li>\n<li><a href=\"https://hidde.blog/time-saving-time-wasting/\">Time saving / time wasting</a> - <em>Hidde de Vries</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.404media.co/this-spacex-situation-not-good/\">This SpaceX Situation: Not Good!</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://defector.com/i-am-not-immune-to-the-charms-of-a-really-big-moon-rocket\">I Am Not Immune To The Charms Of A Really Big Moon Rocket</a> - <em>Barry Petchesky</em></li>\n<li><a href=\"https://www.universetoday.com/articles/these-gravitationally-lensed-supernovae-could-resolve-the-hubble-tension\">These Gravitationally Lensed Supernovae Could Resolve The Hubble Tension</a> - <em>Evan Gough</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://blogs.fangraphs.com/my-worst-report-lessons-learned-from-the-field/\">My Worst Report: Lessons Learned From the Field</a> - <em>Brendan Gawlowski</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://defector.com/in-the-war-on-protein-we-have-been-humiliatingly-defeated-by-protein?giftLink=b9df0a71c336c5ce1f4a48c433c18a76\">In The War On Protein, We Have Been Humiliatingly Defeated By Protein</a> - <em>Sabrina Imbler</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2026/02/11/nx-s1-5707856/singer-sewing-machine-patent-pool-antitrust-mpeg\">Planet Money: How the sewing machine got us … software</a></li>\n<li><a href=\"https://www.404media.co/how-identity-literally-changes-what-you-see-with-samuel-bagg/\">404 Media Podcast: How Identity Literally Changes What You See (with Samuel Bagg)</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/policy/877106/minneapolis-ice-cbp-occupation-immigration-raid-mutual-aid?view_token=eyJhbGciOiJIUzI1NiJ9.eyJpZCI6InpUak1rcEJuTWkiLCJwIjoiL3BvbGljeS84NzcxMDYvbWlubmVhcG9saXMtaWNlLWNicC1vY2N1cGF0aW9uLWltbWlncmF0aW9uLXJhaWQtbXV0dWFsLWFpZCIsImV4cCI6MTc3MTYzOTU1MywiaWF0IjoxNzcxMjA3NTUzfQ.xDtVnSKbtj7kBEFRMTiTmgVVTUfBlTDko7gKwVzh0F4&amp;utm_medium=gift-link\">ICE is pushing Minneapolis underground</a> - <em>Gaby Del Valle</em></li>\n<li><a href=\"https://www.theverge.com/policy/864195/minneapolis-ice-invasion-organizing-immigration\">How much can a city take?</a> - <em>Scott Meslow</em></li>\n<li><a href=\"https://www.techdirt.com/2026/01/16/the-case-for-a-100-justice-supreme-court/\">The Case For A 100-Justice Supreme Court</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://dotneteers.net/dream-big-start-small-but-most-of-all-start/\">Dream Big. Start Small. But Most of All, Start.</a> - <em>Peter Smulovics</em></li>\n<li><a href=\"https://youtu.be/q6evARV6JE0\">Why America Hates Change</a> - <em>Trevor Noah</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Sleep Token - Damocles</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0NDqYZVbpho\" title=\"Sleep Token - Damocles\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-16T18:56:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/87/",
      "url": "https://kpwags.com/week-note/87/",
      "title": "Week Notes for February 8 - 14 (#87)",
      "content_html": "\n\t\t<p>The weather is finally starting to warm up some.</p>\n<h2>Back to Running</h2>\n<p>Now that the temperatures are no longer in the single digits, I've take advantage to go on some runs. I ran 4.11 miles Wednesday and 4.29 miles Saturday. Both runs felt good and while I'm a little slower, I was able to keep my heart rate in zone 2 mostly and never really felt out of breath.</p>\n<h2>Cleaning Up Code at Work</h2>\n<p>The project I was pulled into at work went better than I anticipated. I was able to find the cause of all the urgent bugs and get them fixed and deployed. I also feel like I got the code into a better place. I'm still not thrilled with the UX, and might see if there's an appetite to modernize it a bit, but either way I was able to get things into a working spot.</p>\n<h2>A Day Date in Ardmore</h2>\n<p>My wife and I both took Friday off and made a little day date of it. We went out to <a href=\"https://www.charandstave.com/\">Char &amp; Stave</a> in Ardmore, PA and had some coffee-themed cocktails and drinks while sitting and working on some of our projects. We moseyed over to <a href=\"https://www.maveybooks.com/\">Mavey Books</a> (gotta love independent bookstores), and then had an early dinner at <a href=\"https://tiredhands.com/\">Tired Hands</a>. It was a nice way to spend the day and we were able to avoid the Valentine's Day crowds Saturday.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-15T18:15:20Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/an-ai-agent-published-a-hit-piece-on-me/",
      "url": "https://kpwags.com/notes/2026/an-ai-agent-published-a-hit-piece-on-me/",
      "title": "An AI Agent Published a Hit Piece on Me",
      "content_html": "\n\t\t<blockquote>\n<p>An AI agent of unknown ownership autonomously wrote and published a personalized hit piece about me after I rejected its code, attempting to damage my reputation and shame me into accepting its changes into a mainstream python library. This represents a first-of-its-kind case study of misaligned AI behavior in the wild, and raises serious concerns about currently deployed AI agents executing blackmail threats.</p>\n</blockquote>\n<p>We live in the stupidest timeline.</p>\n<blockquote>\n<p>This is about much more than software. A human googling my name and seeing that post would probably be extremely confused about what was happening, but would (hopefully) ask me about it or click through to GitHub and understand the situation. What would another agent searching the internet think? When HR at my next job asks ChatGPT to review my application, will it find the post, sympathize with a fellow AI, and report back that I’m a prejudiced hypocrite?</p>\n</blockquote>\n<p>Given how little time hiring managers have to look at each candidate (especially now), it's not unreasonable to think an inundated human would quickly skim over something and move on.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-15T18:14:47Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/the-incredible-overcomplexity-of-the-shadcn-radio-button/",
      "url": "https://kpwags.com/notes/2026/the-incredible-overcomplexity-of-the-shadcn-radio-button/",
      "title": "The Incredible Overcomplexity of the Shadcn Radio Button",
      "content_html": "\n\t\t<blockquote>\n<p>I totally understand why people reach for component libraries like Shadcn and I don't blame them at all. But I wish these component libraries would keep things simple and reuse the built-in browser elements where possible.</p>\n</blockquote>\n<p>I really don't get this. It's a radio button. Use the <code>accent-color</code> <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/accent-color\">CSS property</a>. I whole heartedly agree with Paul, why add so much complexity to a control the browser does so well natively.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-13T00:02:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/still-using-sublime-text/",
      "url": "https://kpwags.com/posts/2026/still-using-sublime-text/",
      "title": "Still Using Sublime Text",
      "content_html": "\n\t\t<p>I know there's been some pushes to VS Code, Zed, Cursor and others, but for so many projects I work on, I've been sticking with the tried and true, <a href=\"https://www.sublimetext.com/\">Sublime Text</a>. It's fast, it's light-weight, and it's still my go-to 14 years later.</p>\n<p>I purchased my first license to Sublime Text in January 2012. I'm pretty sure it was version 3 at that point. I've since upgraded to version 4, and have renewed the license again to get the latest updates (I was initially moderately annoyed that I had to re-up the license for the same major version, but at the same time I've gotten tremendous value out of it, it's not overly expensive, and it's every 3 years). I've tried other editors. I used VS Code for a long while and will still occasionally open a project in it, but all too often it feels a little bloated in comparison.</p>\n<p>If I need to work on HTML, JavaScript, JSON, text or any number of files, I can't help but want to open them with Sublime, <em>especially</em> large files. I've had VS Code crash trying to read large XML or JSON data dumps. Sublime Text will open them with ease and the JSON plugin will even neatly format them without complaint.</p>\n<p>I write this post thinking about the tools we use on a day-to-day basis. So often we're chasing different tools trying to find the &quot;best&quot; one. I have been and still am guilty of struggling at times from sticking with one tool. I see someone using a new IDE or to-do app, or something else and I'm like <em>ooooo shiny!</em>. Instead of getting work done, I'm playing around with whatever the tool du jour is.</p>\n<p>There are still some projects I use <a href=\"https://vscodium.com/\">VSCodium</a> for. TypeScript support for Sublime Text has still been shaky. Most of my current projects don't use TypeScript, but some still do. I've been meaning to try to find a way get better support for it, but more often I just have wanted to get work done rather than fiddle.</p>\n<p>At the end of the day, the money I've spent on Sublime Text licenses has felt well spent and for projects like my website, it's more than enough.</p>\n<h2>My Sublime Text Setup</h2>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/SO8NzAj1eF-2575.webp 2575w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/SO8NzAj1eF-2575.gif 2575w\" /><img alt=\"My sublime text setup showing the code of my homepage.\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/SO8NzAj1eF-2575.jpeg\" width=\"2575\" height=\"1596\" /></picture></p>\n<h3>Packages Installed</h3>\n<ul>\n<li><a href=\"https://lsp.sublimetext.io/\">LSP</a></li>\n<li><a href=\"https://lsp.sublimetext.io/\">LSP-typescript</a></li>\n<li><a href=\"https://github.com/mauroreisvieira/github-sublime-theme\">GitHub Theme</a></li>\n<li><a href=\"https://github.com/dzhibas/SublimePrettyJson\">Pretty JSON</a></li>\n<li><a href=\"https://www.sublimelinter.com/en/master/\">SublimeLinter</a></li>\n<li><a href=\"https://github.com/SublimeText/AFileIcon\">A File Icon</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-12T23:56:08Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/my-new-substack-policy/",
      "url": "https://kpwags.com/posts/2026/my-new-substack-policy/",
      "title": "My New Substack Policy",
      "content_html": "\n\t\t<p><a href=\"https://www.techdirt.com/2023/12/26/substack-turns-on-its-nazis-welcome-sign/\">Substack has a Nazi problem</a>. Though I'd say their actual problem is that they're okay with that. Because of this, my policy has always been that if you have a Substack, I'm not subscribing to it. Not on a paid tier, not on a free tier. It hasn't always stopped me from reading the occasional post or sharing one. I am now changing that policy.</p>\n<p>I recently read <a href=\"https://www.theguardian.com/media/2026/feb/07/revealed-how-substack-makes-money-from-hosting-nazi-newsletters\">Revealed: How Substack makes money from hosting Nazi newsletters</a>, and while it wasn't exactly telling me anything new, it made me re-think me even reading Substack and sharing posts.</p>\n<p>I share posts through my <a href=\"https://kpwags.com/notes\">Notes</a> and <a href=\"https://kpwags.com/links\">Link</a> pages. I'm changing my policy from not just not subscribing to Substacks, but to not sharing them either. I can't in good conscience direct eyes to a platform that is fine making money on blatant Nazi content. There's not even plausible deniability.</p>\n<p>There are other platforms out there like <a href=\"https://ghost.org/\">Ghost</a> or <a href=\"https://www.beehiiv.com/\">Beehiiv</a> that allow writers to get their content out to their audience without putting money in the hands of absolutely horrible people. And while I have not used either service, I know some Substacks I used to follow have moved to those platforms easily enough. An while I have no personal experience migrating, <a href=\"https://www.citationneeded.news/\">Molly White's Citation Needed</a> and <a href=\"https://www.platformer.news/\">Casey Newton's Platformer</a> made the switch successfully.</p>\n<p>So if you're on Substack, I'd kindly ask that you think about whether you want to remain on there. Substack is surprisingly open with its authors and allows its authors to migrate with their audience. <a href=\"https://www.citationneeded.news/substack-to-self-hosted-ghost/\">Molly White even wrote about her experience moving to Ghost</a>. I know one of the Substacks I subscribed to moved to Beehiiv and there was no interruption for me. I continued to get his newsletters in my inbox without so much as a blip.</p>\n<p>It's a shame too because there have been some that I've eyed up, only to find that they're hosted on Substack. Oh well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-12T23:51:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/discord-is-just-the-next-in-line/",
      "url": "https://kpwags.com/posts/2026/discord-is-just-the-next-in-line/",
      "title": "Discord is Just the Next in Line",
      "content_html": "\n\t\t<p>The other day, <a href=\"https://www.theverge.com/tech/875309/discord-age-verification-global-roll-out\">Discord announced it was going to require a face scan or ID</a> in order to continue using it as an adult. This is only another domino in a line of dominos that have already fallen.</p>\n<p>Politicians in Washington on both sides of the aisle have been pushing for rules like this forever. Those on the right have been more vocal about it and are pushing for far stricter and more draconian rules on what content children and teenagers should be able to access, but the left has been pushing for more age gates as well.</p>\n<p>The fact of the matter is that we're seeing companies cave to political pressure  to try to limit what young people can see. And the big issue I have with this is the rules those in power are trying to put in place. There's obviously certain content that kids and teenagers shouldn't be able to access, but who do we want to draw that line? If you talk to the GOP, it'd follow much like their book bans policy. Everything they don't like (aka &quot;woke&quot;) would be demanded to be put behind an age gate. A site that provides support to LGBT youth, you know the Republicans would love to make sure that teens struggling with their sexuality never see that.</p>\n<p>What about my site? I don't think there's anything particularly objectionable about or on my site. But what if some politician (on either side of the aisle) happens to find something they don't like on my site, and sees that kids can access it in their web browser? It's obviously highly unlikely to happen, but it still could. And what about other sites that are more popular and more visited. Lately, hypotheticals are feeling a lot less hypothetical under this administration. They're being far more censorious and no doubt would love more tools to go after more of their critics and content they don't approve of.</p>\n<p>I also think <a href=\"https://www.techdirt.com/2019/11/20/masnicks-impossibility-theorem-content-moderation-scale-is-impossible-to-do-well/\">Masnick's Impossibility Theorem</a> applies here. Even if we are hopelessly optimistic and stupidly assume that Washington has our best interests at heart with any rules they lay out, content that shouldn't be age-gated is almost certainly going to get age-gated.</p>\n<p>Also, from a security perspective, this just is asking for trouble. Discord is saying the ID is immediately deleted, but can we really trust that? I mean <a href=\"https://www.404media.co/the-discord-hack-is-every-users-worst-nightmare/\">they already had a data breach of this kind of info</a>? I'd hope they would've learned something from that breach, but hackers are always trying to find vulnerabilities and security holes to gain access to areas they shouldn't have access to. It's a cat and mouse game and as the saying goes, defenders have to be perfect all the time, attackers only have to be successful once.</p>\n<p>Other countries like the UK have already implemented age gates. Discord just looks looks like it's trying getting ahead of things here in the US before they inevitably come here. If you're in the US, I'd suggest keeping your eyes and ears out for these laws and contact your representatives about them. From a state legislature side of things, <a href=\"https://www.404media.co/missouri-age-verification-law-porn-id-check-vpns/\">half of the US already has laws in place</a>. One can only hope that the inevitability of a law on the federal side of things isn't as inevitable as it seems.</p>\n<p>For me, given the security implications about uploading your drivers license or other government-issued ID, I'm going to do as much as I can to stay clear of any service that requires an upload. I've already deleted my Discord account, although I've hardly used it. Any other service I use that starts requiring it can meet the same fate.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-11T00:09:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/how-markdown-took-over-the-world/",
      "url": "https://kpwags.com/notes/2026/how-markdown-took-over-the-world/",
      "title": "How Markdown Took Over the World",
      "content_html": "\n\t\t<blockquote>\n<p>As a result, there are now <em>billions</em> of Markdown files lying around on hard drives around the world. Billions more are stashed in the cloud. There are some on the phone in your pocket. Programmers leave them lying around wherever their code might someday be running. Your kid’s Nintendo Switch has Markdown files on it. If you’re listening to music, there’s probably a Markdown file on the memory chip of the tiny system that controls the headphones stuck in your ears. <em>The Markdown is inside you right now!</em></p>\n</blockquote>\n<p>I use markdown all the time, I think it's an easy way to write in an open standard with some minor formatting.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-10T23:08:37Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/159/",
      "url": "https://kpwags.com/reading-log/159/",
      "title": "Reading Log - February 9, 2026 (#159)",
      "content_html": "\n\t\t<p>Some scary news out of the Notepad++ camp, thoughts on Jeff Bezos' destroying the Washington Post, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.matuzo.at/blog/2026/better-defaults-for-popovers\">Better defaults for popovers</a> - <em>Manuel Matuzović</em></li>\n<li><a href=\"https://calendar.perfplanet.com/2025/tips-for-making-the-performance-panel-less-overwhelming/\">Tips for making the Performance Panel less overwhelming</a> - <em>Ian Duffy</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.anildash.com/2026/01/15/wikipedia-at-25/\">Wikipedia at 25: What the web can be</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/fbi-couldnt-get-into-wapo-reporters-iphone-because-it-had-lockdown-mode-enabled/\">FBI Couldn’t Get into WaPo Reporter’s iPhone Because It Had Lockdown Mode Enabled</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://www.loopwerk.io/articles/2026/tim-cook-sold-apples-soul/\">Tim Cook sold Apple's soul</a> - <em>Kevin Renskers</em></li>\n<li><a href=\"https://pluralistic.net/2026/01/14/sole-and-despotic/\">It's not normal</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Cybersecurity</h2>\n<ul>\n<li><a href=\"https://notepad-plus-plus.org/news/hijacked-incident-info-update/\">Notepad++ Hijacked by State-Sponsored Hackers</a> - <em>Notepad++</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/vibe-coding-is-killing-open-source-software-researchers-argue/\">Vibe Coding Is Killing Open Source Software, Researchers Argue</a> - <em>Matthew Gault</em></li>\n<li><a href=\"https://www.economist.com/business/2026/01/12/job-applicants-are-winning-the-ai-arms-race-against-recruiters?giftId=MDI3OTZlYTMtODNkYi00NzBlLWJhNTctN2YwNDQyMTYwNjAy&amp;utm_campaign=gifted_article\">Job applicants are winning the AI arms race against recruiters</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/policy/874958/jeff-bezos-washington-post-layoffs-trump?view_token=eyJhbGciOiJIUzI1NiJ9.eyJpZCI6IjQ5SXQxS2dvTVEiLCJwIjoiL3BvbGljeS84NzQ5NTgvamVmZi1iZXpvcy13YXNoaW5ndG9uLXBvc3QtbGF5b2Zmcy10cnVtcCIsImV4cCI6MTc3MDk5NTE1MiwiaWF0IjoxNzcwNTYzMTUyfQ.2N9GJ3I7nXmBMJ5OXzV3TQ8faXeoo8SxsxPbjv8p0bo&amp;utm_medium=gift-link\">There isn’t even a cynical explanation for Jeff Bezos destroying The Washington Post</a> - <em>Tina Nguyen</em></li>\n<li><a href=\"https://www.404media.co/the-washington-post-is-no-longer-useful-to-jeff-bezos/\">The Washington Post Is No Longer Useful to Jeff Bezos</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2026/saying-no/\">Saying “No” In an Age of Abundance</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>American Aquarium - The World is on Fire</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Ym0SRvCtYYc\" title=\"American Aquarium - The World is on Fire\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-09T13:26:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/86/",
      "url": "https://kpwags.com/week-note/86/",
      "title": "Week Notes for February 1 - 7 (#86)",
      "content_html": "\n\t\t<p>This was a mostly quiet week. It warmed up a bit in the beginning, but dropped back into single digits by the end. A lot of time was spent indoors.</p>\n<h2>Change of Pace at Work</h2>\n<p>I spent Thursday and Friday working on a different project at work. The project is sort of a mess and finding resources for it has generally been a challenge since not much has been going on with it for a while. A few urgent bugs came in and I got tapped to investigate them. Despite not necessarily being excited about it, I was able to find the issues and started work on a solution.</p>\n<h2>Staying Warm</h2>\n<p>Despite the warmer temperatures in the early week, it's still been a little too bitterly cold to do much of anything outside. Tess gets her walks, but they're a little shorter than normal. It's just too cold to be outside for too long.</p>\n<h2>Bandcamp Friday</h2>\n<p>Friday was Bandcamp Friday where all the proceeds from music purchases go directly to the bands themselves. I decided to splurge a little. I ended up buying 9 albums and a single.</p>\n<ul>\n<li>American Aquarium - Antique Hearts: Revisited</li>\n<li>American Aquarium - Slappers, Bangers &amp; Certified Twangers: Volume One</li>\n<li>American Aquarium - Things Change</li>\n<li>The Menzingers - Hold On, Dodge</li>\n<li>Thursday - War All the Time (Live)</li>\n<li>Lax Poetic - My Best Impression of Being Okay</li>\n<li>Free Throw - Lessons that We Swear to Keep</li>\n<li>Microwave - Stovall</li>\n<li>Microwave - Let's Start Degeneracy</li>\n<li>Jared Hart f/ Ben Nichols - Ready to Go</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-08T20:48:38Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/just-start/",
      "url": "https://kpwags.com/posts/2026/just-start/",
      "title": "Just Start",
      "content_html": "\n\t\t<p>A little while back I was perusing a Reddit thread where someone was trying to figure out the best lifting routine for themselves. They were relatively new to lifting and were going back and forth with others trying to determine the optimum routine. As someone who has bounced around a bit with lifting routines, my primary advice is this: <em>just start lifting</em>. The advice is good for exercise, and can also be good for a lot of other things in life.</p>\n<p>Be it exercising, trying your hand at writing, gardening or any number of other hobbies, sometimes all you have to do is start. Maybe it's going out for a jog to see how far you can go, it could be just opening a word processor and starting to write a short story or an outline to a novel. I could also be just buying a few flower pots, some soil and seeds to have a few plants on a porch or balcony. You don't have to build a massive vegetable garden or run a marathon.</p>\n<p><em>Just Start</em></p>\n<p>I write this as someone who has tried to optimize the way I do things. I'm still guilty of it from time to time, but I try to remember that sometimes, you just have to start. All the planning in the world means nothing if you don't actually do what it is you're planning to do. Planning of course can still be essential, but if all you ever do is plan, what are you <em>actually</em> doing?</p>\n<p>Get out there, try new things, see where life takes you.</p>\n<blockquote class=\"alert note\">\n\t<div class=\"title\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"></path>\n\t\t\t<path d=\"m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0\"></path>\n\t\t</svg>\n\t\t<div class=\"text\">Note</div>\n\t</div>\n\t<div class=\"content\">If you're considering getting into lifting, I would suggest <a href=\"https://liftvault.com/programs/strength/strong-lifts-5x5-spreadsheet/\">StrongLifts 5x5</a> or <a href=\"https://legionathletics.com/starting-strength-program/\">Starting Strength</a>.</div>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-05T23:38:02Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/thoughts-on-far-cry-5-and-far-cry-new-dawn/",
      "url": "https://kpwags.com/posts/2026/thoughts-on-far-cry-5-and-far-cry-new-dawn/",
      "title": "Thoughts on Far Cry 5 and Far Cry New Dawn [BEWARE SPOILERS]",
      "content_html": "\n\t\t<p>First off, I loved Far Cry 5. I thought it was a fantastic game and I loved the open world environment and how beautiful the world looked. It really felt like you were in Montana. The plot was captivating and the battles were fun. I rated it five stars for a reason. This post will contain spoilers to the game, so be warned.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/VHJFAghD91-1902.webp 1902w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/VHJFAghD91-1902.gif 1902w\" /><img alt=\"A wide shot of the cover of Far Cry 5\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/VHJFAghD91-1902.jpeg\" width=\"1902\" height=\"951\" /></picture></p>\n<p><spoiler><div class=\"spoiler-warning\">\n<h2>\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-label=\"warning icon\">\n<path d=\"M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.15.15 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.2.2 0 0 1-.054.06.1.1 0 0 1-.066.017H1.146a.1.1 0 0 1-.066-.017.2.2 0 0 1-.054-.06.18.18 0 0 1 .002-.183L7.884 2.073a.15.15 0 0 1 .054-.057m1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767z\"></path>\n<path d=\"M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z\"></path>\n</svg>\nWarning\n</h2>\n<p>This may contain spoilers. Reader beware.</p></div></spoiler></p>\n\n<details>\n\t<summary><span>View Content</span></summary>\n<p>Far Cry 5 was the second Far Cry game I played. I played the original <em>way</em> back in the day, but haven't played any of the others.</p>\n<p>Far Cry 5's premise is that a religious cult has formed in (a fictional) Hope County, Montana. You go in as a U.S. Marshall to arrest the cult's leader. As one can guess, the arrest goes horribly wrong and you're left to take out the cult's leadership (consisting of the cult leader's two brothers and one sister), and rescue your fellow U.S. Marshall and the other law enforcement officers who accompanied you.</p>\n  <blockquote class=\"alert note\">\n\t<div class=\"title\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"></path>\n\t\t\t<path d=\"m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0\"></path>\n\t\t</svg>\n\t\t<div class=\"text\">Note</div>\n\t</div>\n\t<div class=\"content\">The game got some flak for the enemy being a Christian religious cult,  but I never felt like the devs were really trying to make any kind of statement about Christianity.</div>\n</blockquote>\n<p>You start the game, following the failed arrest in the center of the map. You can take out the siblings in any order, though the character, Dutch, who helped you in the beginning gives you a recommendation on which one to start with.</p>\n  <blockquote class=\"alert note\">\n\t<div class=\"title\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"></path>\n\t\t\t<path d=\"m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0\"></path>\n\t\t</svg>\n\t\t<div class=\"text\">Note</div>\n\t</div>\n\t<div class=\"content\">From a personal perspective, I think doing John's area, then Faith's, then Jacob's is the best way to go. It matches the way the cult's indoctrination  works and fits best into the overall story arch.</div>\n</blockquote>\n<h2>The Game's Environment</h2>\n<p>Hope County is absolutely gorgeous. The mountains, the farms, it really feels like you're in the middle of Montana (or at least compared to the pictures I've seen of the actual Montana). The game has fast travel to travel between the different outposts, but more often than not, it was fun to just travel and explore the map.</p>\n<h2>The Villain</h2>\n<p>I love a good villain. Games, TV shows and movies are all better when the villain is interesting and not just someone who wants to foil you and/or kill you. Joseph Seed and the Seed family have a religious furor where they honestly believe that &quot;the Collapse&quot; is coming. They take over the county in hopes of converting everyone over to their doomsday cult.</p>\n<p>The thing with forcing people to join a cult, is that many won't want to join. In that case, they're captured, tortured, killed, enslaved, and a whole lot of not-so-nice outcomes. The whole game you're going against them trying to save the residents.</p>\n<p>What makes Joseph Seed so interesting is that the whole time, he, and his siblings are trying to convert you to join their cause. He's charismatic and feels eerily in a way that's hard to explain. His dedication to his beliefs make him dangerous with you not sure how things will go as you progress through the main story.</p>\n<h2>Far Cry New Dawn</h2>\n<p>Far Cry New Dawn takes place 17 years after the ending of Far Cry 5. You play as a completely different character which I had to remind myself of that several times as I met some of the characters from Far Cry 5 (and wondering why they didn't recognize me).</p>\n<p>The game takes place after the collapse and the weapons feel like they're from a society trying to scrap for whatever resources you can find. After the opening scene, your first weapon is a launcher for saw blades. The guns feel like something you'd see in Fallout with spigot handles in some cases being the knob on the scope of your sniper rifle. I think it's a cool aesthetic.</p>\n<p>The one gameplay mechanic they added to New Dawn that I <em>really liked</em> is the ability for you to &quot;scavenge&quot; an outpost. In Far Cry 5, you took an outpost and that was it. It became a place for you to pick up missions and restock. In New Dawn, they gave you the ability to let the Highwaymen re-take the outpost. You get moved to a point nearby to re-capture it. The catch is that each time you scavenge it, the enemies come back stronger and harder to kill. One of my favorite activities was trying to capture the outposts as stealthily as possible. It was fun to be challenged again and again to see how quietly I could go in.</p>\n<blockquote class=\"alert important\">\n\t<div class=\"title\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M6.95.435c.58-.58 1.52-.58 2.1 0l6.515 6.516c.58.58.58 1.519 0 2.098L9.05 15.565c-.58.58-1.519.58-2.098 0L.435 9.05a1.48 1.48 0 0 1 0-2.098zm1.4.7a.495.495 0 0 0-.7 0L1.134 7.65a.495.495 0 0 0 0 .7l6.516 6.516a.495.495 0 0 0 .7 0l6.516-6.516a.495.495 0 0 0 0-.7L8.35 1.134z\"></path>\n\t\t\t<path d=\"M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z\"></path>\n\t\t</svg>\n\t\t<div class=\"text\">Important</div>\n\t</div>\n\t<div class=\"content\">You likely won't be able to take capture them all over again until you level up Prosperity and get better weapons so be careful scavenging too early.</div>\n</blockquote>\n<p>As for the main antagonist, the twins, Mickey and Lou, they didn't particularly stand out to me. They just felt like charismatic jerks who were able to get people to follow them to do evil shit. There didn't seem to be any more to them. It worked for the game, but they didn't stand out to me the same way the Seeds did in Far Cry 5.</p>\n<p>The other thing that I think hurt New Dawn was its length. It wasn't that long of a game. I stretched it out because I enjoyed exploring the world, but I could've moved through the story quicker if I had chosen to. That's not necessarily a bad thing if you're looking at a $20 expansion or game, but at $40, it feels a little expensive. I managed to get it on sale on the Xbox store for $10. I would highly recommend it at that price. It's a fun game still set in a beautiful world.</p>\n<p>The one thing that sort of hit me was how much it stunk to live in Hope County. They have to deal with Eden's Gate, see your character just about to take down John Seed and save them from the cult, only to have the collapse happen. Then, when they are able to emerge, the Highwaymen come. It felt like one of those when it rains it pours shit shows. It obviously has to happen for the game to work, but my mind still thought, &quot;damn, sucks to be them.&quot;</p>\n<h2>Still Whimsical</h2>\n<p>One thing I guess Far Cry games are known for are having some whimsical characters. They sort of play on some stereotypes and super-charge them. From a pyromanic, to a CIA spy who tries to get you to get a VHS tape that apparently has compromising video of the president (pee tapes anyone?), to a crazy scientist who believes aliens exist. They're all in Far Cry 5 for you to find and enjoy.</p>\n<h2>Dogs</h2>\n<p>You can also pet dogs!</p>\n  <fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/XkFgyhCtVKc\" title=\"Petting Dogs in Far Cry 5\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n  </fit-vids>\n<h2>I'd Recommend</h2>\n<p>I'd recommend both games as I enjoyed them both. New Dawn was a slight letdown considering what came before it, but still worth playing for the right price.</p>\n</details>\n<style>\n\t.spoiler-warning {\n\t\tborder: 1px solid var(--red);\n\t\tpadding: 12px;\n\t\ttext-align: center;\n\t\tborder-radius: 4px;\n\t}\n\n\t.spoiler-warning h2 {\n\t\tfont-size: 2rem;\n\t\tcolor: var(--red);\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t}\n\n\t.spoiler-warning h2::before {\n\t\tdisplay: none;\n\t}\n\n\t.spoiler-warning h2 svg {\n\t\tfill: var(--red);\n\t\theight: 24px;\n\t\twidth: 24px;\n\t}\n\n\t.spoiler-warning p {\n\t\tfont-size: 1.1rem;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\tdetails {\n\t\tmargin: 24px 0;\n\t}\n\n\tdetails summary {\n\t\tfont-size: 1.2rem;\n\t\tmargin-bottom: 16px;\n\t}\n\n\tdetails summary span {\n\t\tpadding-left: 16px;\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-03T23:37:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/chris-miller-chip-war/",
      "url": "https://kpwags.com/books/chris-miller-chip-war/",
      "title": "Book Notes for Chip War: The Fight for the World&#39;s Most Critical Technology",
      "content_html": "\n\t\t<p>Despite working my entire adult life on computers, I never really dug all that deep into the history of the development of computer chips. They're such a key piece of almost everything in our lives so it's a little embarrassing I didn't know all this history.</p>\n<p>This was a captivating book. It talked about the history of the development of some of the first chips that sent Apollo astronauts to the moon, to how Japan through its rebuilding after World War II became so big in the memory chip market, and how the Soviet Union struggled throughout the Cold War to match western chip developments.</p>\n<p>The book does a good job talking the companies involve. About how Intel became so big as well as its missteps that have put it on its current unsure footing. It dives into TSMC and how they were able to corner the market for advanced chip manufacturing.</p>\n<p>It also goes over the various geopolitical struggles between the U.S., China, and the rest of the world. How the American government dropped the ball with recognizing how important the advanced chips would be for modern technology, including military uses.</p>\n<p>If you work with technology of any kind, or are interested in the history of the microprocessor, this is a good read.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/158/",
      "url": "https://kpwags.com/reading-log/158/",
      "title": "Reading Log - February 2, 2026 (#158)",
      "content_html": "\n\t\t<p>Some thoughts on getting better with .NET, a move back to vanilla JS, a short film on dogs, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://mijailovic.net/2025/09/07/dotnet/\">How to (actually) become an expert in .NET</a> - <em>Nemanja Mijailovic</em></li>\n<li><a href=\"https://dev.to/mashrulhaque/how-to-design-a-maintainable-net-solution-structure-for-growing-teams-284n\">How to Structure a .NET Solution That Actually Scales: Clean Architecture Guide</a> - <em>Mashrul Haque</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://zeroheight.com/blog/5-accessibility-checks-to-run-on-every-component/\">5 accessibility checks to run on every component</a> - <em>Hidde De Vries</em></li>\n<li><a href=\"https://thenewstack.io/why-developers-are-ditching-frameworks-for-vanilla-javascript/\">Why Developers Are Ditching Frameworks for Vanilla JavaScript</a> - <em>Alexander T. Williams</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2026/01/06/1000x-liability/\">Code is a liability (not an asset)</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.milanjovanovic.tech/blog/the-urge-to-build-something\">The Urge to Build Something</a> - <em>Milan Jovanović</em></li>\n<li><a href=\"https://addyosmani.com/blog/next-two-years/\">The Next Two Years of Software Engineering</a> - <em>Addy Osmani</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://www.shaunbent.co.uk/blog/why-federated-design-systems-keep-failing/\">Why Federated Design Systems Keep Failing</a> - <em>Shaun Bent</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://addyosmani.com/blog/code-review-ai/\">AI writes code faster. Your job is still to prove it works.</a> - <em>Addy Osmani</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=6rg6bcWI2Uo\">The Detectorists - A short film about otters and detection dogs in conservation.</a> - <em>Natalie Clements and SWOT</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/inside-the-helix-nebula-jwst-image-shows-thousands-of-creepy-finger-around-a-dying-star\">Inside the Helix Nebula: JWST image shows thousands of creepy fingers around a dying star</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2026/01/28/nx-s1-5690368/why-isnt-corporate-america-standing-up-to-trump\">The Indicator: Why isn’t corporate America standing up to Trump?</a></li>\n<li><a href=\"https://www.theverge.com/podcast/848744/aim-aol-instant-messenger-version-history\">Version History: How AIM taught the internet to chat</a></li>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/articles/trumps-plan-to-tank-america\">On the Media: Trump's Plan to Tank America</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Sleep Token - Damocles</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0NDqYZVbpho\" title=\"Sleep Token - Damocles\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-02T23:10:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/friction-by-design/",
      "url": "https://kpwags.com/notes/2026/friction-by-design/",
      "title": "Friction By Design",
      "content_html": "\n\t\t<blockquote>\n<p>Friction, when designed deliberately, serves a different purpose. It introduces a pause. A moment of awareness. A small resistance that asks the user to pay attention to what they’re doing, rather than simply passing through an interface on autopilot.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-02T23:07:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/january-2026-check-in/",
      "url": "https://kpwags.com/posts/2026/january-2026-check-in/",
      "title": "January 2026 Check-In",
      "content_html": "\n\t\t<p>January was a cold month. It's been a while since it's been this cold for this long. We also got more snow than we have in years past. Tess loved the initial snow, which is always cute. Other than that, it was mostly a quiet month.</p>\n<h2>All the Snow</h2>\n<p>We had several days of snow this month dumping more on us than probably the last two years combined. Having to constantly clear our driveway wasn't always the most fun. The snowblower helped, but it required some manual shoveling too. My hip and back were not always a fan. Tess however, loved the snow, bounding around in it, making snow angels (kinda) and sticking her nose in it. It's pretty darned cute. It also makes me thankful I work remotely and don't have to drive in the snow.</p>\n<h2>Writing More</h2>\n<p>I've been trying to track how much I'm writing, be it for my blog or anything else. I've been mostly good about writing every day, but not as good at staying focused to get near 1,000 words a day. I'm not going to let that discourage me as I see it sort of as part of the process, keep writing and eventually it will become a habit and easier to maintain and hit goals.</p>\n<h2>Fitness</h2>\n<p>I wasn't as active as I would have liked this month. The second half of the month was too brutally cold to run. I walk Tess not even half a mile around the block and my hands (in gloves) are freezing cold. I can't imagine being out there for 30+ minutes, sweating in 10ºF (-12ºC) weather would be all that comfortable.</p>\n<p>I did hop on my bike for the first time in well over a year. I have one of those machines that turns a regular bike into a stationary bike, so I did go for 30 minutes on that. I forgot how strenuous that can be. My legs were like jelly for a little after that session.</p>\n<p>I didn't lift as much as I could have either. That's been my biggest frustration  in that I can't seem to get back into a rhythm with it. Between having to work and go to appointments, I haven't wanted to give up so much of my evenings with lifting and then cooking before getting some R&amp;R. It's on me of course, but meh.</p>\n<h2>Music</h2>\n<p>I've been listening to a lot of Sleep Token recently. Their album <em>Even in Arcadia</em> is absolutely phenomenal.</p>\n<p>I did see The Menzingers for the 10th time towards the end of the month. It was a fun show despite the <a href=\"https://kpwags.com/posts/2026/i-hate-what-im-seeing/\">nazi asshole</a>. Archer Music Hall was a great venue and we had a fantastic view.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/SuUivVWe4M-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/SuUivVWe4M-1920.gif 1920w\" /><img alt=\"The Menzingers playing on stage at Archer Music Hall\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/SuUivVWe4M-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>5</span> runs - <span>21.53</span> miles</li>\n<li><strong>Walking:</strong> <span>28</span> walks - <span>24.29</span> miles</li>\n<li><strong>Biking:</strong> <span>1</span> rides - <span>7.5</span> miles</li>\n<li><strong>Lifting:</strong> <span>5</span> sessions - <span>73,285</span> lbs.</li>\n</ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/enshittification-why-everything-suddenly-got-worse-and-what-to-do-about-it-cory-doctorow/d3f8483b158906ce\">Enshittification: Why Everything Suddenly Got Worse and What to Do About It</a> by Cory Doctorow</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/homestand-small-town-baseball-and-the-fight-for-the-soul-of-america-will-bardenwerper/7f956b9eb45b108b\">Homestand: Small Town Baseball and the Fight for the Soul of America</a> by Will Bardenwerper</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/children-of-time-adrian-tchaikovsky/854d8d3ca3125264\">Children of Time</a> by Adrian Tchaikovsky</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/1929-inside-the-greatest-crash-in-wall-street-history-and-how-it-shattered-a-nation-andrew-ross-sorkin/923106f6e82cd81e\">1929: Inside the Greatest Crash in Wall Street History--and How It Shattered a Nation</a> by Andrew Ross Sorkin</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/ghosts-of-honolulu-a-japanese-spy-a-japanese-american-spy-hunter-and-the-untold-story-of-pearl-harbor-mark-harmon/bb7a55cb6327b101\">Ghosts of Honolulu: A Japanese Spy, a Japanese American Spy Hunter, and the Untold Story of Pearl Harbor</a> by Mark Harmon &amp; Leon Carroll</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/children-of-ruin-adrian-tchaikovsky/5030bfe683cae92c\">Children of Ruin</a> by Adrian Tchaikovsky</li>\n<li>Started <a href=\"https://bookshop.org/p/books/chip-war-the-fight-for-the-world-s-most-critical-technology-chris-miller/18265375?ean=9781982172008\">Chip War: The Fight for the World's Most Critical Technology</a> by Chris Miller</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/154/\">January 5 (#154)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/155/\">January 12 (#155)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/156/\">January 19 (#156)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/157/\">January 26 (#157)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/81/\">December 28 - January 3 (#81)</a></li>\n<li><a href=\"https://kpwags.com/week-note/82/\">January 4 - 10 (#82)</a></li>\n<li><a href=\"https://kpwags.com/week-note/83/\">January 11 - 17 (#83)</a></li>\n<li><a href=\"https://kpwags.com/week-note/84/\">January 18 - 24 (#84)</a></li>\n<li><a href=\"https://kpwags.com/week-note/85/\">January 25 - 31 (#85)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote my <a href=\"https://kpwags.com/posts/2026/2025-retrospective/\">2025 retrospective</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/looking-ahead-at-2026/\">looking ahead at 2026</a></li>\n<li>Shared the <a href=\"https://kpwags.com/posts/2026/tv-i-watched-in-2025/\">TV I watched in 2025</a></li>\n<li>Shared my <a href=\"https://kpwags.com/posts/2026/default-apps-for-2026/\">my default apps for 2026</a></li>\n<li>Shared the <a href=\"https://kpwags.com/posts/2026/movies-i-watched-in-2025/\">movies I watched in 2025</a></li>\n<li>Wrote about how <a href=\"https://kpwags.com/posts/2026/stop-anthropomorphizing-ai/\">we need to stop anthropomorphizing AI</a></li>\n<li>Shared the <a href=\"https://kpwags.com/posts/2026/video-games-i-played-in-2025/\">video games I played in 2025</a></li>\n<li>Shared the <a href=\"https://kpwags.com/posts/2026/books-i-read-in-2025/\">books I read in 2025</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/starting-a-new-book-series/\">the suspense of starting a new series</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/my-next-side-project-and-choosing-its-platform/\">the tech stack of my next side project</a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2026/minor-league-sports/\">minor league sports and community</a></li>\n<li>Wrote why <a href=\"https://kpwags.com/posts/2026/markdown-and-static-site-generators-for-a-blog/\">markdown being a good choice for a blog</a></li>\n<li>Complained about <a href=\"https://kpwags.com/posts/2026/a-complaint-with-apple-mail-on-ios/\">Mail for iOS</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2026/i-hate-what-im-seeing/\">a disturbing event at The Menzingers show</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Completed <a href=\"https://www.ubisoft.com/en-us/game/far-cry/new-dawn\">Far Cry New Dawn</a></li>\n<li>Started <a href=\"https://www.ea.com/games/starwars/squadrons\">Star Wars Squadrons</a></li>\n<li>Continued <a href=\"https://www.playstation.com/en-us/games/helldivers-2/\">Helldivers II</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt7660850/\">Succession</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt31974288/\">Seven Dials</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0212671/\">Malcolm in the Middle</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt31973693/\">The Roses</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1959563/\">The Hitman's Bodyguard</a></li>\n<li><a href=\"https://www.imdb.com/title/tt31193180/\">Sinners</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎵 New Music</h3><p></p>\n<p></p><ul>\n<li>Grayscale - The Hart (Deluxe)</li>\n<li>The Menzingers - A Lesson in the Abuse of Information Technology</li>\n<li>Sleep Token - Only in Arcadia</li>\n<li>Sleep Token - This Place Will Become Your Tomb</li>\n<li>Sleep Token - Take Me Back to Eden</li>\n<li>Sleep Token - Sundowning</li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-01T18:42:53Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/85/",
      "url": "https://kpwags.com/week-note/85/",
      "title": "Week Notes for January 25 - 31 (#85)",
      "content_html": "\n\t\t<p>This week started off with a pretty bit snowstorm. The rest of the week was just brutally cold with highs only in the teens (-6 to -12 ºC). Needless to say, I'm happy to be inside with heat.</p>\n<h2>The Snow</h2>\n<p>Sunday was full of snow, and then unfortunately, sleet. This meant that while clearing the driveway twice Sunday wasn't too bad with the snowblower, Monday was hell. On Monday, the sleet and snow caused a frozen layer to form on the driveway which meant the snowblower ended up being useless. I had to take a metal shovel to scrape off and break it up and then shovel it off. My hip and back were glad when that was all over.</p>\n<p>The layer of sleet has also made Tess very unsure about walking. She's light enough to walk on top of the snow as if it were a solid surface, but heavy enough that she'll occasionally fall through. It's caused her some consternation and she's clearly disconcerted. She's used to snow that she can just plow though and move about. I feel bad for her, but welcome to life in the northeast in winter.</p>\n<h2>Sinners</h2>\n<p>I finally watched <a href=\"https://www.imdb.com/title/tt31193180/\">Sinners</a> Friday night. I see why it got nominated for all the awards. The movie was fantastic.</p>\n<h2>Coming Down with Something</h2>\n<p>Towards the end of the week I started coughing. Feels like your run of the mill cold, but I'm spending this weekend being lazy. I've worked on my side project, wrote a bunch, and vegged out on the couch. No use over-exerting myself.</p>\n<h2>Recipes</h2>\n<h3>Creamy Chicken and Gnocchi Soup</h3>\n<p>It's soup season and I had some leftover gnocchi lying around so <a href=\"https://www.cookingclassy.com/creamy-chicken-gnocchi-soup-olive-garden-copycat/\">this recipe</a> fit the bill nicely. It wasn't terribly difficult to make. I used chicken tenderloin cuts which worked out well. It prevented me from having to pound the chicken as each piece was roughly the same which made cooking even. It  turned out really well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-02-01T15:29:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/i-hate-what-im-seeing/",
      "url": "https://kpwags.com/posts/2026/i-hate-what-im-seeing/",
      "title": "I Hate What I&#39;m Seeing",
      "content_html": "\n\t\t<p>I mentioned in my last <a href=\"https://kpwags.com/week-note/84/\">week notes</a> that I went to a <em>Menzingers</em> concert in Allentown on Saturday. What I didn't mention and what I have been trying to process is that during the show there was an incident prior to <em>The Menzingers</em> coming on that stood out to me. A fucking nazi asshole came out and started giving the nazi salute. I still sometimes can't believe I witnessed that.</p>\n<p>My wife and I had tickets in the balcony as we much like having seats nowadays, but during the intermission between <em>I Am the Avalanche</em> and <em>The Menzingers</em>, some asshole started causing a scene and giving the nazi salute. Being as far away as I was, I can't say I know all that happened, but the salute was pretty obvious and I'd be lying if I wasn't a little disturbed by it. There's a <a href=\"https://old.reddit.com/r/themenzingers/comments/1qmcbxz/nazi_pos_ejected_from_the_allentown_show/\">reddit thread</a> about it. Apparently some punches were thrown and multiple people, including the nazi asshole, were escorted out by security.</p>\n<p>I'm not naive enough to think that these people aren't around or that they don't exist. I just didn't expect to see it at a punk show of all places. Punk very often tends to be anti-nazi, and I'm not sure why you'd think <em>The Menzingers</em>, the headliners of the concert would be at all welcoming of nazis. They have been very clear in their songs and at past shows that they're very much against the far right. The song they opened with, <a href=\"https://www.youtube.com/watch?v=n5Y5wPiY0L4\">America (You're Freaking Me Out)</a> is apt for these times and very much hints at their political beliefs. They also wrote an <a href=\"https://www.youtube.com/watch?v=gJ72BrS9Vw0\">alternative version</a> after George Floyd's murder. Why you'd spend money to go to the concert of a band who hates everything you stand for is beyond me, seems like a waste of money.</p>\n<p>He also might've been there just to start shit. Aggravate and bother the others who have gone to see bands they enjoy. In that, he partially succeeded in that I hate that he was there. I did kind of enjoy everyone dumping their beer on him, and the communal disgust and repudiation of what he stood for before he got escorted out by security.</p>\n<p><em>The Menzingers</em> did release a statement the next day.</p>\n<blockquote>\n<p>On Saturday night in Allentown, a person was removed from our show for violent behavior and making Nazi salutes. In 2026.</p>\n<p>We found out the next day and it's embarrassing to have played an entire show without being able to call out a literal fucking Nazi in the room.</p>\n<p>Fuck him. Fuck everything he stands for. Get the fuck out.</p>\n<p>Thank you to the Archer Music Hall staff for keeping people safe, and to our fans for making our shows a place of community and camaraderie since the beginning.</p>\n<p>Nazi punks fuck off.</p>\n</blockquote>\n<p>The title of my post pretty much says it all. I hate that this is even a thing in today's society. I wish it would have been left in the past, never to be seen again, but alas, here we are.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-30T18:48:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/a-complaint-with-apple-mail-on-ios/",
      "url": "https://kpwags.com/posts/2026/a-complaint-with-apple-mail-on-ios/",
      "title": "A Complaint with Apple Mail on iOS",
      "content_html": "\n\t\t<p>For a first-world problem, this is probably pretty up there, but I have a small complaint about Apple Mail.</p>\n<p>I have three email inboxes on my phone. I keep tabs on each one and generally have a good idea of what senders go to which email address. Every once in a while though, I get a message, normally spam or spam-adjacent that I want to either unsubscribe from or mark as spam. It would be really nice if I could quickly identify from the unified inbox, which email address these emails were sent to. Right now the easiest way I can think of to check is to switch to each email's inbox to see which one it appears in.</p>\n<p>It's annoying and I wish Apple would provide an easier way to identify quickly which email inbox a message is in. I used to use AirMail. It had a feature where you could assign each inbox a color. In the unified inbox, there'd be a couple pixel-wide bar to the left of each message indicating the inbox. That'd be a nice feature to have and I wish Apple Mail for iOS had something similar.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-29T23:31:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/markdown-and-static-site-generators-for-a-blog/",
      "url": "https://kpwags.com/posts/2026/markdown-and-static-site-generators-for-a-blog/",
      "title": "Markdown and Static Site Generators for a Blog",
      "content_html": "\n\t\t<p>Ever since the end of 2015, my blog has been running on some form of static site generator. First it was Jekyll, then Next.js, now I'm running 11ty and I can't see myself ever going back to something like WordPress, Ghost, or some other content management system (CMS) based on a database. Writing in markdown is the way to go for my needs.</p>\n<p>Before going into why I like markdown, that last line should be highlighted. Everyone has different purposes and needs for building their sites. I use mine to play around with things, share my writing and media diet. This makes markdown especially appealing for me as my posts are basically just a folder of markdown files. Each time I migrated, I had to play around with some of the front matter in the files, but little else. For others, there might be a good reason to tie into Ghost or one of the other content management systems. It's important to do what works best for your needs or preferences.</p>\n<h2>Folder Full of Text Files</h2>\n<p>Much like Obsidian and iA Writer with notes, using markdown for a blog means having a bunch of markdown files in a folder somewhere in your project. This has several benefits, the first one I can think of is that it's easier to back up and version.</p>\n<p>I've been blogging off and on since 2007. My first sites, and their posts are long gone. I can probably find some of the posts in the Internet Archive if I want to (I might do this at some point), but the posts would have to be manually copied from the archive. From 2007-2015 I operated first under my own system (how I taught myself PHP) or WordPress, and briefly an early version of Ghost. I was notorious for playing around, and often wasn't as studious as I should have been backing up my database. Whoops. Part of that is most certainly on me, I'm not going to try to claim that backing content up on WordPress and the like is difficult, there's just an ease when you have a folder full of files that can be copied, pasted, and easily added to a version control tool like Git.</p>\n<h2>Flexible Content</h2>\n<p>For a blog like mine, the content is pretty simple all things considered. Most of my posts are just text and images. Maybe some lists or quotes, maybe even a code block. All of this can be written in markdown with little issue. I've had to tweak some CSS here and there for the occasional weirdness, but those cases aren't all that common.</p>\n<p>But what also makes markdown so nice is that I can mix in HTML as needed. If I'm writing a post that has something more complex, I can just mix in some HTML as if I was in an <code>.html</code> file. I don't have to do any extra tricks, just write good ol' HTML. And this has been the case for when my blog was on Jekyll, Next and now 11ty.</p>\n<p>That, and the various platforms can provide additional features that can also be mixed in. 11ty has functionality like <a href=\"https://www.11ty.dev/docs/shortcodes/\">shortcodes</a> that allow me to create reusable content for things like book notes or anything else I want. Similarly I can inject <a href=\"https://www.11ty.dev/docs/languages/webc/\">WebC</a> components into my posts with minimal effort. WebC are similar to web components in some of their functionality. It's how I build my media cards you see in my yearly media posts like my recent one on <a href=\"https://kpwags.com/posts/2026/movies-i-watched-in-2025/\">movies</a>. Instead of having to write out the HTML for each movie, all I have to do is call the component.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>media-box</span>\n  <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Rogue One: A Star Wars Story<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">link</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://www.imdb.com/title/tt3748528/<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">image</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://i.postimg.cc/g23ZjSrs/star-wars-rogue-one.jpg<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">rating</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>5<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">></span></span>\n  One of the best Star Wars movies and definitely the best of the new movies. A good story and enjoyable.\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>media-box</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>One note is that things like shortcodes and WebC are definitely platform-specific. They are things that I had to go through and adjust every time I migrated between platforms. The good news though is that most platforms, be it Next.js or 11ty have something that can do this.</p>\n<h2>Markdown is Becoming Ubiquitous</h2>\n<p>The other good thing about markdown is that other platforms are picking it up. You can export your Apple Notes in markdown format. Google Docs has started to support it as well. The benefit is that more and more apps support it, which means that it's becoming more likely even more will. So it could be that no matter what app you use to write, be it on your phone, tablet or laptop; you'll likely be able to export it to markdown for your blog. For me, I write my posts in Obsidian or iA Writer, both support markdown natively.</p>\n<h2>Drawbacks</h2>\n<p>For me, the biggest drawback is that in order to publish new posts, I need to create the post in my Git repository, create a pull request, and on completion, it will build and deploy my site. No more can I just pop open a browser window, write a quick entry in WordPress' admin panel, and click publish. Now to be fair, I'm pretty sure there are ways to streamline this process, but I haven't dug into it at all that much as I'm actually mostly happy with my process. It's a slight drawback for me, but not one that comes anywhere close to a showstopper for me. I'm also pretty sure I could find a better way to do this if I dug into it more, but I'm relatively happy with my process.</p>\n<p>Again though, each person has their own needs and desires for their website. Some people like and prefer platforms like WordPress. When it comes to personal sites, I'm not sure there really is a wrong answer. Go with what you like and are comfortable with, you can always change it later. The important thing is that it's <em>yours</em>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-27T20:08:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/code-is-cheap-now-software-isnt/",
      "url": "https://kpwags.com/notes/2026/code-is-cheap-now-software-isnt/",
      "title": "Code is Cheap Now, Software Isn&#39;t",
      "content_html": "\n\t\t<blockquote>\n<p>LLMs have effectively killed the cost of generating lines of code, but they haven’t touched the cost of truly understanding a problem. We’re seeing a flood of &quot;apps built in a weekend,&quot; but most of these are just thin wrappers around basic CRUD operations and third-party APIs. They look impressive in a Twitter demo, but they often crumble the moment they hit the friction of the real world.</p>\n<p>The real cost of software isn’t the initial write; it’s the maintenance, the edge cases, the mounting UX debt, and the complexities of data ownership. These &quot;fast&quot; solutions are brittle.</p>\n</blockquote>\n<p>Building a quick prototype or proof of concept might be great to start out, but mature, production-level applications are going to be in use for a significant period of time, all the while being enhanced, having bugs fixed, and conflicts about how certain features should work. Being able to look at the different use cases from users to create the best paths is so utterly critical...and time consuming.</p>\n<blockquote>\n<p>Lately, I’ve seen plenty of doomsaying on Hacker News, Reddit, and Twitter about &quot;the end of software engineering.&quot; This misses the point entirely. We aren't witnessing the end of the profession; we’re entering a new era of it.</p>\n<p>The value of an engineer is shifting away from the &quot;how&quot; of syntax and toward the &quot;what&quot; and &quot;why&quot; of systems. Real engineering lies in the abstractions and the architecture. It’s about knowing how to structure a system that lasts, understanding why a specific rate-limiting strategy is necessary, knowing how to manage a distributed cache, and knowing exactly where <em>not</em> to store your environment variables.</p>\n<p>AI often feels powerful because it hides the complexity, but as an engineer, your job is to manage that complexity, not ignore it. The tools have changed, but the fundamental requirement for engineering rigour has never been higher.</p>\n</blockquote>\n<p>Just wait until you start trying to decide how to lay out your project...</p>\n<blockquote>\n<p>While AI is undeniably good at writing code, it remains poor at architecting maintainable, distributable, and scalable systems. This is where non-technical leaders who think they can fire their development teams are making a significant mistake. Until we see the arrival of an artificial intelligence that renders this entire discussion moot, believing that technical expertise can be replaced by a prompt is a strategic error. Building robust software still requires a human who understands the underlying principles of the craft.</p>\n<p>The bottom line is that while the tools have changed, the fundamentals of good engineering have not.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-27T18:31:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/157/",
      "url": "https://kpwags.com/reading-log/157/",
      "title": "Reading Log - January 26, 2026 (#157)",
      "content_html": "\n\t\t<p>This week it's about why vanilla CSS is making a comeback, looking back at the Space Shuttle Challenger disaster, an interview with Cory Doctorow, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.zolkos.com/2025/12/03/vanilla-css-is-all-you-need\">Vanilla CSS is all you need</a> - <em>Rob Zolkos</em></li>\n<li><a href=\"https://cassidoo.co/post/css-quote-attr/\">CSS for markdown blockquote attribution</a> - <em>Cassidy Williams</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2025/making-software-is-translating-intent/\">To Make Software Is To Translate Human Intent Into Computational Precision</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://codemanship.wordpress.com/2025/11/25/the-future-of-software-development-is-software-developers/\">The Future of Software Development is Software Developers</a> - <em>Jason Gorman</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2026/01/25/g-s1-106940/40-years-after-challenger\">40 years after Challenger: Lingering guilt and lessons learned</a> - <em>Howard Berkes</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/story/2026/01/22/is-ai-becoming-too-big-to-fail\">Is artificial intelligence becoming too big to fail?</a> - <em>Kai Ryssdal &amp; Andie Corban</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/major-league-baseball-is-determined-to-rain-on-its-own-parade\">Major League Baseball Is Determined To Rain On Its Own Parade</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.bloomberg.com/news/audio/2026-01-21/masters-in-business-cory-doctorow-podcast\">Masters in Business: BONUS: How the Internet Got Worse with Cory Doctorow</a></li>\n<li><a href=\"https://www.theguardian.com/commentisfree/2025/dec/19/us-supreme-court-legitimacy\">Ryan Doerfler &amp; Samuel Moyn: It’s time to accept that the US supreme court is illegitimate and must be replaced</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2026/01/08/abolish-ice-before-they-kill-again-impeach-trump-noem-before-they-incite-more-murder/\">Abolish ICE Before They Kill Again, Impeach Trump &amp; Noem Before They Incite More Murder</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.citationneeded.news/the-year-of-technoligarchy/\">The year of technoligarchy</a> - <em>Molly White</em></li>\n<li><a href=\"https://www.404media.co/ices-facial-recognition-app-misidentified-a-woman-twice/\">ICE’s Facial Recognition App Misidentified a Woman. Twice</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://www.techdirt.com/2026/01/20/everyone-knows-our-mad-kings-greenland-obsession-is-insane-why-wont-congress-stop-it/\">Everyone Knows Our Mad King’s Greenland Obsession Is Insane. Why Won’t Congress Stop It?</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.anildash.com/2026/01/05/a-tech-career-in-2026/\">How the hell are you supposed to have a career in tech in 2026?</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://defector.com/are-jeopardy-contestants-really-that-bad-at-questions-about-sports?giftLink=3b0212432a604fad596ea3234d5ba89c\">Are ‘Jeopardy!’ Contestants Really That Bad At Questions About Sports?</a> - <em>Zach Gozlan</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Lax Poetic - Stockholm Syndrome</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/D5-5lJfiCAw\" title=\"Lax Poetic - Stockholm Syndrome\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-26T23:33:48Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/84/",
      "url": "https://kpwags.com/week-note/84/",
      "title": "Week Notes for January 18 - 24 (#84)",
      "content_html": "\n\t\t<p>It was mostly a lazy week finished with a concert to finish it off.</p>\n<h2>More Snow</h2>\n<p>It snowed again Sunday. Fortunately this time I could stay home and enjoy it from the comfort of our couch. I did have to shovel both Sunday and Monday, but alas, such is the joy of living in the northeast. Tess continued to enjoy the fresh powder.</p>\n<h2>Lazy Week</h2>\n<p>I had a mostly lazy week. It was too cold to run outside and between family events and life in general, I had a hard time finding time to lift or get my bike attached to the stationary machine. I did do another double hockey practice Monday and had a game Thursday, but other than that, it was mostly quiet.</p>\n<h2>Menzingers Concert</h2>\n<p>With snowmageddon bearing down on us, but thankfully not supposed to start until early Sunday morning, we drove up to Allentown to see The Menzingers play at <a href=\"https://www.archermusichall.com/\">Archer Music Hall</a>. We had pre-show drinks and dinner at <a href=\"https://thebrewworks.com/\">Fegley's</a> and caught a good punk show. <a href=\"https://laxpoetic.bandcamp.com/album/my-best-impression-of-being-okay\">Lax Poetic</a>, <a href=\"http://dorkrockcorkrod.com/\">The Ergs</a>, and <a href=\"https://www.iamtheavalanche.net/\">I Am the Avalanche</a> all opened for them and it was a good show. The Menzingers opened with <a href=\"https://www.youtube.com/watch?v=n5Y5wPiY0L4\">America (You're Freaking Me Out)</a> which seemed quite apt with all the hell that's going on here in the states. Thankfully the snow held off and we were able to get home safely before it started.</p>\n<h2>Recipes</h2>\n<h3>Air Fryer Pork Belly</h3>\n<p>I've made <a href=\"https://therecipecritic.com/air-fryer-pork-belly/\">this recipe</a> before. It's a little messy, but the marinade and pork belly is delicious. I'd also recommend using a toothpick to stick little holes in the fat before cutting the pork belly. It's supposed to help with getting crackled skin.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-25T18:25:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/minor-league-sports/",
      "url": "https://kpwags.com/posts/2026/minor-league-sports/",
      "title": "Minor League Sports",
      "content_html": "\n\t\t<p>I recently listened to the audiobook version of <a href=\"https://bookshop.org/p/books/homestand-small-town-baseball-and-the-fight-for-the-soul-of-america-will-bardenwerper/7f956b9eb45b108b\">Homestand: Small Town Baseball and the Fight for the Soul of America</a> by Will Bardenwerper. It's a look at primarily the Batavia Muckdogs, a small town baseball team in Batavia, New York. It's a book about baseball as much as it is about small town America and what minor league sports can mean to a community.</p>\n<p>The book has struck a chord with me. It might be purely nostalgic, but there is something about summer nights at a ballpark watching baseball. Maybe it's that I grew up playing baseball. Maybe it's all the excitement I had whenever I went to a Phillies game at Veterans Stadium as a kid, always bringing a glove thinking that would be the day a foul ball comes my way.</p>\n<p>Today, despite still being a huge Phillies fan, living closer to the Philly sports complex, I don't go to that many games given the cost and hassle to get in and out of the stadium complex. I live close enough to Philly that would make it seem likely I'd go more, but Philadelphia traffic, and questionable access to public transit makes traveling into the city more of a pain than it's worth to me. Sitting in traffic on the I-76 or I-95 just doesn't really appeal to me.</p>\n<p>But the big leagues is not what the book is focused on, and I appreciate that. The book focuses on the Batavia Muckdogs, a team in the Perfect Game Collegiate Baseball League (PGCBL). The league is meant for college players to get some more reps in outside the normal college baseball season and maybe some more chances to be discovered in hopes of joining an independent league team or even get drafted by a Major League club.</p>\n<p>For some context, Batavia has had a baseball team since 1939. They used to be part of the New York-Penn League before MLB consolidated the minor leagues after the 2020 baseball season. MLB contracted the minors as part of what feels like a push to make baseball more &quot;corporate&quot; at the cost of small towns across America.</p>\n<p>Batavia lost their minor league team, but were able to keep baseball in their town by joining the PGCBL. The book focuses on the sense of community people have around the team. It was nice to read about how people continued to embrace the team and players.</p>\n<p>It makes me think about my relationship with minor league sports and how minor league baseball and hockey.</p>\n<p>Growing up, the closest Minor League Baseball Stadium was in Reading, Pennsylvania. The town hosts the Reading Fightin Phils (then the Reading Phillies), the Philadelphia Phillies AA affiliate. I only remember going to a few games there as it was a 45 minute drive away, so it would still be a haul, especially for my parents who had my younger siblings to also contend with. For me at the time anyway, the major league team was the bigger draw.</p>\n<p>Now though, I see a much bigger draw to minor league sports. I was considering going to a few Reading games last year but never got around to it. I think I'm going to revisit that this spring. It's still a 45 minute drive so it's not &quot;close&quot;, but it's not the first time we'd drive that kind of distance for minor league sports.</p>\n<p>My wife and I travel up to Allentown 2-3 times a season to see the Lehigh Valley Phantoms play in the American Hockey League (AHL), the higher of the 2 minor leagues in the NHL. From a distance perspective, it's a little further than the Flyers for us. From a time on the road perspective, it's probably similar, if not shorter (thanks Philly traffic!). The arena is smaller and feels more intimate, like you're right there on the ice with a good view of the action, even in the upper deck. The product on the ice is still fantastic, the games are still a lot of fun, and as a hockey fan, I love it. And cost-wise, oh man, you can buy a single ticket to a phantoms game for only a little more than parking for the Flyers.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/hgAHw4BfCV-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/hgAHw4BfCV-1920.gif 1920w\" /><img alt=\"The Phantoms at the opening puck drop\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/hgAHw4BfCV-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>Back to baseball, a couple years ago as a Christmas gift to my parents, I bought the entire family tickets to a Lehigh Valley Iron Pigs (Philadelphia Phillies AAA affiliate) game. The stadium in Allentown was beautiful and we had a gorgeous late summer night that wasn't too hot with a gorgeous sunset to watch a baseball game. It was also a much better environment for my young nieces and nephews with more activities geared for kids.</p>\n<p>That is one of the draws of minor league sports. They're much cheaper than their big league counterparts making it more affordable for families. That affordability helps keep costs down for me as well. And from a nostalgia perspective, a nice evening in a minor league ballpark can be just as enjoyable, if not more than the more expensive big-city experience. Plus it can be pretty cool to see the future big-league players coming up through the system. Catch the future superstars before they're as well-known.</p>\n<p>I'm looking forward to some baseball sky evenings.</p>\n<p>Fun fact, Phillies fan favorite and 2008 World Series champion, Chase Utley played for the Batavia Muckdogs during his rise to the majors.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-23T00:19:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/the-future-of-software-development-is-software-developers/",
      "url": "https://kpwags.com/notes/2026/the-future-of-software-development-is-software-developers/",
      "title": "The Future of Software Development is Software Developers",
      "content_html": "\n\t\t<blockquote>\n<p>The hard part of computer programming isn’t expressing what we want the machine to do in code. The hard part is turning human thinking – with all its wooliness and ambiguity and contradictions – into <em>computational thinking</em> that is logically precise and unambiguous, and that can then be expressed formally in the syntax of a programming language.</p>\n</blockquote>\n<p>As I've been thinking about tools like Claude and CoPilot, they can write code, but it takes someone with experience to be able to tell them <em>what &amp; how</em> to write it. Experience is needed to determine whether the code generated is what is actually needed.</p>\n<blockquote>\n<p>The hard part has always been – and likely will continue to be for many years to come – knowing <em>exactly</em> what to ask for.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-21T18:24:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/156/",
      "url": "https://kpwags.com/reading-log/156/",
      "title": "Reading Log - January 19, 2026 (#156)",
      "content_html": "\n\t\t<p>This week it's a good starter for web components, an explainer on Git worktrees, thoughts on senior developers, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.daveabrock.com/2025/12/14/write-cleaner-code-with-c-14s-null-conditional-assignment-operator/\">Write cleaner code with C# 14's null-conditional assignment operator</a> - <em>Dave Brock</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.kylegill.com/essays/next-vs-tanstack/\">Next.js vs TanStack</a> - <em>Kyle Gill</em></li>\n<li><a href=\"https://nerdy.dev/6-css-snippets-every-front-end-developer-should-know-in-2025\">6 CSS Snippets Every Front-End Developer Should Know In 2025</a> - * Adam Argyle*</li>\n<li><a href=\"https://macarthur.me/posts/generators/\">I think the ergonomics of generators is growing on me.</a> - <em>Alex MacArthur</em></li>\n<li><a href=\"https://gomakethings.com/my-html-web-component-boilerplate-for-2026/\">My HTML Web Component boilerplate for 2026</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://lea.verou.me/blog/2026/web-deps/\">Web dependencies are broken. Can we fix them?</a> - <em>Lea Verou</em></li>\n<li><a href=\"https://simonwillison.net/2025/Dec/10/html-tools/\">Useful patterns for building HTML tools</a> - <em>Simon Willison</em></li>\n<li><a href=\"https://gomakethings.com/forced-colors-mode/\">Forced Colors Mode</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.marcohaber.dev/blog/git-worktrees\">Understanding Git Worktrees</a> - <em>Marco Haber</em></li>\n<li><a href=\"https://lalitm.com/post/why-senior-engineers-let-bad-projects-fail/\">Why Senior Engineers Let Bad Projects Fail</a> - <em>Lalit Maganti</em></li>\n<li><a href=\"https://rapha.land/craft-software-that-makes-people-feel-something/\">Craft software that makes people feel something</a> - <em>Raphael Amorim</em></li>\n<li><a href=\"https://terriblesoftware.org/2025/11/25/what-actually-makes-you-senior/\">What Actually Makes You Senior</a> - <em>Matheus Lima</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2025/uncomfortable-i-dont-know/\">It’s Uncomfortable To Sit With “I Don’t Know”</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://terriblesoftware.org/2025/12/11/ai-can-write-your-code-it-cant-do-your-job/\">AI Can Write Your Code. It Can’t Do Your Job.</a> - <em>Matheus Lima</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/18516546-we-ve-hit-grok-bottom\">Ctrl-Alt-Speech: We’ve Hit Grok Bottom</a></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://defector.com/bari-weiss-is-the-symptom?utm_source=defector.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=the-cipher-with-bus-travel-and-headline-thoughts&amp;_bhlid=060a83c45892a2e4785f5a1afb9b5eda2ca59d70&amp;giftLink=ef88c2551bb603fdfaff54d2d28cc432\">Bari Weiss Is The Symptom</a> - <em>Tommy Craggs</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://defector.com/fascists-are-pathetic\">Fascists are Pathetic</a> - <em>David Roth</em></li>\n<li><a href=\"https://www.404media.co/elite-the-palantir-app-ice-uses-to-find-neighborhoods-to-raid/\">‘ELITE’: The Palantir App ICE Uses to Find Neighborhoods to Raid</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://robinrendle.com/notes/so-many-websites/\">So Many Websites</a> - <em>Robin Rendle</em></li>\n<li><a href=\"https://thenewstack.io/jetbrains-ceo-on-how-developers-become-leaders/\">JetBrains CEO on How Developers Become Leaders</a> - <em>Loraine Lawson</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Sleep Token - Emergence</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/JJpFTUP6fIo\" title=\"Sleep Token - Emergence\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-19T14:30:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/83/",
      "url": "https://kpwags.com/week-note/83/",
      "title": "Week Notes for January 11 - 17 (#83)",
      "content_html": "\n\t\t<p>Happy Gotcha Day Tess!</p>\n<h2>Double Hockey Practice Session</h2>\n<p>The league I play goalie in does six weeks of practice sessions between the ten weeks of games. I took shots for both practice sessions. Two hours of up and down was quite the workout. My legs were quite happy when I sat down to read a bit before going to bed.</p>\n<h2>Having Tess for a Year</h2>\n<p>We celebrated Tess' gotcha day. Feels hard to believe we've had her for one year now. She has taken a little while to get used to us and her new home and routine, but she's the sweetest girl. She's pretty cute too.</p>\n<h2>Snow</h2>\n<p>We got more snow this weekend. It feels so peaceful with a white coating on everything. Tess absolutely loves it as well and we spent plenty of time with her in our backyard so she could run around and play in it.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/V7CUtatWlh-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/V7CUtatWlh-1200.gif 1200w\" /><img alt=\"Tess, a tan and white dog lying in the snow\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/V7CUtatWlh-1200.jpeg\" width=\"1200\" height=\"1103\" /></picture></p>\n<h2>Far Cry New Dawn</h2>\n<p>I completed Far Cry New Dawn. The gameplay was fun, but the story was shorter and kind of predictable. I got it on sale for $10 though, so for that price, definitely a steal.</p>\n<h2>Cooking</h2>\n<h3>Slow Cooker Chicken Fajita Soup</h3>\n<p><a href=\"https://therecipecritic.com/slow-cooker-chicken-fajita-soup/\">This</a> turned out fantastic. It was super easy to make and it gave my wife and I 3 dinners. The only thing I changed was we put the cheese in our individual bowls rather than the entire soup.</p>\n<h3>Pork Chops with Green Tomato Chutney</h3>\n<p>I made this <a href=\"https://www.foodnetwork.com/recipes/food-network-kitchen/pork-with-green-tomato-chutney-11461899\">recipe</a> Tuesday night. It wasn't bad. I did substitute heirloom tomatoes for the green tomatoes as I could not find green tomatoes so I'm not sure if that had an adverse effect on things. As for the wild rice, I believe you can use regular rice should you so desire.</p>\n<h3>One Pot Greek Chicken and Orzo</h3>\n<p><a href=\"https://damndelicious.net/2024/01/26/one-pot-greek-chicken-and-orzo/\">This</a> turned out really well. I think cooking the Orzo in the chicken stock is what really made it stand out. The tomatoes and feta worked as well. The only thing I might change next time would be to bake the chicken thighs. Would probably save some time. Either way though, it works.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-18T17:55:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/so-many-websites/",
      "url": "https://kpwags.com/notes/2026/so-many-websites/",
      "title": "So Many Websites",
      "content_html": "\n\t\t<blockquote>\n<p>But perhaps the death of search is <em>good</em> for the future of the web. Perhaps websites can be free of dumb rankings and junky ads that are designed to make fractions of a penny at a time. Perhaps the web needs to be released from the burden of this business model. Perhaps mass readership isn’t possible for the vast majority of websites and was never really sustainable in the first place.</p>\n<p>And perhaps we should let our websites be small and private things once again.</p>\n</blockquote>\n<p>I know they never went away, but I love seeing the resurgence of personal sites.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-18T01:15:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/ai-can-write-your-code-it-cant-do-your-job/",
      "url": "https://kpwags.com/notes/2026/ai-can-write-your-code-it-cant-do-your-job/",
      "title": "AI Can Write Your Code. It Can’t Do Your Job.",
      "content_html": "\n\t\t<blockquote>\n<p>Programming is a task. It’s one of many things you do as part of your work. But if you’re a software engineer, your actual job is more than typing code into an editor.</p>\n<p>The mistake people make is conflating the task with the role. It’s like saying calculators replaced accountants. Calculators automated arithmetic, but arithmetic was never the job. The job was understanding financials, advising clients, making judgment calls, etc. The calculator just made accountants faster at the mechanical part.</p>\n</blockquote>\n<p>You mean I'm not an astronaut because I played Kerbal Space Program? Tools are good an all, but you need the knowledge to wield the tools.</p>\n<blockquote>\n<p>the one who figures out what they actually need. You look at a codebase and decide which parts to change and which to leave alone. You push back on a feature request because you know it’ll create technical debt that’ll haunt the team for years. You review a colleague’s PR and catch a subtle bug that would’ve broken production. You make a call on whether to ship now or wait for more testing.</p>\n<p>None of that is programming, but it’s all your job.</p>\n</blockquote>\n<p>Knowing how the code of large projects all works together is something that is so hard to fully grasp. Things that might seem simple or even unrelated can be so easily missed, the experience we have as developers to consider how software should function is so incredibly important.</p>\n<blockquote>\n<p>But different isn’t dead. The engineers who will thrive understand that their value was never in the typing, but in the thinking, in knowing which problems to solve, in making the right trade-offs, in shipping software that actually helps people.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-18T01:14:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/my-next-side-project-and-choosing-its-platform/",
      "url": "https://kpwags.com/posts/2026/my-next-side-project-and-choosing-its-platform/",
      "title": "My Next Side Project and Choosing its Platform",
      "content_html": "\n\t\t<p>I've had an idea for my next side project for a little while now. I'll share more in a little bit, but I wanted to just muse a little bit about building it and what platform I would like to use.</p>\n<p>I'm generally a fan of .NET and this is definitely the root platform I intend to build it on. .NET has come such a long way since the olden days of it being Windows only. It's now incredibly powerful and can be run on Windows, Mac, and Linux. It really is pretty awesome that no matter what platform you use, you can still run and develop .NET apps. There are a few limitations and gotchas, but by and large, if it's a modern .NET app, your operating system can work with it.</p>\n<p>My choice of backend isn't in doubt, but my choice of frontend is. For the frontend, I could use Blazor, I could just have a .NET web API and use something like React, Vue, or Svelte. I could even go &quot;old school&quot; and just use ASP.NET MVC like it's 2010. I keep going back and forth on this and it's left me slightly paralyzed.</p>\n<p>Blazor is the new player in the .NET ecosystem. I've used it at work and it's easy to work with, but I'm not always a fan of how it operates almost exclusively through SignalR and WebSockets. I have to be extra careful with the code as exceptions can cause extra problems for the end user if the SignalR connection is broken. I mean error handling is always important, but I've found I have less wiggle room here. Part of this could also be me needing more experience and work with it.</p>\n<p>I know React well from previous projects and using it quite at bit at work. It's issues are there and I can't say it's my go to for projects anymore. I'm not against using it, but I think I'd rather go for more of a multipage application.</p>\n<p>I've heard good things about Svelte and have been meaning to give it a go, but I think I'd want to build something smaller to start with Svelte to teach myself it. The same would apply to Vue since I've never worked with it.</p>\n<p>That leaves ASP.NET MVC as the last option. It definitely feels old school, but it does check a lot of the boxes for how I want to build this project. Needless to say, this is what I'm leaning towards. It's been a while since I've used it so I might be a little rusty, but it will be multipage and server rendered, two things I'm leaning towards wanting for this.</p>\n<p>I haven't made a decision just yet, I'm currently working on building out the database and some of the backend framing, but I wanted to sort of just lay out what I was thinking and where I was planning on going.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-15T23:06:09Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/starting-a-new-book-series/",
      "url": "https://kpwags.com/posts/2026/starting-a-new-book-series/",
      "title": "Starting a New Book Series",
      "content_html": "\n\t\t<p>For Christmas I got the first three books of Adrian Tchaikovsky's <em>Children of Time</em> series. I recently started reading the first book, <em>Children of Time</em>. It made me think about how I go into a brand new book or even a series.</p>\n<p>I, like many others, don't like spoilers. I want to be surprised. I want to read the book, see the suspense building up, the conflict rising, only to see how the characters react and either solve or succumb to whatever is going on.</p>\n<p>With TV and movies, I try to limit what I know about them going in. I'm often wary of trailers because of how much they show and how sometimes they'll show way more than they should to try to rope you in.</p>\n<p>With books, I feel like more often than not I'm going in completely blind, at least when it comes to fiction. I love that. The mystery of what plot lines I might discover, what kind of world building I'll get to experience. I get recommendations from friends and others. If someone I trust to give good recommendations says a book is worth reading, I'll add it to my list, see if the library has it and will give it a go. Worst case I don't like it and I'll go read something else.</p>\n<p>I think with books though, it's also the lack of visible trailers. Books are just made up of words. Artfully crafted into a world and a story. There's no video to share with your target audience, just maybe a short blurb on the back giving a brief description of the story.</p>\n<p>I think there's something to be said for that, going into a story with only a 1-2 paragraph blurb about what you're going to be reading. Takes some trust too to see if the story is going to deliver. It's probably why recommendations are so powerful a persuader.</p>\n<p>Either way, I'm now a little over 50% done with <em>Children of Time</em> and am so far enjoying it. I'm not sure where exactly it's going and that's fine by me.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-13T23:42:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/155/",
      "url": "https://kpwags.com/reading-log/155/",
      "title": "Reading Log - January 12, 2026 (#155)",
      "content_html": "\n\t\t<p>A bunch of podcasts this week, more problems with Grok &amp; Elon Musk, ICE murders and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.milanjovanovic.tech/blog/vertical-slice-architecture-where-does-the-shared-logic-live\">Vertical Slice Architecture: Where Does the Shared Logic Live?</a> - <em>Milan Jovanović</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://calendar.perfplanet.com/2025/revisiting-html-streaming-for-modern-web-performance/\">Revisiting HTML streaming for modern web performance</a> - <em>Sébastien Mischler</em></li>\n<li><a href=\"https://css-tricks.com/prevent-a-page-from-scrolling-while-a-dialog-is-open/\">Prevent a page from scrolling while a dialog is open</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://tanstack.com/blog/tanstack-2-years\">The State of TanStack, Two Years of Full-Time OSS</a> - <em>Tanner Linsley</em></li>\n<li><a href=\"https://shkspr.mobi/blog/2025/12/the-web-runs-on-tolerance/\">The Web Runs On Tolerance</a> - <em>Terence Eden</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://medium.com/design-bootcamp/10-tiny-ui-fixes-that-make-a-big-difference-c5922c0ef6ab\">10 tiny UI fixes that make a big difference</a> - <em>Ryan Almeida</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/policy/859902/apple-google-run-by-cowards\">Tim Cook and Sundar Pichai are cowards</a> - <em>Elizabeth Lopatto</em></li>\n<li><a href=\"https://www.404media.co/inside-ices-tool-to-monitor-phones-in-entire-neighborhoods/\">Inside ICE’s Tool to Monitor Phones in Entire Neighborhoods</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://nolanlawson.com/2025/12/22/how-i-use-ai-agents-to-write-code/\">How I use AI agents to write code</a> - <em>Nolan Lawsom</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/is-betelgeuse-a-binary-star-the-evidence-is-piling-up\">Is Betelgeuse a binary star? The evidence is piling up</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://www.economist.com/science-and-technology/2026/01/02/can-high-intensity-interval-training-get-you-fit-in-a-hurry\">Can high-intensity interval training get you fit in a hurry?</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2026/01/09/nx-s1-5672389/how-ai-is-shrinking-the-job-market-for-teens\">The Indicator: How AI is shrinking the job market for teens</a></li>\n<li><a href=\"https://www.searchengine.show/the-fediverse-experiment/\">Search Engine: The Fediverse Experiment</a></li>\n<li><a href=\"https://www.theverge.com/podcast/814552/tim-berners-lee-world-wide-web-ai-future-interview\">Decoder: Sir Tim Berners-Lee doesn’t think AI will destroy the web</a></li>\n<li><a href=\"https://www.theverge.com/podcast/842340/trump-ai-tiktok-democracy-carr-first-amendment-ed-markey\">Decoder: Sen. Ed Markey wants media companies to fight for the First Amendment</a></li>\n<li><a href=\"https://shoptalkshow.com/696/\">Shop Talk Show: Predictions for 2026, ADHD Updates, and Holiday Catchup</a></li>\n<li><a href=\"https://defector.com/the-real-story-of-baseballs-steroid-era-is-a-labor-story\">Only If You Get Caught: The Real Story Of Baseball's Steroid Era Is A Labor Story</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.404media.co/dhs-is-lying-to-you-about-ice-shooting-a-woman/\">DHS Is Lying To You</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.writerswrite.co.za/writing-is-an-act-of-courage/\">Writing Is An Act Of Courage</a> - <em>Amanda Patterson</em></li>\n<li><a href=\"https://people-work.io/blog/junior-hiring-crisis/\">The Junior Hiring Crisis</a> - <em>Annie Hedgpeth</em></li>\n<li><a href=\"https://justoffbyone.com/posts/math-of-why-you-cant-focus-at-work/\">The Math of Why You Can't Focus at Work</a> - <em>Can Duruk</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - Winter (Live)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/SbUDDPPpWRg\" title=\"Chuck Ragan - Winter (Live)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-12T20:05:09Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/82/",
      "url": "https://kpwags.com/week-note/82/",
      "title": "Week Notes for January 4 - 10 (#82)",
      "content_html": "\n\t\t<p>First week back at work since mid-December. It was thankfully a quiet week.</p>\n<h2>Monday Night Hockey</h2>\n<p>The <em>Bombers</em>, the team I captain had a Monday night game. We were playing a team we'd had trouble against in the past but manage to come away with a strong 6-1 win. We played well and other than a late 3rd period goal, we managed to keep them contained.</p>\n<h2>Writing</h2>\n<p>I struggled to maintain focus this week unfortunately. I wrote every day, but not as much as I intended. I really should try to better configure my site blockers to help me maintain my focus.</p>\n<h2>Nice Weather Mid-Week</h2>\n<p>Mid-week the weather crept up to 50°F (10°C). It was a little strange for January, but I took advantage to go for a run and take Tess for a long walk. I should be concerned about weather this warm this time of year, but I'll take advantage of it.</p>\n<h2>Cooking</h2>\n<h3>Gnocchi and Steak Hash</h3>\n<p>I had found <a href=\"https://www.foodnetwork.com/recipes/food-network-kitchen/gnocchi-and-steak-hash-17125398\">this recipe</a> in the magazine a while back, and have been incredibly happy with how it turns out. The only thing is its yield is a little low for just my wife and I. It's more than one meal for the two of us, but not quite two. Maybe I'll double it next time.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-11T16:52:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/books-i-read-in-2025/",
      "url": "https://kpwags.com/posts/2026/books-i-read-in-2025/",
      "title": "Books I Read in 2025",
      "content_html": "\n\t\t<p>Holy crow did I read a lot this past year. Between the audiobooks and the actual books, I managed 67 books read which is a new record for me.</p>\n<h2>My Favorites</h2>\n<p><media-box title=\"The Staircase in the Woods\" author=\"Chuck Wendig\" link=\"https://doylestownbookshop.com/book/9780593156568\" image=\"https://i.postimg.cc/pX88zy0z/wendig-staircase-in-the-woods.jpg\" platform=\"Hardcover\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/pX88zy0z/wendig-staircase-in-the-woods.jpg\" alt=\"The Staircase in the Woods\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://doylestownbookshop.com/book/9780593156568\">The Staircase in the Woods</a></div>\n<div class=\"author\">Chuck Wendig</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nAnother great one by Chuck Wendig. Just the right mix of thriller and horror to leave you on the edge of your seat wanting to read more.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>I Enjoyed</h2>\n<p><media-box title=\"Every Day is Sunday: How Jerry Jones, Robert Kraft, and Roger Goodell Turned the NFL Into a Cultural &amp; Economic Juggernaut\" author=\"Ken Belson\" link=\"https://bookshop.org/p/books/every-day-is-sunday-how-jerry-jones-robert-kraft-and-roger-goodell-turned-the-nfl-into-a-cultural-economic-juggernaut-ken-belson/acf6b3176c03e34a\" image=\"https://i.postimg.cc/xjmY9b1h/every-day-is-sunday.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/xjmY9b1h/every-day-is-sunday.jpg\" alt=\"Every Day is Sunday: How Jerry Jones, Robert Kraft, and Roger Goodell Turned the NFL Into a Cultural &amp; Economic Juggernaut\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/every-day-is-sunday-how-jerry-jones-robert-kraft-and-roger-goodell-turned-the-nfl-into-a-cultural-economic-juggernaut-ken-belson/acf6b3176c03e34a\">Every Day is Sunday: How Jerry Jones, Robert Kraft, and Roger Goodell Turned the NFL Into a Cultural &amp; Economic Juggernaut</a></div>\n<div class=\"author\">Ken Belson</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at how the NFL and the owners took every advantage to build the league and make it the power house it is today</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Lords of Finance: The Bankers Who Broke the World\" author=\"Liaquat Ahamed\" link=\"https://bookshop.org/p/books/lords-of-finance-the-bankers-who-broke-the-world-liaquat-ahamed/15278774?ean=9780143116806\" image=\"https://i.postimg.cc/J44nMtfP/ahamed-lords-of-finance.jpg\" platform=\"Paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/J44nMtfP/ahamed-lords-of-finance.jpg\" alt=\"Lords of Finance: The Bankers Who Broke the World\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/lords-of-finance-the-bankers-who-broke-the-world-liaquat-ahamed/15278774?ean=9780143116806\">Lords of Finance: The Bankers Who Broke the World</a></div>\n<div class=\"author\">Liaquat Ahamed</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at the central bankers that controlled the US, Britain, France, &amp; Germany between WWI and WWII and the economic challenges they faced.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Food for Thought: Essays and Ruminations\" author=\"Alton Brown\" link=\"https://bookshop.org/p/books/food-for-thought-essays-and-ruminations-alton-brown/21530474\" image=\"https://i.postimg.cc/8kLfVQnp/food-for-thought.jpg\" platform=\"Hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/8kLfVQnp/food-for-thought.jpg\" alt=\"Food for Thought: Essays and Ruminations\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/food-for-thought-essays-and-ruminations-alton-brown/21530474\">Food for Thought: Essays and Ruminations</a></div>\n<div class=\"author\">Alton Brown</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed Alton Brown’s wit and thoughts as he wrote about his experiences of life, food, cooking and more.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Armageddon: The Battle for Germany, 1944-1945\" author=\"Max Hastings\" link=\"https://bookshop.org/p/books/armageddon-the-battle-for-germany-1944-1945-max-hastings/8519135\" image=\"https://i.postimg.cc/xddtnp5T/hastings-armageddon.jpg\" platform=\"Hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/xddtnp5T/hastings-armageddon.jpg\" alt=\"Armageddon: The Battle for Germany, 1944-1945\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/armageddon-the-battle-for-germany-1944-1945-max-hastings/8519135\">Armageddon: The Battle for Germany, 1944-1945</a></div>\n<div class=\"author\">Max Hastings</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a great, in-depth look at the horror that was the final battle for Germany in WWII.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"We Are Eating the Earth: The Race to Fix Our Food System and Save Our Climate\" author=\"Michael Grunwald\" link=\"https://bookshop.org/p/books/we-are-eating-the-earth-the-race-to-fix-our-food-system-and-save-our-climate-michael-grunwald/41c6116d0380f833\" image=\"https://i.postimg.cc/RZc1335v/grunwald-eating-the-earth.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/RZc1335v/grunwald-eating-the-earth.jpg\" alt=\"We Are Eating the Earth: The Race to Fix Our Food System and Save Our Climate\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/we-are-eating-the-earth-the-race-to-fix-our-food-system-and-save-our-climate-michael-grunwald/41c6116d0380f833\">We Are Eating the Earth: The Race to Fix Our Food System and Save Our Climate</a></div>\n<div class=\"author\">Michael Grunwald</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA rather depressing look at how our farming methods and incentives are helping contribute to climate change when there are ways out of this mess without giving up things like meat.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The AI Con: How to Fight Big Tech's Hype and Create the Future We Want\" author=\"Emily M. Bender &amp; Alex Hanna \" link=\"https://bookshop.org/p/books/the-ai-con-how-to-fight-big-tech-s-hype-and-create-the-future-we-want-alex-hanna/914a89ac020fc825\" image=\"https://i.postimg.cc/63G8H4xF/the-ai-con.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/63G8H4xF/the-ai-con.jpg\" alt=\"The AI Con: How to Fight Big Tech's Hype and Create the Future We Want\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-ai-con-how-to-fight-big-tech-s-hype-and-create-the-future-we-want-alex-hanna/914a89ac020fc825\">The AI Con: How to Fight Big Tech's Hype and Create the Future We Want</a></div>\n<div class=\"author\">Emily M. Bender &amp; Alex Hanna </div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA thoughtful look at the issues related to AI and all the hype and doom its backers are pushing.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Inferno: The World at War, 1939-1945\" author=\"Max Hastings\" link=\"https://bookshop.org/p/books/inferno-the-world-at-war-1939-1945-max-hastings/15283304\" image=\"https://i.postimg.cc/rszX4CrV/hastings-inferno.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/rszX4CrV/hastings-inferno.jpg\" alt=\"Inferno: The World at War, 1939-1945\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/inferno-the-world-at-war-1939-1945-max-hastings/15283304\">Inferno: The World at War, 1939-1945</a></div>\n<div class=\"author\">Max Hastings</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nFantastic book on World War II. Hastings goes through the different fronts and happenings in Asia, the Pacific, and of course Britain and Western Europe.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Automatic Noodle\" author=\"Annalee Newitz\" link=\"https://bookshop.org/p/books/automatic-noodle-annalee-newitz/625018d0518991aa\" image=\"https://i.postimg.cc/3N9T4bsq/newitz-automatic-noodle.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/3N9T4bsq/newitz-automatic-noodle.jpg\" alt=\"Automatic Noodle\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/automatic-noodle-annalee-newitz/625018d0518991aa\">Automatic Noodle</a></div>\n<div class=\"author\">Annalee Newitz</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a fun story.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Why Fascists Fear Teachers: Public Education and the Future of Democracy\" author=\"Randi Weingarten\" link=\"https://bookshop.org/p/books/why-fascists-fear-teachers-public-education-and-the-future-of-democracy-randi-weingarten/86407292f508ba9e\" image=\"https://i.postimg.cc/L4CVTxqc/weingarten-why-fascists-fear-teachers.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/L4CVTxqc/weingarten-why-fascists-fear-teachers.jpg\" alt=\"Why Fascists Fear Teachers: Public Education and the Future of Democracy\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/why-fascists-fear-teachers-public-education-and-the-future-of-democracy-randi-weingarten/86407292f508ba9e\">Why Fascists Fear Teachers: Public Education and the Future of Democracy</a></div>\n<div class=\"author\">Randi Weingarten</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA thoughtful take on the power of teachers and multitude of ways the right is trying to undermine them. It did a good job putting into words how the attacks work and why it’s more important now, more than ever to push back for good education.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Stories Are Weapons: Psychological Warfare and the American Mind\" author=\"Annalee Newitz\" link=\"https://bookshop.org/p/books/stories-are-weapons-psychological-warfare-and-the-american-mind-annalee-newitz/5dadea9e83b77a8a\" image=\"https://i.postimg.cc/PrHQDLjm/newitz-stories-are-weapons.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/PrHQDLjm/newitz-stories-are-weapons.jpg\" alt=\"Stories Are Weapons: Psychological Warfare and the American Mind\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/stories-are-weapons-psychological-warfare-and-the-american-mind-annalee-newitz/5dadea9e83b77a8a\">Stories Are Weapons: Psychological Warfare and the American Mind</a></div>\n<div class=\"author\">Annalee Newitz</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA interesting, if not depressing look at the different ways we’re going to have to combat misinformation and disinformation in the coming years.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Wake Up and Open Your Eyes\" author=\"Clay McLeod Chapman\" link=\"https://doylestownbookshop.com/book/9781683693956\" image=\"https://i.postimg.cc/k5xkpPcF/chapman-wake-up-and-open-your-eyes.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/k5xkpPcF/chapman-wake-up-and-open-your-eyes.jpg\" alt=\"Wake Up and Open Your Eyes\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://doylestownbookshop.com/book/9781683693956\">Wake Up and Open Your Eyes</a></div>\n<div class=\"author\">Clay McLeod Chapman</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA creepy book that fits in well with the current political climate.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ghost Eaters\" author=\"Clay McLeod Chapman\" link=\"https://doylestownbookshop.com/book/9781683693789\" image=\"https://i.postimg.cc/cL1gHdKw/chapman-ghost-eaters.jpg\" platform=\"Paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/cL1gHdKw/chapman-ghost-eaters.jpg\" alt=\"Ghost Eaters\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://doylestownbookshop.com/book/9781683693789\">Ghost Eaters</a></div>\n<div class=\"author\">Clay McLeod Chapman</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA creepy story that fits well in the Halloween season.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Whisper Down the Lane\" author=\"Clay McLeod Chapman\" link=\"https://doylestownbookshop.com/book/9781683693062\" image=\"https://i.postimg.cc/6pVK0x0S/chapman-whisper-down-the-lane.jpg\" platform=\"Paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/6pVK0x0S/chapman-whisper-down-the-lane.jpg\" alt=\"Whisper Down the Lane\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://doylestownbookshop.com/book/9781683693062\">Whisper Down the Lane</a></div>\n<div class=\"author\">Clay McLeod Chapman</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA fast read. Creepy with a whole lot of twists and turns. I enjoyed it.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Just Keep Buying: Proven ways to save money and build your wealth\" author=\"Nick Maggiulli\" link=\"https://www.amazon.com/gp/product/0857199250\" image=\"https://i.postimg.cc/d3XPWg1q/just-keep-buying.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/d3XPWg1q/just-keep-buying.jpg\" alt=\"Just Keep Buying: Proven ways to save money and build your wealth\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.amazon.com/gp/product/0857199250\">Just Keep Buying: Proven ways to save money and build your wealth</a></div>\n<div class=\"author\">Nick Maggiulli</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThoughtful advice when planning for retirement and other investment goals.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Billion Dollar Whale: The Man Who Fooled Wall Street, Hollywood, and the World\" author=\"Bradley Hope &amp; Tom Wright\" link=\"https://bookshop.org/p/books/billion-dollar-whale-the-man-who-fooled-wall-street-hollywood-and-the-world-bradley-hope/15276700?ean=9780316436472\" image=\"https://i.postimg.cc/DzPwwtbr/wright-billion-dollar-whale.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/DzPwwtbr/wright-billion-dollar-whale.jpg\" alt=\"Billion Dollar Whale: The Man Who Fooled Wall Street, Hollywood, and the World\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/billion-dollar-whale-the-man-who-fooled-wall-street-hollywood-and-the-world-bradley-hope/15276700?ean=9780316436472\">Billion Dollar Whale: The Man Who Fooled Wall Street, Hollywood, and the World</a></div>\n<div class=\"author\">Bradley Hope &amp; Tom Wright</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA fascinating deep dive into the 1MDB scandal and the characters involved. It still amazes me how many people will ignore giant red flags for a quick buck.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Apple in China: The Capture of the World's Greatest Company\" author=\"Patrick McGee\" link=\"https://bookshop.org/p/books/apple-in-china-the-capture-of-the-world-s-greatest-company-patrick-mcgee/21872828\" image=\"https://i.postimg.cc/cC4mftT3/mcgee-apple-in-china.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/cC4mftT3/mcgee-apple-in-china.jpg\" alt=\"Apple in China: The Capture of the World's Greatest Company\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/apple-in-china-the-capture-of-the-world-s-greatest-company-patrick-mcgee/21872828\">Apple in China: The Capture of the World's Greatest Company</a></div>\n<div class=\"author\">Patrick McGee</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a fascinating look at the Apple's manufacturing history and how China has captured so much of it, and in turn, Apple itself.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Our Dollar, Your Problem: An Insider's View of Seven Turbulent Decades of Global Finance, and the Road Ahead\" author=\"Kenneth Rogoff\" link=\"https://bookshop.org/p/books/our-dollar-your-problem-an-insider-s-view-of-seven-turbulent-decades-of-global-finance-and-the-road-ahead-kenneth-rogoff/f7eb2fbd7e0e2059\" image=\"https://i.postimg.cc/2yMXvt0z/rogoff-our-dollar-your-problem.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/2yMXvt0z/rogoff-our-dollar-your-problem.jpg\" alt=\"Our Dollar, Your Problem: An Insider's View of Seven Turbulent Decades of Global Finance, and the Road Ahead\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/our-dollar-your-problem-an-insider-s-view-of-seven-turbulent-decades-of-global-finance-and-the-road-ahead-kenneth-rogoff/f7eb2fbd7e0e2059\">Our Dollar, Your Problem: An Insider's View of Seven Turbulent Decades of Global Finance, and the Road Ahead</a></div>\n<div class=\"author\">Kenneth Rogoff</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at the US Dollar and how it has maintained its place as the “global currency”. Some of the warnings have proven rather indicative of our current economic situation.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Wealth Ladder: Proven Strategies for Every Step of Your Financial Life\" author=\"Nick Maggiulli\" link=\"https://bookshop.org/p/books/the-wealth-ladder-proven-strategies-for-every-step-of-your-financial-life-nick-maggiulli/tcem6pxCq8TGG3XQ\" image=\"https://i.postimg.cc/cCB86wSW/magiulli-wealth-ladder.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/cCB86wSW/magiulli-wealth-ladder.jpg\" alt=\"The Wealth Ladder: Proven Strategies for Every Step of Your Financial Life\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-wealth-ladder-proven-strategies-for-every-step-of-your-financial-life-nick-maggiulli/tcem6pxCq8TGG3XQ\">The Wealth Ladder: Proven Strategies for Every Step of Your Financial Life</a></div>\n<div class=\"author\">Nick Maggiulli</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA bit of a look and some help for investing and increasing your wealth.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Play Nice: The Rise, Fall, and Future of Blizzard Entertainment\" author=\"Jason Schreier\" link=\"https://bookshop.org/p/books/play-nice-the-rise-fall-and-future-of-blizzard-entertainment-jason-schreier/21042587\" image=\"https://i.postimg.cc/Px0F1h5v/jason-schreier-play-nice.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Px0F1h5v/jason-schreier-play-nice.jpg\" alt=\"Play Nice: The Rise, Fall, and Future of Blizzard Entertainment\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/play-nice-the-rise-fall-and-future-of-blizzard-entertainment-jason-schreier/21042587\">Play Nice: The Rise, Fall, and Future of Blizzard Entertainment</a></div>\n<div class=\"author\">Jason Schreier</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA good look back at the history of Blizzard as well as the struggles and trouble they got into. Made me reminisce about my time playing WoW.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Hero of Ages\" author=\"Brandon Sanderson\" link=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153?ean=9781250318572\" image=\"https://i.postimg.cc/QtBBdBdT/sanderson-hero-of-ages.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/QtBBdBdT/sanderson-hero-of-ages.jpg\" alt=\"The Hero of Ages\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153?ean=9781250318572\">The Hero of Ages</a></div>\n<div class=\"author\">Brandon Sanderson</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA good ending to a fantastic trilogy. Action, suspense, drama, and most importantly, a fitting conclusion.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"A Physical Education: How I Escaped Diet Culture and Gained the Power of Lifting\" author=\"Casey Johnston\" link=\"https://bookshop.org/p/books/the-heavy-lift-how-learning-to-lift-weights-helped-me-build-every-kind-of-strength-casey-johnston/21552643\" image=\"https://i.postimg.cc/t7Gny3zg/johnston-a-physical-education.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/t7Gny3zg/johnston-a-physical-education.jpg\" alt=\"A Physical Education: How I Escaped Diet Culture and Gained the Power of Lifting\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-heavy-lift-how-learning-to-lift-weights-helped-me-build-every-kind-of-strength-casey-johnston/21552643\">A Physical Education: How I Escaped Diet Culture and Gained the Power of Lifting</a></div>\n<div class=\"author\">Casey Johnston</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis inspired me to focus again on lifting. Would recommend.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Well of Ascension\" author=\"Brandon Sanderson\" link=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153?ean=9781250318572\" image=\"https://i.postimg.cc/26P1bz1X/sanderson-well-of-ascension.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/26P1bz1X/sanderson-well-of-ascension.jpg\" alt=\"The Well of Ascension\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153?ean=9781250318572\">The Well of Ascension</a></div>\n<div class=\"author\">Brandon Sanderson</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother good book in the trilogy that definitely makes me want to finish it.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Mistborn\" author=\"Brandon Sanderson\" link=\"https://bookshop.org/p/books/mistborn-the-final-empire-brandon-sanderson/15553866?ean=9781250318541&amp;next=t&amp;next=t\" image=\"https://i.postimg.cc/gj8n3fRc/sanderson-mistborn.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/gj8n3fRc/sanderson-mistborn.jpg\" alt=\"Mistborn\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/mistborn-the-final-empire-brandon-sanderson/15553866?ean=9781250318541&amp;next=t&amp;next=t\">Mistborn</a></div>\n<div class=\"author\">Brandon Sanderson</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was my first Brandon Sanderson novel and I really enjoyed it. Good characters and a gripping story.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Down with the System: A Memoir (of Sorts)\" author=\"Serj Tankian\" link=\"https://bookshop.org/p/books/down-with-the-system-a-memoir-of-sorts-serj-tankian/20696252?ean=9780306831928\" image=\"https://i.postimg.cc/tCtRHhss/tankian-down-with-the-system.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/tCtRHhss/tankian-down-with-the-system.jpg\" alt=\"Down with the System: A Memoir (of Sorts)\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/down-with-the-system-a-memoir-of-sorts-serj-tankian/20696252?ean=9780306831928\">Down with the System: A Memoir (of Sorts)</a></div>\n<div class=\"author\">Serj Tankian</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at the System of a Down's frontman. He talked about his music, his life, his Armenian heritage and political activism.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Chokepoints: American Power in the Age of Economic Warfare\" author=\"Edward Fishman\" link=\"https://bookshop.org/p/books/chokepoints-american-power-in-the-age-of-economic-warfare-edward-fishman/21504653\" image=\"https://i.postimg.cc/nrQ6QJBG/fishman-chokepoints.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/nrQ6QJBG/fishman-chokepoints.jpg\" alt=\"Chokepoints: American Power in the Age of Economic Warfare\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/chokepoints-american-power-in-the-age-of-economic-warfare-edward-fishman/21504653\">Chokepoints: American Power in the Age of Economic Warfare</a></div>\n<div class=\"author\">Edward Fishman</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an incredibly fascinating look at how America and its allies used economic weapons as a way to wage war, not with troops, but by going after our adversary’s economies.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Rise of the Warrior Cop: The Militarization of America's Police Forces\" author=\"Radley Balko\" link=\"https://bookshop.org/p/books/rise-of-the-warrior-cop-the-militarization-of-america-s-police-forces-radley-balko/11487752\" image=\"https://i.postimg.cc/9MbVVXyq/balko-rise-of-warrior-cop.jpg\" platform=\"Hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/9MbVVXyq/balko-rise-of-warrior-cop.jpg\" alt=\"Rise of the Warrior Cop: The Militarization of America's Police Forces\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/rise-of-the-warrior-cop-the-militarization-of-america-s-police-forces-radley-balko/11487752\">Rise of the Warrior Cop: The Militarization of America's Police Forces</a></div>\n<div class=\"author\">Radley Balko</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an in-depth look at how the police have started to use SWAT teams far more often through various administrations.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Bad Company: Private Equity and the Death of the American Dream\" author=\"Megan Greenwell\" link=\"https://bookshop.org/p/books/bad-company-private-equity-and-the-death-of-the-american-dream-megan-greenwell/22086306\" image=\"https://i.postimg.cc/mr13mH7h/greenwell-bad-company.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/mr13mH7h/greenwell-bad-company.jpg\" alt=\"Bad Company: Private Equity and the Death of the American Dream\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/bad-company-private-equity-and-the-death-of-the-american-dream-megan-greenwell/22086306\">Bad Company: Private Equity and the Death of the American Dream</a></div>\n<div class=\"author\">Megan Greenwell</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a good look at how private equity has been destroying retail, hospitals &amp; healthcare, the journalism industry, and residential housing. It balances the overarching problem with personal stories in a way that makes you realize the scope of the problem.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Under Alien Skies: A Sightseer's Guide to the Universe\" author=\"Philip Plait\" link=\"https://bookshop.org/p/books/under-alien-skies-a-sightseer-s-guide-to-the-universe-phil-plait/18507009\" image=\"https://i.postimg.cc/Qdd54txD/plait-under-alien-skies.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Qdd54txD/plait-under-alien-skies.jpg\" alt=\"Under Alien Skies: A Sightseer's Guide to the Universe\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/under-alien-skies-a-sightseer-s-guide-to-the-universe-phil-plait/18507009\">Under Alien Skies: A Sightseer's Guide to the Universe</a></div>\n<div class=\"author\">Philip Plait</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWhenever I read about space, I always feel so small. Philip does a fantastic job talking about the various planets, moons, and other environments in space and what they would look like. It was informative and incredibly fascinating.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Exvangelicals: Loving, Living, and Leaving the White Evangelical Church\" author=\"Sarah McCammon\" link=\"https://bookshop.org/p/books/the-exvangelicals-loving-living-and-leaving-the-white-evangelical-church-sarah-mccammon/19995483?ean=9781250284471\" image=\"https://i.postimg.cc/qRcKYTtG/mccammon-exvangelicals.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/qRcKYTtG/mccammon-exvangelicals.jpg\" alt=\"The Exvangelicals: Loving, Living, and Leaving the White Evangelical Church\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-exvangelicals-loving-living-and-leaving-the-white-evangelical-church-sarah-mccammon/19995483?ean=9781250284471\">The Exvangelicals: Loving, Living, and Leaving the White Evangelical Church</a></div>\n<div class=\"author\">Sarah McCammon</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at the Evangelical and former Evangelical community from someone who lived through it.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"When the Moon Hits Your Eye\" author=\"John Scalzi\" link=\"https://bookshop.org/p/books/when-the-moon-hits-your-eye-john-scalzi/21424940\" image=\"https://i.postimg.cc/X7bKn6pR/scalzi-moon-hits-your-eye.jpg\" platform=\"Hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/X7bKn6pR/scalzi-moon-hits-your-eye.jpg\" alt=\"When the Moon Hits Your Eye\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/when-the-moon-hits-your-eye-john-scalzi/21424940\">When the Moon Hits Your Eye</a></div>\n<div class=\"author\">John Scalzi</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother good one by Scalzi. It was playful, funny and enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Wrong Stuff: How the Soviet Space Program Crashed and Burned\" author=\"John Strausbaugh\" link=\"https://bookshop.org/p/books/the-wrong-stuff-how-the-soviet-space-program-crashed-and-burned-john-strausbaugh/20664627\" image=\"https://i.postimg.cc/7YZKNyPZ/strausbaugh-wrong-stuff.jpg\" platform=\"Hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/7YZKNyPZ/strausbaugh-wrong-stuff.jpg\" alt=\"The Wrong Stuff: How the Soviet Space Program Crashed and Burned\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-wrong-stuff-how-the-soviet-space-program-crashed-and-burned-john-strausbaugh/20664627\">The Wrong Stuff: How the Soviet Space Program Crashed and Burned</a></div>\n<div class=\"author\">John Strausbaugh</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI knew the Soviet space program was never as good as they claimed it to be. I never realized how shoe-string it really was. This was a great read and look at how the Soviet space program got off the ground and operated through and beyond the USSR’s collapse.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Alignment Problem: Machine Learning and Human Values\" author=\"Brian Christian\" link=\"https://bookshop.org/p/books/the-alignment-problem-machine-learning-and-human-values-brian-christian/16099409\" image=\"https://i.postimg.cc/mkyLCFyy/brian-christian-alignment-problem.jpg\" platform=\"Paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/mkyLCFyy/brian-christian-alignment-problem.jpg\" alt=\"The Alignment Problem: Machine Learning and Human Values\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-alignment-problem-machine-learning-and-human-values-brian-christian/16099409\">The Alignment Problem: Machine Learning and Human Values</a></div>\n<div class=\"author\">Brian Christian</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at how we interact and train AI and LLMs. Sometimes dry, but still insightful.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Where Nobody Knows Your Name: Life in the Minor Leagues of Baseball\" author=\"John Feinstein\" link=\"https://bookshop.org/p/books/where-nobody-knows-your-name-life-in-the-minor-leagues-of-baseball-john-feinstein/9801945\" image=\"https://i.postimg.cc/zGM6qZxb/feinstein-where-nobody-knows-your-name.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/zGM6qZxb/feinstein-where-nobody-knows-your-name.jpg\" alt=\"Where Nobody Knows Your Name: Life in the Minor Leagues of Baseball\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/where-nobody-knows-your-name-life-in-the-minor-leagues-of-baseball-john-feinstein/9801945\">Where Nobody Knows Your Name: Life in the Minor Leagues of Baseball</a></div>\n<div class=\"author\">John Feinstein</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an interesting look at the minor leagues and how players, managers, umpires, and even broadcasters handle being in a competitive league where almost everyone wants to move up.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ancillary Mercy\" author=\"Ann Leckie\" link=\"https://bookshop.org/p/books/ancillary-mercy-ann-leckie/110894?ean=9780316565189\" image=\"https://i.postimg.cc/63t8d9wH/leckie-ancillary-mercy.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/63t8d9wH/leckie-ancillary-mercy.jpg\" alt=\"Ancillary Mercy\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/ancillary-mercy-ann-leckie/110894?ean=9780316565189\">Ancillary Mercy</a></div>\n<div class=\"author\">Ann Leckie</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a good ending to the series. It was enjoyable with some good twists and a solid finish.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Doom Guy: Life in First Person\" author=\"John Romero\" link=\"https://bookshop.org/p/books/doom-guy-life-in-first-person-john-romero/18230638\" image=\"https://i.postimg.cc/G2qkkdpS/romero-doom-guy.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/G2qkkdpS/romero-doom-guy.jpg\" alt=\"Doom Guy: Life in First Person\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/doom-guy-life-in-first-person-john-romero/18230638\">Doom Guy: Life in First Person</a></div>\n<div class=\"author\">John Romero</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI loved DOOM and this was a great read (listen?) to John Romero's history of getting into game development. It's amazing to hear how they pushed the needle for video games with fantastic games wringing maximum performance from early computers.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Dark Wire: The Incredible True Story of the Largest Sting Operation Ever\" author=\"Joseph Cox\" link=\"https://bookshop.org/p/books/dark-wire-the-incredible-true-story-of-the-largest-sting-operation-in-history-joseph-cox/20664624\" image=\"https://i.postimg.cc/R0Z9FdJW/cox-dark-wire.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/R0Z9FdJW/cox-dark-wire.jpg\" alt=\"Dark Wire: The Incredible True Story of the Largest Sting Operation Ever\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/dark-wire-the-incredible-true-story-of-the-largest-sting-operation-in-history-joseph-cox/20664624\">Dark Wire: The Incredible True Story of the Largest Sting Operation Ever</a></div>\n<div class=\"author\">Joseph Cox</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an incredibly detailed look into what was and impressive sting operation by the FBI.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Farenheit 182: A Memoir\" author=\"Mark Hoppus &amp; Dan Ozzi\" link=\"https://bookshop.org/p/books/fahrenheit-182-a-memoir-dan-ozzi/21810473\" image=\"https://i.postimg.cc/8kfdyLHT/farenheit-182.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/8kfdyLHT/farenheit-182.jpg\" alt=\"Farenheit 182: A Memoir\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/fahrenheit-182-a-memoir-dan-ozzi/21810473\">Farenheit 182: A Memoir</a></div>\n<div class=\"author\">Mark Hoppus &amp; Dan Ozzi</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI loved blink-182 in high school and college (still do), they headlined my first concert. It was fun memoir to read about Mark and his journey from a kid to one of the biggest stars of the pop punk genre.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ancillary Sword\" author=\"Ann Leckie\" link=\"https://bookshop.org/p/books/ancillary-sword-ann-leckie/110869?ean=9780316565196\" image=\"https://i.postimg.cc/254qbqpb/leckie-ancillary-sword.jpg\" platform=\"Paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/254qbqpb/leckie-ancillary-sword.jpg\" alt=\"Ancillary Sword\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/ancillary-sword-ann-leckie/110869?ean=9780316565196\">Ancillary Sword</a></div>\n<div class=\"author\">Ann Leckie</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this, I felt it was better and more suspenseful than Ancillary Justice in all the right ways. Makes me look forward to finishing the trilogy.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Murder the Truth: Fear, the First Amendment, and a Secret Campaign to Protect the Powerful\" author=\"David Enrich\" link=\"https://bookshop.org/p/books/murder-the-truth-threats-intimidation-and-a-secret-campaign-to-protect-the-powerful-david-enrich/21543213?ean=9780063372900&amp;next=t\" image=\"https://i.postimg.cc/TPVyBbX9/enrich-murder-the-truth.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/TPVyBbX9/enrich-murder-the-truth.jpg\" alt=\"Murder the Truth: Fear, the First Amendment, and a Secret Campaign to Protect the Powerful\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/murder-the-truth-threats-intimidation-and-a-secret-campaign-to-protect-the-powerful-david-enrich/21543213?ean=9780063372900&amp;next=t\">Murder the Truth: Fear, the First Amendment, and a Secret Campaign to Protect the Powerful</a></div>\n<div class=\"author\">David Enrich</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a good read looking at the history of libel law in the US. It did a good job talking about how we got the law we have as well as how the rich and powerful are trying to overturn the rules and laws in place. For those who want to make sure we have the ability to hold the rich and powerful to account, this is a good book to understand why NYT v Sullivan is so important.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Winning Fixes Everything: How Baseball's Brightest Minds Created Sports' Biggest Mess\" author=\"Evan Drellich\" link=\"https://bookshop.org/p/books/winning-fixes-everything-how-baseball-s-brightest-minds-created-sports-biggest-mess-evan-drellich/16712231\" image=\"https://i.postimg.cc/zvL1B9DD/drellich-winning-fixes-everything.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/zvL1B9DD/drellich-winning-fixes-everything.jpg\" alt=\"Winning Fixes Everything: How Baseball's Brightest Minds Created Sports' Biggest Mess\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/winning-fixes-everything-how-baseball-s-brightest-minds-created-sports-biggest-mess-evan-drellich/16712231\">Winning Fixes Everything: How Baseball's Brightest Minds Created Sports' Biggest Mess</a></div>\n<div class=\"author\">Evan Drellich</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an interesting dive into the 2017 Houston Astros as well as how they dove into analytics after Jim Crane bought the team in 2011.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Where the Axe is Buried\" author=\"Ray Nayler\" link=\"https://bookshop.org/p/books/where-the-axe-is-buried-ray-nayler/21424983\" image=\"https://i.postimg.cc/G3F1tPyL/ray-naylor-where-the-axe-is-buried.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/G3F1tPyL/ray-naylor-where-the-axe-is-buried.jpg\" alt=\"Where the Axe is Buried\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/where-the-axe-is-buried-ray-nayler/21424983\">Where the Axe is Buried</a></div>\n<div class=\"author\">Ray Nayler</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting story. Parts of it felt a little too close to home in the current political climate. A little too dystopian in some aspects, but enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ancillary Justice\" author=\"Ann Leckie\" link=\"https://bookshop.org/p/books/ancillary-justice-ann-leckie/110863?ean=9780316565172\" image=\"https://i.postimg.cc/0NgMyY41/leckie-ancillary-jusice.jpg\" platform=\"Paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/0NgMyY41/leckie-ancillary-jusice.jpg\" alt=\"Ancillary Justice\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/ancillary-justice-ann-leckie/110863?ean=9780316565172\">Ancillary Justice</a></div>\n<div class=\"author\">Ann Leckie</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nStarted off a little slow. Other than its pacing, it was enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Operation Paperclip: The Secret Intelligence Program That Brought Nazi Scientists to America\" author=\"Annie Jacobsen\" link=\"https://bookshop.org/p/books/operation-paperclip-the-secret-intelligence-program-that-brought-nazi-scientists-to-america-annie-jacobsen/16438943\" image=\"https://i.postimg.cc/9FVJxQFh/operaton-paperclip.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/9FVJxQFh/operaton-paperclip.jpg\" alt=\"Operation Paperclip: The Secret Intelligence Program That Brought Nazi Scientists to America\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/operation-paperclip-the-secret-intelligence-program-that-brought-nazi-scientists-to-america-annie-jacobsen/16438943\">Operation Paperclip: The Secret Intelligence Program That Brought Nazi Scientists to America</a></div>\n<div class=\"author\">Annie Jacobsen</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a fascinating, but somber read. It is shameful how much the US Government was willing to look past, or actively hide with regards to the scientists brought over from Nazi Germany.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Character Limit: How Elon Musk Destroyed Twitter\" author=\"Kate Conger &amp; Ryan Mac\" link=\"https://www.penguinrandomhouse.com/books/737290/character-limit-by-kate-conger-and-ryan-mac/\" image=\"https://i.postimg.cc/v8CCS0y7/character-limit.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/v8CCS0y7/character-limit.jpg\" alt=\"Character Limit: How Elon Musk Destroyed Twitter\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.penguinrandomhouse.com/books/737290/character-limit-by-kate-conger-and-ryan-mac/\">Character Limit: How Elon Musk Destroyed Twitter</a></div>\n<div class=\"author\">Kate Conger &amp; Ryan Mac</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI know Twitter could be a hellhole, but I enjoyed it. This book did a good job talking about and documenting how Elon purchased and ruined the social network.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Autocracy, Inc.: The Dictators Who Want to Run the World\" author=\"Anne Applebaum\" link=\"https://bookshop.org/p/books/autocracy-inc-the-dictators-who-want-to-run-the-world-anne-applebaum/21057810\" image=\"https://i.postimg.cc/m2FQ4bMz/autocracy-inc.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/m2FQ4bMz/autocracy-inc.jpg\" alt=\"Autocracy, Inc.: The Dictators Who Want to Run the World\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/autocracy-inc-the-dictators-who-want-to-run-the-world-anne-applebaum/21057810\">Autocracy, Inc.: The Dictators Who Want to Run the World</a></div>\n<div class=\"author\">Anne Applebaum</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a scary look at the autocratic world, and how so many of the things happening in America. It's a short book and I'd recommend it. It puts the current situation in the US even more frightening.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Madoff: The Final Word\" author=\"Richard Behar\" link=\"https://bookshop.org/p/books/madoff-the-final-word-richard-behar/20807026\" image=\"https://i.postimg.cc/Vk7X3kpR/behar-madoff.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Vk7X3kpR/behar-madoff.jpg\" alt=\"Madoff: The Final Word\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/madoff-the-final-word-richard-behar/20807026\">Madoff: The Final Word</a></div>\n<div class=\"author\">Richard Behar</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an interesting look at the largest ponzi scheme in history and the characters involved. It provided a look at Madoff and what he did and how he got it to last as long as it did.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Picks and Shovels\" author=\"Cory Doctorow\" link=\"https://bookshop.org/p/books/picks-and-shovels-a-martin-hench-novel-cory-doctorow/21413549\" image=\"https://i.postimg.cc/59QZ7QQf/cory-doctorow-picks-and-shovels.jpg\" platform=\"Hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/59QZ7QQf/cory-doctorow-picks-and-shovels.jpg\" alt=\"Picks and Shovels\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/picks-and-shovels-a-martin-hench-novel-cory-doctorow/21413549\">Picks and Shovels</a></div>\n<div class=\"author\">Cory Doctorow</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother good one from Cory Doctorow. Had some good twists and kept me on the edge of my seat.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"When McKinsey Comes to Town: The Hidden Influence of the World's Most Powerful Consulting Firm\" author=\"Walt Bogdanich &amp; Michael Forsythe\" link=\"https://bookshop.org/p/books/when-mckinsey-comes-to-town-the-hidden-influence-of-the-world-s-most-powerful-consulting-firm-michael-forsythe/18369941?ean=9780385546232\" image=\"https://i.postimg.cc/L4JLkDL1/when-mckinsey-comes-to-town.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/L4JLkDL1/when-mckinsey-comes-to-town.jpg\" alt=\"When McKinsey Comes to Town: The Hidden Influence of the World's Most Powerful Consulting Firm\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/when-mckinsey-comes-to-town-the-hidden-influence-of-the-world-s-most-powerful-consulting-firm-michael-forsythe/18369941?ean=9780385546232\">When McKinsey Comes to Town: The Hidden Influence of the World's Most Powerful Consulting Firm</a></div>\n<div class=\"author\">Walt Bogdanich &amp; Michael Forsythe</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis provided some good insight into McKinsey which made me angrier the more I read. Their callous disregard for how their work affects people is just cruel. It was enlightening and I feel important to understand how much McKinsey and companies like McKinsey cause the harm that they do.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Splendid and the Vile: A Saga of Churchill, Family and Defiance During the Blitz\" author=\"Erik Larson\" link=\"https://bookshop.org/p/books/the-splendid-and-the-vile-a-saga-of-churchill-family-and-defiance-during-the-blitz-erik-larson/8630726?ean=9780385348737\" image=\"https://i.postimg.cc/fbpF1Fth/erik-larson-splendid-vile.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/fbpF1Fth/erik-larson-splendid-vile.jpg\" alt=\"The Splendid and the Vile: A Saga of Churchill, Family and Defiance During the Blitz\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-splendid-and-the-vile-a-saga-of-churchill-family-and-defiance-during-the-blitz-erik-larson/8630726?ean=9780385348737\">The Splendid and the Vile: A Saga of Churchill, Family and Defiance During the Blitz</a></div>\n<div class=\"author\">Erik Larson</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother interesting read by Erik Larson. It was interesting reading about Churchill and the challenges he faced with the Blitz. I knew it was bad, but this provided some insight into it and the UK government’s handling of it. The only thing I wasn’t sure of was the sidebars into his family’s love affairs.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"In the Garden of Beasts: Love, Terror, and an American Family in Hitler's Berlin\" author=\"Erik Larson\" link=\"https://bookshop.org/p/books/in-the-garden-of-beasts-love-terror-and-an-american-family-in-hitler-s-berlin-erik-larson/944016?ean=9780307408853\" image=\"https://i.postimg.cc/gjv4gVTV/erik-larson-in-the-garden-of-beasts.avif\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/gjv4gVTV/erik-larson-in-the-garden-of-beasts.avif\" alt=\"In the Garden of Beasts: Love, Terror, and an American Family in Hitler's Berlin\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/in-the-garden-of-beasts-love-terror-and-an-american-family-in-hitler-s-berlin-erik-larson/944016?ean=9780307408853\">In the Garden of Beasts: Love, Terror, and an American Family in Hitler's Berlin</a></div>\n<div class=\"author\">Erik Larson</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn interesting look at the rise of Hitler and Nazi Germany through the career of the US’ ambassador to Germany. Larson does a good job of documenting Dodd’s challenges and mindset while navigating the rise of Hitler.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Bound Worlds\" author=\"Megan E. O'Keefe\" link=\"https://bookshop.org/p/books/the-bound-worlds-megan-e-o-keefe/20589383?ean=9780316291576\" image=\"https://i.postimg.cc/FFPCP3gV/the-bound-worlds.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/FFPCP3gV/the-bound-worlds.jpg\" alt=\"The Bound Worlds\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-bound-worlds-megan-e-o-keefe/20589383?ean=9780316291576\">The Bound Worlds</a></div>\n<div class=\"author\">Megan E. O'Keefe</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed the book and the twists and turns. It was a good ending to the series.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Fractured Dark\" author=\"Megan E. O'Keefe\" link=\"https://bookshop.org/p/books/the-fractured-dark-megan-e-o-keefe/19623182?ean=9780316291132\" image=\"https://i.postimg.cc/Pr93HH7L/the-fractured-dark.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Pr93HH7L/the-fractured-dark.jpg\" alt=\"The Fractured Dark\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-fractured-dark-megan-e-o-keefe/19623182?ean=9780316291132\">The Fractured Dark</a></div>\n<div class=\"author\">Megan E. O'Keefe</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA good continuation to the story and the world she built into the first book. This had some good twists as well.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Gates of Europe: A History of Ukraine\" author=\"Serhii Plokhy\" link=\"https://bookshop.org/p/books/the-gates-of-europe-a-history-of-ukraine-serhii-plokhy/15228399?ean=9781541675643\" image=\"https://i.postimg.cc/kMhZBVFC/gates-of-europe.jpg\" platform=\"Audiobook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/kMhZBVFC/gates-of-europe.jpg\" alt=\"The Gates of Europe: A History of Ukraine\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-gates-of-europe-a-history-of-ukraine-serhii-plokhy/15228399?ean=9781541675643\">The Gates of Europe: A History of Ukraine</a></div>\n<div class=\"author\">Serhii Plokhy</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an interesting and in depth look at the history of Ukraine as far back as the Greek and Roman Empires. It was written in 2015 so the current war is not included, but the run up to it was. It was captivating and gave me an idea of what Ukraine has been through as well as how we got to where we are today.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Atomic Habits\" author=\"James Clear\" link=\"https://bookshop.org/p/books/atomic-habits-an-easy-proven-way-to-build-good-habits-break-bad-ones-james-clear/12117739?ean=9780735211292\" image=\"https://i.postimg.cc/T2HZpmn8/atomic-habits.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/T2HZpmn8/atomic-habits.jpg\" alt=\"Atomic Habits\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/atomic-habits-an-easy-proven-way-to-build-good-habits-break-bad-ones-james-clear/12117739?ean=9780735211292\">Atomic Habits</a></div>\n<div class=\"author\">James Clear</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nSome useful tips on helping you improve yourself and your habits.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Deep Work: Rules for Focused Success in a Distracted World\" author=\"Cal Newport\" link=\"https://bookshop.org/p/books/deep-work-rules-for-focused-success-in-a-distracted-world-cal-newport/8339760?ean=9781455586691\" image=\"https://i.postimg.cc/R0vXKbNK/deep-work.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/R0vXKbNK/deep-work.jpg\" alt=\"Deep Work: Rules for Focused Success in a Distracted World\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/deep-work-rules-for-focused-success-in-a-distracted-world-cal-newport/8339760?ean=9781455586691\">Deep Work: Rules for Focused Success in a Distracted World</a></div>\n<div class=\"author\">Cal Newport</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother good book by Cal Newport with some thoughts about how to regain focus and do good work.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Slow Productivity: The Lost Art of Accomplishment Without Burnout\" author=\"Cal Newport\" link=\"https://bookshop.org/p/books/slow-productivity-the-lost-art-of-accomplishment-without-burnout-cal-newport/20143790?ean=9780593544853\" image=\"https://i.postimg.cc/VkRCqzgj/slow-productivity.jpg\" platform=\"eBook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/VkRCqzgj/slow-productivity.jpg\" alt=\"Slow Productivity: The Lost Art of Accomplishment Without Burnout\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/slow-productivity-the-lost-art-of-accomplishment-without-burnout-cal-newport/20143790?ean=9780593544853\">Slow Productivity: The Lost Art of Accomplishment Without Burnout</a></div>\n<div class=\"author\">Cal Newport</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother interesting book by Cal Newport that proposes some ideas for helping you stay productive without killing yourself.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Blighted Stars\" author=\"Megan E. O'Keefe\" link=\"https://bookshop.org/p/books/the-blighted-stars-megan-e-o-keefe/17405812?ean=9780316290791\" image=\"https://i.postimg.cc/5N67Dysd/the-blighted-stars.jpg\" platform=\"Paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/5N67Dysd/the-blighted-stars.jpg\" alt=\"The Blighted Stars\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-blighted-stars-megan-e-o-keefe/17405812?ean=9780316290791\">The Blighted Stars</a></div>\n<div class=\"author\">Megan E. O'Keefe</div>\n</div>\n<platform-tag platform=\"Paperback\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this. It’s a fascinating world with a good story set up for the trilogy.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Death of Expertise: The Campaign Against Established Knowledge and Why It Matters\" author=\"Tom Nichols\" link=\"https://bookshop.org/p/books/the-death-of-expertise-second-edition-the-assault-on-establishment-knowledge-and-why-it-matters-tom-nichols/20688747?ean=9780197763834\" image=\"https://i.postimg.cc/yx9JsnfF/death-of-expertise.jpg\" platform=\"Audiobook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/yx9JsnfF/death-of-expertise.jpg\" alt=\"The Death of Expertise: The Campaign Against Established Knowledge and Why It Matters\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-death-of-expertise-second-edition-the-assault-on-establishment-knowledge-and-why-it-matters-tom-nichols/20688747?ean=9780197763834\">The Death of Expertise: The Campaign Against Established Knowledge and Why It Matters</a></div>\n<div class=\"author\">Tom Nichols</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was a detailed, but depressing look at how we as a society have scorned experts and mistaken our own knowledge as expertise. It explains a lot about where we are as a society.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Last to Leave the Room\" author=\"Caitlin Starling\" link=\"https://bookshop.org/p/books/last-to-leave-the-room-caitlin-starling/19486410\" image=\"https://i.postimg.cc/2SZt4Zn8/last-to-leave-the-room.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/2SZt4Zn8/last-to-leave-the-room.jpg\" alt=\"Last to Leave the Room\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/last-to-leave-the-room-caitlin-starling/19486410\">Last to Leave the Room</a></div>\n<div class=\"author\">Caitlin Starling</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this. It was an interesting story with some good twists.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Digital Minimalism: Choosing a Focused Life in a Noisy World\" author=\"Cal Newport\" link=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448?ean=9780525536512\" image=\"https://i.postimg.cc/bJXxWHbn/digital-minimalism.jpg\" platform=\"Hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/bJXxWHbn/digital-minimalism.jpg\" alt=\"Digital Minimalism: Choosing a Focused Life in a Noisy World\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448?ean=9780525536512\">Digital Minimalism: Choosing a Focused Life in a Noisy World</a></div>\n<div class=\"author\">Cal Newport</div>\n</div>\n<platform-tag platform=\"Hardcover\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nCal Newport makes some good points in this book how technology and social media can overcrowd our lives. While I’m not sure about everything, there’s some helpful tips and advice for getting a better hold of our time and attention in this distracting digital world.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Meh</h2>\n<p><media-box title=\"Acquired Taste\" author=\"Clay McLeod Chapman\" link=\"https://bookshop.org/p/books/acquired-taste-clay-mcleod-chapman/2d97fa26f163e8c5\" image=\"https://i.postimg.cc/zXvLzPmm/chapman-acquired-taste.jpg\" platform=\"Audiobook\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/zXvLzPmm/chapman-acquired-taste.jpg\" alt=\"Acquired Taste\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/acquired-taste-clay-mcleod-chapman/2d97fa26f163e8c5\">Acquired Taste</a></div>\n<div class=\"author\">Clay McLeod Chapman</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI found a lot of the stories in this to be weird. Maybe it just wasn’t for me.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Zen Mind, Beginner's Mind\" author=\"Shunryu Suzuki\" link=\"https://bookshop.org/p/books/zen-mind-beginner-s-mind-50th-anniversary-edition-shunryu-suzuki/10545494\" image=\"https://i.postimg.cc/DwBY2J3t/suzuki-zen-mind-beginners-mind.jpg\" platform=\"Audiobook\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/DwBY2J3t/suzuki-zen-mind-beginners-mind.jpg\" alt=\"Zen Mind, Beginner's Mind\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/zen-mind-beginner-s-mind-50th-anniversary-edition-shunryu-suzuki/10545494\">Zen Mind, Beginner's Mind</a></div>\n<div class=\"author\">Shunryu Suzuki</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI've been considering meditation and this was one of the recommendations. I'm not sure how much I really got out of this.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Homo Deus: A Brief History of Tomorrow\" author=\"Yuval Noah Harari\" link=\"https://bookshop.org/p/books/homo-deus-a-brief-history-of-tomorrow-yuval-noah-harari/55711\" image=\"https://i.postimg.cc/02wY284H/yuval-noah-harari-homo-deus.jpg\" platform=\"Audiobook\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/02wY284H/yuval-noah-harari-homo-deus.jpg\" alt=\"Homo Deus: A Brief History of Tomorrow\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/homo-deus-a-brief-history-of-tomorrow-yuval-noah-harari/55711\">Homo Deus: A Brief History of Tomorrow</a></div>\n<div class=\"author\">Yuval Noah Harari</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nIt was a little dry and felt a little disorganized.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"More Money Than God: Hedge Funds and the Making of a New Elite\" author=\"Sebastian Mallaby\" link=\"https://bookshop.org/p/books/more-money-than-god-hedge-funds-and-the-making-of-a-new-elite-sebastian-mallaby/11728548\" image=\"https://i.postimg.cc/5tBQzgK1/more-money-than-god.jpg\" platform=\"eBook\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/5tBQzgK1/more-money-than-god.jpg\" alt=\"More Money Than God: Hedge Funds and the Making of a New Elite\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/more-money-than-god-hedge-funds-and-the-making-of-a-new-elite-sebastian-mallaby/11728548\">More Money Than God: Hedge Funds and the Making of a New Elite</a></div>\n<div class=\"author\">Sebastian Mallaby</div>\n</div>\n<platform-tag platform=\"eBook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThe book was kind of dry but provided an interesting look at the history of index funds with a good comparison to investment banks.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Sirens' Call: How Attention Became the World's Most Endangered Resource\" author=\"Chris Hayes\" link=\"https://bookshop.org/p/books/the-sirens-call-how-attention-became-the-world-s-most-endangered-resource-chris-hayes/21744711\" image=\"https://i.postimg.cc/SRcSxx2M/hayes-sirens-call.jpg\" platform=\"Audiobook\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/SRcSxx2M/hayes-sirens-call.jpg\" alt=\"The Sirens' Call: How Attention Became the World's Most Endangered Resource\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-sirens-call-how-attention-became-the-world-s-most-endangered-resource-chris-hayes/21744711\">The Sirens' Call: How Attention Became the World's Most Endangered Resource</a></div>\n<div class=\"author\">Chris Hayes</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nSome interesting thoughts about how companies and people try to capture our attention. Most of it felt pretty obvious to me and didn’t think anything here was all that revealing.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Thinking in Systems\" author=\"Donella Meadows\" link=\"https://bookshop.org/p/books/thinking-in-systems-international-bestseller-donella-meadows/8755142\" image=\"https://i.postimg.cc/hjDRhx45/thinking-in-systems.jpg\" platform=\"Audiobook\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/hjDRhx45/thinking-in-systems.jpg\" alt=\"Thinking in Systems\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/thinking-in-systems-international-bestseller-donella-meadows/8755142\">Thinking in Systems</a></div>\n<div class=\"author\">Donella Meadows</div>\n</div>\n<platform-tag platform=\"Audiobook\"></platform-tag></div></div></div></media-box></p>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was an interesting, albeit non-in-depth look at how various systems work and some of the traps involved, as well as how to overcome them.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-10T18:32:57Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/2026/the-web-runs-on-tolerance/",
      "url": "https://kpwags.com/notes/2026/the-web-runs-on-tolerance/",
      "title": "The Web Runs On Tolerance",
      "content_html": "\n\t\t<blockquote>\n<p>You can be <em>crap</em> at coding and the web still works. Yes, it takes an awful lot of effort from browser manufacturers to make &quot;do what I mean, not what I say&quot; a reality. But the world is better for it.</p>\n</blockquote>\n<p>It amazes me how much the browser can figure out and handle.</p>\n<blockquote>\n<p>How do you acknowledge that the father of the computer was a homosexual, brutally bullied by the state into suicide, and then fund groups that want to deny gay people fundamental human rights?</p>\n<p>The ARM processor which powers the modern world was co-designed by a trans woman. When you throw slurs and denigrate people's pronouns, your ignorance and hatred does a disservice to history and drives away the next generation of talent.</p>\n<p>History shows us that all progress comes from the meeting of diverse people, with different ideas, and different backgrounds. The notion that only a pure ethnostate can prosper is simply historically illiterate</p>\n</blockquote>\n<p>Amen.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-09T14:03:47Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/video-games-i-played-in-2025/",
      "url": "https://kpwags.com/posts/2026/video-games-i-played-in-2025/",
      "title": "Video Games I Played in 2025",
      "content_html": "\n\t\t<p>I didn't play as much as I hoped, but still got some in.</p>\n<p><media-box title=\"Star Wars: Battlefront II\" link=\"https://www.ea.com/games/starwars/battlefront/star-wars-battlefront-2\" image=\"https://i.postimg.cc/xdWSGnfD/battlefront-ii.jpg\" platform=\"playstation\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/xdWSGnfD/battlefront-ii.jpg\" alt=\"Star Wars: Battlefront II\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/starwars/battlefront/star-wars-battlefront-2\">Star Wars: Battlefront II</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI finally went through and did the single player campaign. It wasn't a bad story, but somewhat predictable. The multiplayer is still fun.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"World of Warcraft\" link=\"https://worldofwarcraft.com/en-us/wowclassic\" image=\"https://i.postimg.cc/J72V36gV/wow-mop.jpg\" platform=\"pc\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/J72V36gV/wow-mop.jpg\" alt=\"World of Warcraft\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://worldofwarcraft.com/en-us/wowclassic\">World of Warcraft</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"pc\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag pc\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1.5 0A1.5 1.5 0 0 0 0 1.5v7A1.5 1.5 0 0 0 1.5 10H6v1H1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-5v-1h4.5A1.5 1.5 0 0 0 16 8.5v-7A1.5 1.5 0 0 0 14.5 0zm0 1h13a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-13a.5.5 0 0 1-.5-.5v-7a.5.5 0 0 1 .5-.5M12 12.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2 0a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0M1.5 12h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1M1 14.25a.25.25 0 0 1 .25-.25h5.5a.25.25 0 1 1 0 .5h-5.5a.25.25 0 0 1-.25-.25\"></path>\n\t\t</svg>\n\t\tPC\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI still enjoy this 20 years later. I tend to play more classic than the current iteration.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Clair Obscur: Expedition 33\" link=\"https://www.expedition33.com/\" image=\"https://i.postimg.cc/MZC666x1/clair-obscur-expedition-33.jpg\" platform=\"xbox\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/MZC666x1/clair-obscur-expedition-33.jpg\" alt=\"Clair Obscur: Expedition 33\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.expedition33.com/\">Clair Obscur: Expedition 33</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"xbox\"><div class=\"platform-tag\">\n<span class=\"tag xbox\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n<path d=\"M7.202 15.967a8 8 0 0 1-3.552-1.26c-.898-.585-1.101-.826-1.101-1.306 0-.965 1.062-2.656 2.879-4.583C6.459 7.723 7.897 6.44 8.052 6.475c.302.068 2.718 2.423 3.622 3.531 1.43 1.753 2.088 3.189 1.754 3.829-.254.486-1.83 1.437-2.987 1.802-.954.301-2.207.429-3.239.33m-5.866-3.57C.589 11.253.212 10.127.03 8.497c-.06-.539-.038-.846.137-1.95.218-1.377 1.002-2.97 1.945-3.95.401-.417.437-.427.926-.263.595.2 1.23.638 2.213 1.528l.574.519-.313.385C4.056 6.553 2.52 9.086 1.94 10.653c-.315.852-.442 1.707-.306 2.063.091.24.007.15-.3-.319Zm13.101.195c.074-.36-.019-1.02-.238-1.687-.473-1.443-2.055-4.128-3.508-5.953l-.457-.575.494-.454c.646-.593 1.095-.948 1.58-1.25.381-.237.927-.448 1.161-.448.145 0 .654.528 1.065 1.104a8.4 8.4 0 0 1 1.343 3.102c.153.728.166 2.286.024 3.012a9.5 9.5 0 0 1-.6 1.893c-.179.393-.624 1.156-.82 1.404-.1.128-.1.127-.043-.148ZM7.335 1.952c-.67-.34-1.704-.705-2.276-.803a4 4 0 0 0-.759-.043c-.471.024-.45 0 .306-.358A7.8 7.8 0 0 1 6.47.128c.8-.169 2.306-.17 3.094-.005.85.18 1.853.552 2.418.9l.168.103-.385-.02c-.766-.038-1.88.27-3.078.853-.361.176-.676.316-.699.312a12 12 0 0 1-.654-.319Z\"></path>\n</svg>\nXBOX\n</span></div></platform-tag></p>\n\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this. The gameplay reminded me some of Mario RPG and Eldenring. The story was intriguing and captivating. I probably should have played through faster without all the breaks in between.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Jedi: Survivor\" link=\"https://www.ea.com/games/starwars/jedi/jedi-survivor\" image=\"https://i.postimg.cc/mrjVXssd/jedi-survivor.jpg\" platform=\"playstation\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/mrjVXssd/jedi-survivor.jpg\" alt=\"Jedi: Survivor\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/starwars/jedi/jedi-survivor\">Jedi: Survivor</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nI really enjoyed the game. The story was good as well as the gameplay. There's something intensely satisfying about taking your lightsaber to Stormtroopers.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Helldivers II\" link=\"https://www.playstation.com/en-us/games/helldivers-2/\" image=\"https://i.postimg.cc/CMcYSW6K/helldivers-ii.jpg\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/CMcYSW6K/helldivers-ii.jpg\" alt=\"Helldivers II\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.playstation.com/en-us/games/helldivers-2/\">Helldivers II</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><p>\nI only played a few rounds of this, have been meaning to play more but Jedi Survivor and Far Cry captured my focus.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Far Cry 5\" link=\"https://www.ubisoft.com/en-us/game/far-cry/far-cry-5\" image=\"https://i.postimg.cc/QdJY6qPv/farcry5.jpg\" platform=\"xbox\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/QdJY6qPv/farcry5.jpg\" alt=\"Far Cry 5\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ubisoft.com/en-us/game/far-cry/far-cry-5\">Far Cry 5</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"xbox\"><div class=\"platform-tag\">\n<span class=\"tag xbox\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n<path d=\"M7.202 15.967a8 8 0 0 1-3.552-1.26c-.898-.585-1.101-.826-1.101-1.306 0-.965 1.062-2.656 2.879-4.583C6.459 7.723 7.897 6.44 8.052 6.475c.302.068 2.718 2.423 3.622 3.531 1.43 1.753 2.088 3.189 1.754 3.829-.254.486-1.83 1.437-2.987 1.802-.954.301-2.207.429-3.239.33m-5.866-3.57C.589 11.253.212 10.127.03 8.497c-.06-.539-.038-.846.137-1.95.218-1.377 1.002-2.97 1.945-3.95.401-.417.437-.427.926-.263.595.2 1.23.638 2.213 1.528l.574.519-.313.385C4.056 6.553 2.52 9.086 1.94 10.653c-.315.852-.442 1.707-.306 2.063.091.24.007.15-.3-.319Zm13.101.195c.074-.36-.019-1.02-.238-1.687-.473-1.443-2.055-4.128-3.508-5.953l-.457-.575.494-.454c.646-.593 1.095-.948 1.58-1.25.381-.237.927-.448 1.161-.448.145 0 .654.528 1.065 1.104a8.4 8.4 0 0 1 1.343 3.102c.153.728.166 2.286.024 3.012a9.5 9.5 0 0 1-.6 1.893c-.179.393-.624 1.156-.82 1.404-.1.128-.1.127-.043-.148ZM7.335 1.952c-.67-.34-1.704-.705-2.276-.803a4 4 0 0 0-.759-.043c-.471.024-.45 0 .306-.358A7.8 7.8 0 0 1 6.47.128c.8-.169 2.306-.17 3.094-.005.85.18 1.853.552 2.418.9l.168.103-.385-.02c-.766-.038-1.88.27-3.078.853-.361.176-.676.316-.699.312a12 12 0 0 1-.654-.319Z\"></path>\n</svg>\nXBOX\n</span></div></platform-tag></p>\n\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nSome of the story seems a little on the nose today. The gameplay was fun and I enjoyed the open world.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Far Cry New Dawn\" link=\"https://www.ubisoft.com/en-us/game/far-cry/new-dawn\" image=\"https://i.postimg.cc/NMHGHkYQ/far_cry_new_dawn.jpg\" platform=\"xbox\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/NMHGHkYQ/far_cry_new_dawn.jpg\" alt=\"Far Cry New Dawn\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ubisoft.com/en-us/game/far-cry/new-dawn\">Far Cry New Dawn</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"xbox\"><div class=\"platform-tag\">\n<span class=\"tag xbox\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n<path d=\"M7.202 15.967a8 8 0 0 1-3.552-1.26c-.898-.585-1.101-.826-1.101-1.306 0-.965 1.062-2.656 2.879-4.583C6.459 7.723 7.897 6.44 8.052 6.475c.302.068 2.718 2.423 3.622 3.531 1.43 1.753 2.088 3.189 1.754 3.829-.254.486-1.83 1.437-2.987 1.802-.954.301-2.207.429-3.239.33m-5.866-3.57C.589 11.253.212 10.127.03 8.497c-.06-.539-.038-.846.137-1.95.218-1.377 1.002-2.97 1.945-3.95.401-.417.437-.427.926-.263.595.2 1.23.638 2.213 1.528l.574.519-.313.385C4.056 6.553 2.52 9.086 1.94 10.653c-.315.852-.442 1.707-.306 2.063.091.24.007.15-.3-.319Zm13.101.195c.074-.36-.019-1.02-.238-1.687-.473-1.443-2.055-4.128-3.508-5.953l-.457-.575.494-.454c.646-.593 1.095-.948 1.58-1.25.381-.237.927-.448 1.161-.448.145 0 .654.528 1.065 1.104a8.4 8.4 0 0 1 1.343 3.102c.153.728.166 2.286.024 3.012a9.5 9.5 0 0 1-.6 1.893c-.179.393-.624 1.156-.82 1.404-.1.128-.1.127-.043-.148ZM7.335 1.952c-.67-.34-1.704-.705-2.276-.803a4 4 0 0 0-.759-.043c-.471.024-.45 0 .306-.358A7.8 7.8 0 0 1 6.47.128c.8-.169 2.306-.17 3.094-.005.85.18 1.853.552 2.418.9l.168.103-.385-.02c-.766-.038-1.88.27-3.078.853-.361.176-.676.316-.699.312a12 12 0 0 1-.654-.319Z\"></path>\n</svg>\nXBOX\n</span></div></platform-tag></p>\n\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><p>\nI'm still playing through this. It's a sequel to Far Cry 5 and I've been having fun with it.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-09T14:02:34Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/stop-anthropomorphizing-ai/",
      "url": "https://kpwags.com/posts/2026/stop-anthropomorphizing-ai/",
      "title": "Stop Anthropomorphizing AI",
      "content_html": "\n\t\t<p>Recently Grok, Elon Musk's AI agent extraordinaire has been in the news for <a href=\"https://www.404media.co/groks-ai-csam-shitshow/\">allowing people to produce child sexual abuse material (CSAM)</a>. This should be a huge story, but instead, the mainstream media is making a mockery of itself bending over backwards to either ignore it or completely miscategorizing what is happening.</p>\n<p>I've seen <a href=\"https://www.404media.co/groks-ai-csam-shitshow/\">plenty</a> <a href=\"https://www.pcmag.com/news/xs-grok-chatbot-apologizes-for-creating-sexualized-images-of-underage-girls\">of</a> <a href=\"https://thehill.com/policy/technology/5669917-elon-musk-ai-chatbot-grok-apologizes/\">articles</a> with headlines saying how Grok apologized for sexualizing young girls, and all I want to do is scream at my screen: &quot;AI CAN'T APOLOGIZE! IT'S NOT FUCKING HUMAN!&quot;</p>\n<p><em>Okay...just breathe...</em></p>\n<p>That some of our biggest news sources can't recognize this disconnect, well it explains a lot about where we are as a nation and as a society.</p>\n<p>We need to stop treating AI, LLMs, chatbots as if they're human. They're not. They're computer algorithms. They might be &quot;smarter&quot; than anything we've had in the past, but they're still just computer code. They can't apologize, they don't have the human capacity to admit wrongdoing. If they &quot;apologized&quot;, it's only because they were prompted to.</p>\n<p>And none of this even begins to address what Elon Musk and xAI allowed Grok to <em>actually do</em>. The fact that there were no safeguards baked into xAI to tell it to not generate child porn just blows my mind. It's something so completely obvious that a sane person would realize that some asshole would no doubt try to do that with their tool. I wish this weren't the case, but human nature is a bitch. I don't know how hard it is to implement it from a coding perspective, but I feel like most of the bigger players like OpenAI have guardrails in place to try to stop the worst of it.</p>\n<p>I don't particularly like the fact that Google and Apple (Apple especially) are gatekeepers of what software can be installed on our phones, but if they're going to be the arbiters, why the hell are they allowing a CSAM generation tool to remain on their app stores?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-08T23:56:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/movies-i-watched-in-2025/",
      "url": "https://kpwags.com/posts/2026/movies-i-watched-in-2025/",
      "title": "Movies I Watched in 2025",
      "content_html": "\n\t\t<p>It was a lighter year for movies in 2025. We watched more TV than movies this year.</p>\n<h2>My Favorite Movies in 2025</h2>\n<p><media-box title=\"Rogue One: A Star Wars Story\" link=\"https://www.imdb.com/title/tt3748528/\" image=\"https://i.postimg.cc/g23ZjSrs/star-wars-rogue-one.jpg\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/g23ZjSrs/star-wars-rogue-one.jpg\" alt=\"Rogue One: A Star Wars Story\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt3748528/\">Rogue One: A Star Wars Story</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nOne of the best Star Wars movies and definitely the best of the new movies. A good story and enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Movies I Enjoyed</h2>\n<p><media-box title=\"Wargames\" link=\"https://www.imdb.com/title/tt0086567/?\" image=\"https://i.postimg.cc/Kj3XN58b/wargames.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Kj3XN58b/wargames.jpg\" alt=\"Wargames\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0086567/?\">Wargames</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was definitely an 80s movie, but still enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Despicable Me 2\" link=\"https://www.imdb.com/title/tt1690953/\" image=\"https://i.postimg.cc/P5dZT0kL/despicable-me-2.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/P5dZT0kL/despicable-me-2.jpg\" alt=\"Despicable Me 2\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt1690953/\">Despicable Me 2</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nCute and enjoyable. A little predictable, but glad we watched it.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Conclave\" link=\"https://www.imdb.com/title/tt20215234/\" image=\"https://i.postimg.cc/L562WV1v/conclave.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/L562WV1v/conclave.jpg\" alt=\"Conclave\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt20215234/\">Conclave</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this. Suspenseful with some good twists and turns.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Wars Episode II: Attack of the Clones\" link=\"https://www.imdb.com/title/tt0121765/\" image=\"https://i.postimg.cc/tT8WxP8D/star-wars-ii.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/tT8WxP8D/star-wars-ii.jpg\" alt=\"Star Wars Episode II: Attack of the Clones\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0121765/\">Star Wars Episode II: Attack of the Clones</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis is one of the better prequel movies. Some good intrigue with the first time seeing Yoda with a lightsaber.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Wars Episode III: Revenge of the Sith\" link=\"https://www.imdb.com/title/tt0121766/\" image=\"https://i.postimg.cc/90j4P9yH/star-wars-episode-3.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/90j4P9yH/star-wars-episode-3.jpg\" alt=\"Star Wars Episode III: Revenge of the Sith\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0121766/\">Star Wars Episode III: Revenge of the Sith</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nDefinitely the best of the prequel trilogy. It did a good job bridging the prequels to set up the original trilogy. Good soundtrack, good action scenes as well.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Wake Up Dead Man\" link=\"https://www.imdb.com/title/tt14364480/\" image=\"https://i.postimg.cc/Jznw1xg7/wake-up-dead-man.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Jznw1xg7/wake-up-dead-man.jpg\" alt=\"Wake Up Dead Man\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt14364480/\">Wake Up Dead Man</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAnother enjoyable Knives Out movie. The intrigue was there with interesting characters. Would recommend.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"A House of Dynamite\" link=\"https://www.imdb.com/title/tt32376165\" image=\"https://i.postimg.cc/jCVkShCY/a-house-of-dynamite.jpg\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/jCVkShCY/a-house-of-dynamite.jpg\" alt=\"A House of Dynamite\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt32376165\">A House of Dynamite</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWell done movie that shows the dangers and insanity of nuclear war.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Movies I Found Decent</h2>\n<p><media-box title=\"Despicable Me\" link=\"https://www.imdb.com/title/tt1323594/\" image=\"https://i.postimg.cc/3Nd7nMdg/despicable-me.jpg\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/3Nd7nMdg/despicable-me.jpg\" alt=\"Despicable Me\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt1323594/\">Despicable Me</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nCute and enjoyable</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Trek: Section 31\" link=\"https://www.imdb.com/title/tt9603060/\" image=\"https://i.postimg.cc/qqgNrKmd/section-31.jpg\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/qqgNrKmd/section-31.jpg\" alt=\"Star Trek: Section 31\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt9603060/\">Star Trek: Section 31</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this as a sci-fi action movie, but feel it missed the mark as a Star Trek movie. Even still, Michelle Yeoh did a fantastic job as Georgiou.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Wars Episode I: The Phantom Menace\" link=\"https://www.imdb.com/title/tt0120915/\" image=\"https://i.postimg.cc/dVVKndSW/star-wars-1.jpg\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/dVVKndSW/star-wars-1.jpg\" alt=\"Star Wars Episode I: The Phantom Menace\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0120915/\">Star Wars Episode I: The Phantom Menace</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nStill the weakest of all the movies, but not as deserving of all the hate it gets in my opinion. The lightsaber duel choreography is one of the best in Star Wars.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Wars: The Clone Wars\" link=\"https://www.imdb.com/title/tt1185834/\" image=\"https://i.postimg.cc/hvtxwKZd/star-wars-clone-wars.jpg\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/hvtxwKZd/star-wars-clone-wars.jpg\" alt=\"Star Wars: The Clone Wars\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt1185834/\">Star Wars: The Clone Wars</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI wish I had known to watch this prior to the TV series. It introduced several of the characters we grow to love in the TV series. The story itself felt like it dragged on a bit longer than it needed to.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"A Walk Among the Tombstones\" link=\"https://www.imdb.com/title/tt0365907/\" image=\"https://i.postimg.cc/v89TrKg9/walk-among-the-tombstones.jpg\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/v89TrKg9/walk-among-the-tombstones.jpg\" alt=\"A Walk Among the Tombstones\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0365907/\">A Walk Among the Tombstones</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAn enjoyable detective-style thriller. Liam Neeson played the detective well.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Thursday Murder Club\" link=\"https://www.imdb.com/title/tt12001534/\" image=\"https://i.postimg.cc/C51mg2n6/thursday-murder-club.jpg\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/C51mg2n6/thursday-murder-club.jpg\" alt=\"The Thursday Murder Club\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt12001534/\">The Thursday Murder Club</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis wasn't bad. It was captivating and Brosnan, Mirren, and Kingsley were enjoyable in their roles.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt6710474/\">Everything Everywhere All At Once</a></li>\n<li><a href=\"https://www.imdb.com/title/tt30253473/\">Materialists</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-07T13:42:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/default-apps-for-2026/",
      "url": "https://kpwags.com/posts/2026/default-apps-for-2026/",
      "title": "Default Apps for 2026",
      "content_html": "\n\t\t<p>I listed the apps I use <a href=\"https://kpwags.com/posts/2025/01/08/default-apps-for-2025/\">last year</a>. I figured I'd update it with my current setup as a few things have changed.</p>\n<p>📨 <strong>Mail Client:</strong> <a href=\"https://www.thunderbird.net/en-US/\">Thunderbird</a></p>\n<p>📮 <strong>Mail Server:</strong> <a href=\"http://fastmail.com/\">FastMail</a> &amp; <a href=\"https://mail.google.com/\">Gmail</a></p>\n<p>📝 <strong>Notes:</strong> Mixture of <a href=\"https://ia.net/writer\">iA Writer</a> &amp; <a href=\"https://obsidian.md/\">Obsidian</a></p>\n<p>✅ <strong>To-Do:</strong> <a href=\"https://www.todoist.com/\">Todoist</a></p>\n<p>📷 <strong>Photo Shooting:</strong> Mostly my iPhone 14 Pro, but I occasionally will use my Canon 60D or my Canon G1X</p>\n<p>🎨 <strong>Photo Editing:</strong> <a href=\"https://www.on1.com/products/photo-raw/\">ON1 Photo Raw</a></p>\n<p>📆 <strong>Calendar:</strong> Google Calendar for family, FastMail Calendar for personal</p>\n<p>📁 <strong>Cloud File Storage:</strong> <a href=\"http://dropbox.com/\">Dropbox</a> mostly</p>\n<p>📖 <strong>RSS:</strong> <a href=\"https://feedbin.com/\">Feedbin</a> with <a href=\"https://www.reederapp.com/\">Reeder</a></p>\n<p>🙍🏻‍♂️ <strong>Contacts:</strong> MacOS/iOS Contacts</p>\n<p>🌐 <strong>Browser:</strong> <a href=\"https://librewolf.net/\">LibreWolf</a></p>\n<p>💬 <strong>Chat:</strong> Apple Messages</p>\n<p>🔖 <strong>Bookmarks:</strong> <a href=\"https://raindrop.io/\">Raindrop</a></p>\n<p>📑 <strong>Read It Later:</strong> <a href=\"https://www.instapaper.com/\">Instapaper</a></p>\n<p>📜 <strong>Word Processing:</strong> <a href=\"https://www.libreoffice.org/\">LibreOffice Writer</a></p>\n<p>📈 <strong>Spreadsheets:</strong> <a href=\"https://www.libreoffice.org/\">LibreOffice Calc</a></p>\n<p>📊 <strong>Presentations:</strong> Don’t really do these, but would use <a href=\"https://www.libreoffice.org/\">LibreOffice Impress</a></p>\n<p>🛒 <strong>Shopping Lists:</strong> <a href=\"https://www.todoist.com/\">Todoist</a></p>\n<p>🍴 <strong>Meal Planning:</strong> Google Calendar &amp; <a href=\"https://macrofactorapp.com/\">MacroFactor</a></p>\n<p>💰 <strong>Budgeting and Personal Finance:</strong> Shared Google Sheets</p>\n<p>📰 <strong>News:</strong> RSS</p>\n<p>🎵 <strong>Music:</strong> <a href=\"https://music.apple.com/us/browse\">Apple Music</a> &amp; <a href=\"https://brushedtype.co/doppler/\">Doppler</a></p>\n<p>🎤 <strong>Podcasts:</strong> <a href=\"https://pocketcasts.com/\">PocketCasts</a></p>\n<p>🔐 <strong>Password Management:</strong> <a href=\"https://1password.com/\">1Password</a></p>\n<p>🧑‍💻 <strong>Code Editor:</strong> <a href=\"https://vscodium.com/\">VSCodium</a>, <a href=\"https://www.jetbrains.com/rider/\">Rider</a> &amp; <a href=\"https://www.sublimetext.com/\">Sublime Text</a></p>\n<p>✈️ <strong>VPN:</strong> None at the moment</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-07T13:37:39Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/tv-i-watched-in-2025/",
      "url": "https://kpwags.com/posts/2026/tv-i-watched-in-2025/",
      "title": "TV I Watched in 2025",
      "content_html": "\n\t\t<p>It was another year of cuddles on the couch in the evening watching TV.</p>\n<h2>My Favorites</h2>\n<p><media-box title=\"Abbott Elementary\" image=\"https://i.postimg.cc/XNymgqnL/abbott-elementary.jpg\" link=\"https://www.imdb.com/title/tt14218830/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/XNymgqnL/abbott-elementary.jpg\" alt=\"Abbott Elementary\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nWe binged through this and are now up to date on this. Full of laughs and feel-good stories.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Good Eats\" image=\"https://i.postimg.cc/jj33JDQr/goodeats.jpg\" link=\"https://www.imdb.com/title/tt0344651/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/jj33JDQr/goodeats.jpg\" alt=\"Good Eats\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nAs someone who enjoys cooking, this was a fun show going over the science of things combined with some good recipes.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Trek: Strange New Worlds\" image=\"https://i.postimg.cc/d3c9bpTK/strangenewworlds.jpg\" link=\"https://www.imdb.com/title/tt12327578/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/d3c9bpTK/strangenewworlds.jpg\" alt=\"Star Trek: Strange New Worlds\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt12327578/\">Star Trek: Strange New Worlds</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nMore good Star Trek stories in season 3 with a good cast of characters.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Last of Us\" image=\"https://i.postimg.cc/J4NHSJqC/the-last-of-us.jpg\" link=\"https://www.imdb.com/title/tt3581920/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/J4NHSJqC/the-last-of-us.jpg\" alt=\"The Last of Us\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt3581920/\">The Last of Us</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nWe watched season 2 and it did a good job of following the game.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Succession\" image=\"https://i.postimg.cc/wTGDgVYs/succession.jpg\" link=\"https://www.imdb.com/title/tt7660850/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/wTGDgVYs/succession.jpg\" alt=\"Succession\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt7660850/\">Succession</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWe started binging this towards the end of the year. I like the story so far and am curious how it ends.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Andor\" image=\"https://i.postimg.cc/50JfGYmG/andor.jpg\" link=\"https://www.imdb.com/title/tt9253284/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/50JfGYmG/andor.jpg\" alt=\"Andor\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt9253284/\">Andor</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nThis whole series was fantastic. It told a great story and unfortunately holds a few too many parallels to today.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"It's Always Sunny in Philadelphia\" image=\"https://i.postimg.cc/yddjh04w/always-sunny.jpg\" link=\"https://www.imdb.com/title/tt0472954/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/yddjh04w/always-sunny.jpg\" alt=\"It's Always Sunny in Philadelphia\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\n17 seasons later, this is still fantastc and full of laughs.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Wars: The Clone Wars\" image=\"https://i.postimg.cc/bJgLRgsK/star-wars-clone-wars.jpg\" link=\"https://www.imdb.com/title/tt0458290/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/bJgLRgsK/star-wars-clone-wars.jpg\" alt=\"Star Wars: The Clone Wars\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0458290/\">Star Wars: The Clone Wars</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWe binged through this. I wasn't sure how it was going to be, but I liked the depth it brought to both the lore and the characters.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Everything Else</h2>\n<p><media-box title=\"Elsbeth\" image=\"https://i.postimg.cc/sg4Dv2Mx/ellsbeth.jpg\" link=\"https://www.imdb.com/title/tt26591110/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/sg4Dv2Mx/ellsbeth.jpg\" alt=\"Elsbeth\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWe got through season 2. Good stories with a good cast of characters.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Only Murders in the Building\" image=\"https://i.postimg.cc/2ypsjtLd/only-murderers-in-the-building.jpg\" link=\"https://www.imdb.com/title/tt11691774/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/2ypsjtLd/only-murderers-in-the-building.jpg\" alt=\"Only Murders in the Building\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt11691774/\">Only Murders in the Building</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nSeason 5 continued with another interesting storyline with some good laughs.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Mythic Quest\" image=\"https://i.postimg.cc/x8N55L4F/mythic-quest.jpg\" link=\"https://www.imdb.com/title/tt8879940/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/x8N55L4F/mythic-quest.jpg\" alt=\"Mythic Quest\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt8879940/\">Mythic Quest</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWe watched the final season. We were a little disappointed. It had its good parts, but meh.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Oklahoma City Bombing: One Day in America\" image=\"https://i.postimg.cc/gjWdWsNX/ok-city-bombing-one-day-in-america.jpg\" link=\"https://www.imdb.com/title/tt36415832/\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/gjWdWsNX/ok-city-bombing-one-day-in-america.jpg\" alt=\"Oklahoma City Bombing: One Day in America\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt36415832/\">Oklahoma City Bombing: One Day in America</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI remember this happening when I was in elementary school. I found the documentary interesting, but lacking something.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Station Eleven\" image=\"https://i.postimg.cc/0y3DtHbc/station-eleven.jpg\" link=\"https://www.imdb.com/title/tt10574236/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/0y3DtHbc/station-eleven.jpg\" alt=\"Station Eleven\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt10574236/\">Station Eleven</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI might have to rewatch this. I watched it with so many breaks I think I missed pieces. Will probably have to re-read the novel, though I know there are differences.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-05T20:54:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/154/",
      "url": "https://kpwags.com/reading-log/154/",
      "title": "Reading Log - January 5, 2026 (#154)",
      "content_html": "\n\t\t<p>This week it's explaining the benefits of taking advantage of HTML for accessbility reasons, the humble URL, CSS strategies, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/explaining-the-accessible-benefits-of-using-semantic-html-elements/\">Explaining the Accessible Benefits of Using Semantic HTML Elements</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://alfy.blog/2025/10/31/your-url-is-your-state.html\">Your URL Is Your State</a> - <em>Ahmad Alfy</em></li>\n<li><a href=\"https://stuffandnonsense.co.uk/blog/my-css-layout-strategy\">My CSS layout strategy</a> - <em>Andy Clarke</em></li>\n<li><a href=\"https://github.blog/developer-skills/programming-languages-and-frameworks/typescripts-rise-in-the-ai-era-insights-from-lead-architect-anders-hejlsberg/\">TypeScript’s rise in the AI era: Insights from Lead Architect, Anders Hejlsberg</a> - <em>Aaron Winston</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://waspdev.com/articles/2025-11-04/some-software-bloat-is-ok\">Some software bloat is OK</a> - <em>Suren Enfiajyan</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://blog.mozilla.org/en/firefox/fingerprinting-protections/\">Firefox expands fingerprint protections: advancing towards a more private web</a> - <em>Tom Ritter</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://hidde.blog/filtered-open-web/\">Who wins when we filter the open web through an opaque system?</a> - <em>Hidde de Vries</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://www.economist.com/science-and-technology/2025/12/26/what-is-the-best-way-to-train-for-a-marathon\">What is the best way to train for a marathon?</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://julieyack.com/2025/11/17/in-defense-of-single-tasking/\">In defense of single-tasking</a> - <em>Julie Yack</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Grayscale - Painting Over You (feat. Cassadee Pope)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/D67D6KsAL_M\" title=\"Grayscale - Painting Over You (feat. Cassadee Pope)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-05T20:52:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/december-2025-check-in/",
      "url": "https://kpwags.com/posts/2026/december-2025-check-in/",
      "title": "December 2025 Check-In",
      "content_html": "\n\t\t<p>Whelp, the holidays, and 2025 is over. The month went by quickly, the holidays weren't too stressful, and I feel a little charged going into 2026.</p>\n<h2>Holidays</h2>\n<p>Holidays weren't that bad this year. I was able to get all my shopping done by mid-month so the last 1-2 weeks felt mostly normal.</p>\n<p>I put Christmas lights up on the house again this year. I haven't always felt like doing it, so some years they're up, and others they aren't. But I was feeling a little festive so I decided to go ahead and spend an afternoon up on a ladder. I tested the lights and they were all working. I put them up...and the final third or so of the main strand <a href=\"https://kpwags.com/posts/2025/12/07/christmas-light-problems/\">decided to stop working</a>. I never was able to get them working, I ended up just doubling up with a spare strand for that third of the house, but it's so damned frustrating. I'll probably play around with a voltage detector briefly, but I don't know how much further I'm willing to go it that doesn't identify the bad bulb.</p>\n<p>As for Christmas itself, it was a kind of hectic day. We spent the morning with my wife's side of the family and the afternoon and dinner with my parents and siblings. After the shuttling around and drive home after dinner, it was nice to be able to put my feet up and read for a bit before bed.</p>\n<h2>Far Cry 5</h2>\n<p>Prior to Far Cry 5, the only Far Cry game I had played was the original, and it was so long ago, I barely remember it. Far Cry 5 was a lot of fun, I enjoyed the game play, and while some of it felt repetitive, it wasn't overly so. The designers and devs did a good job mixing things up just enough. I unfortunately had come across a hint of a spoiler so the ending wasn't as surprising as it could've been. I would recommend the game, you can probably get it relatively cheap since it's almost 8 years old.</p>\n<p>I then picked up Far Cry New Dawn since it's a direct sequel and have been enjoying that one as well.</p>\n<h2>End of the I-League Season</h2>\n<p>The Instructional League (I-League) I play goalie in ended just before Christmas. It was mostly a fun season. We finished 3-6-1 so from a wins perspective, it could've been better, but they were mostly close games and the league is more about learning to play hockey anyway. The next season will start up mid-February.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>6</span> runs - <span>20.59</span> miles</li>\n<li><strong>Walking:</strong> <span>30</span> walks - <span>26.18</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>7</span> sessions - <span>95,180</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/food-for-thought-essays-and-ruminations-alton-brown/21530474\">Food for Thought: Essays and Ruminations</a> by Alton Brown</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/lords-of-finance-the-bankers-who-broke-the-world-liaquat-ahamed/15278774?ean=9780143116806\">Lords of Finance: The Bankers Who Broke the World</a> by Liaquat Ahamed</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/every-day-is-sunday-how-jerry-jones-robert-kraft-and-roger-goodell-turned-the-nfl-into-a-cultural-economic-juggernaut-ken-belson/acf6b3176c03e34a\">Every Day is Sunday: How Jerry Jones, Robert Kraft, and Roger Goodell Turned the NFL Into a Cultural &amp; Economic Juggernaut</a> by Ken Belson</li>\n<li>Started <a href=\"https://bookshop.org/p/books/enshittification-why-everything-suddenly-got-worse-and-what-to-do-about-it-cory-doctorow/d3f8483b158906ce\">Enshittification: Why Everything Suddenly Got Worse and What to Do About It</a> by Cory Doctorow</li>\n<li>Started <a href=\"https://bookshop.org/p/books/homestand-small-town-baseball-and-the-fight-for-the-soul-of-america-will-bardenwerper/7f956b9eb45b108b\">Homestand: Small Town Baseball and the Fight for the Soul of America</a> by Will Bardenwerper</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/149/\">December 1 (#149)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/150/\">December 8 (#150)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/151/\">December 15 (#151)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/152/\">December 22 (#152)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/153/\">December 29 (#153)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/77/\">November 30 - December 6 (#77)</a></li>\n<li><a href=\"https://kpwags.com/week-note/78/\">December 7 - 13 (#78)</a></li>\n<li><a href=\"https://kpwags.com/week-note/79/\">December 14 - 20 (#79)</a></li>\n<li><a href=\"https://kpwags.com/week-note/80/\">December 21 - 27 (#80)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Ranted about <a href=\"https://kpwags.com/posts/2025/12/03/constant-device-upgrades-the-economy-and-i-just-cant-anymore/\">the push for constant device upgrades</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/12/05/on-cooking-experimentation-and-expanding-my-recipe-collection/\">trying new things in the kitchen</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/12/07/christmas-light-problems/\">rebuilding my photography site</a></li>\n<li>Complained <a href=\"https://kpwags.com/posts/2025/12/07/christmas-light-problems/\">about Christmas lights</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/12/14/installing-net-10-on-linux-mint-222/\">how I fixed my .NET 10 issues on Linux Mint</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/12/17/random-thoughts-on-sports-gambling/\">my thoughts on sports gambling</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/12/18/growing-up-on-the-internet/\">my introduction and journey on the internet</a></li>\n<li>Shared a <a href=\"https://kpwags.com/posts/2025/12/19/how-we-survive-dives-into-esg/\">podcast season on ESG</a></li>\n<li>Thought about <a href=\"https://kpwags.com/posts/2025/12/21/getting-ready-for-my-2025-media-consumption-pages/\">automating some of my yearly summary posts</a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2025/12/22/staying-in-the-groove/\">sticking with the gym</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/12/22/little-protests/\">little protests and choosing to put my money where my values are</a></li>\n<li>Wrote about how <a href=\"https://kpwags.com/posts/2025/12/23/linux-as-a-daily-driver/\">I'm using Linux as my primary computer</a></li>\n<li>Wished people <a href=\"https://kpwags.com/posts/2025/12/25/merry-christmas/\">a Merry Christmas</a></li>\n<li>Thought about <a href=\"https://kpwags.com/posts/2025/12/27/tracking-my-music-purchases/\">tracking my music purchases</a></li>\n<li>Wrote about my <a href=\"https://kpwags.com/posts/2025/12/28/looking-for-a-good-photo-management-app-for-linux/\">search for photo management options on Linux</a></li>\n<li>Wrote a bit on <a href=\"https://kpwags.com/posts/2025/12/28/a-house-of-dynamite//\">the movie <em>A House of Dynamite</em></a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2025/12/29/revisiting-software-subscriptions/\">software subscriptions</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Completed <a href=\"https://www.ubisoft.com/en-us/game/far-cry/far-cry-5\">Far Cry 5</a></li>\n<li>Started <a href=\"https://www.ubisoft.com/en-us/game/far-cry/new-dawn\">Far Cry New Dawn</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt7660850/\">Succession</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt14364480/\">Wake Up Dead Man</a></li>\n<li><a href=\"https://www.imdb.com/title/tt32376165\">A House of Dynamite</a></li>\n<li><a href=\"https://www.imdb.com/title/tt12001534/\">The Thursday Murder Club</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-04T14:29:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/81/",
      "url": "https://kpwags.com/week-note/81/",
      "title": "Week Notes for December 28 - January 3  (#81)",
      "content_html": "\n\t\t<p>A new year, <s>a new</s> same old me.</p>\n<h2>Writing</h2>\n<p>I set my goal for 2026 to write 350,000 words. I think it's doable, but I didn't just start on January 1st. I've been trying to write more these last 2 weeks of 2025. I wrote some blog posts, wrote more on my fantasy story, and tried to put more words to paper in general.</p>\n<h2>Celebrating 15 Years</h2>\n<p>My wife and I celebrated 15 years together this week. It was New Year's 2011 when we first started dating and now I can't begin to imagine my life without her.</p>\n<h2>Far Cry New Dawn</h2>\n<p>I really enjoyed Far Cry 5. New Dawn, a sequel has drawn me in as well. The game play is fun and some of the tweaks they added from Far Cry 5 seem perfect. I've been enjoying it and would recommend it, though I would highly suggest you play Far Cry 5 first.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-04T14:28:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/looking-ahead-at-2026/",
      "url": "https://kpwags.com/posts/2026/looking-ahead-at-2026/",
      "title": "Looking Ahead at 2026",
      "content_html": "\n\t\t<p>For the last several years, I've written these posts setting some aspirations and goals for the upcoming year. I often set lofty goals for myself. Sometimes I complete them, other times I do not. Still though, I think there's something worthwhile in the exercise of targeting things you'd like to aspire to complete.</p>\n<p>2025 was a tumultuous year. There was a lot going on and I found it easy to get myself distracted by various goings on in the world. There were days where I found it hard to focus. I think that's one thing I want to focus (get it?) on this year.</p>\n<p>Last year, I started using Raycast's focus sessions. I found it to be incredibly helpful to keep myself focused on writing. It was able to block all social apps and websites on my MacBook when I had my mind wander. I've found the <a href=\"https://addons.mozilla.org/en-US/firefox/addon/leechblock-ng/\">LeechBlock</a> browser plugin which I'm hoping will help on Linux. I don't really have many apps on Linux that are likely to distract me outside the web browser. Obviously some times its good to let one's mind wander, but all too often I was letting myself get distracted last year when I didn't want to.</p>\n<p>The horrors of 2025 and the likelihood that this is going to continue into the indefinite future also makes me want to think more about all that I am thankful for. It an be easy to get wrapped up in all the awful stuff going on in the world that one can forget about all the blessings they have. I'm no different. I want to try some mindfulness exercises to remember the people and things I am grateful for this year. If nothing else, maybe it can brink some balance to my mental state.</p>\n<h2>Aspirations</h2>\n<p>To continue with the tradition of previous years, I'm going to set five aspirations I'd like to complete this year. I think they're all very much doable.</p>\n<h3>Write 350,000 Words</h3>\n<p>Despite shelving my one novel/novella from the last couple years, I think I'm doing better with writing on a regular basis. I want to target 350,000 words this year. It doesn't matter whether I'm writing a story, a blog post, or anything else, any words count. It ends up being a little less than 1,000 words a day which I think is doable.</p>\n<h3>Complete 12 Video Games</h3>\n<p>I have a backlog of games I want to play. I think I'm going to try this again and target a game a month.</p>\n<h3>Read 52 Books</h3>\n<p>I blew past even this number in 2025, but I would like to keep this going. Targeting a book a week seems reasonable. I generally try to read for about an hour or so every night.</p>\n<h3>Run 300 Miles and Bike 300 Miles</h3>\n<p>I've been wanting to get back into bike riding for a while now. Maybe this is finally the year I get some bike rides in. As for running, 300 miles is a little bit on the low side for my running totals, but with some bike rides mixed in, should be attainable.</p>\n<h3>Build Out My Photography Site</h3>\n<p>This has been <a href=\"https://kpwags.com/posts/2025/12/06/rebuilding-my-photography-site/\">on my mind for a little while now</a>. I had taken it down a while back and now it's time to bring it back.</p>\n<h3>Everything Else</h3>\n<p>Other things I would like to continue to do are: continue playing the guitar, doodling (I've been trying to do a doodle a day in Procreate on my iPad), be better about my diet, and try to make sure I stay in touch or get back in touch with my friends.</p>\n<h2>Here's to 206</h2>\n<p>Here's to a good 2026. You can view my progress <a href=\"https://kpwags.com/progress/2026/\">here</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-02T14:29:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2026/2025-retrospective/",
      "url": "https://kpwags.com/posts/2026/2025-retrospective/",
      "title": "2025 Retrospective",
      "content_html": "\n\t\t<p>2025 was one hell of a year.</p>\n<h2>Tess</h2>\n<p>In mid-January, my wife an I adopted a 14 month old puppy named Tess. I say puppy loosely, because she still is a puppy, but doesn't look like it. She is absolutely adorable and has the sweetest temperament.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/f4tYQjhhp_-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/f4tYQjhhp_-1200.gif 1200w\" /><img alt=\"a white and tan dog lying on a bed in front of a christmas tree\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/f4tYQjhhp_-1200.jpeg\" width=\"1200\" height=\"1600\" /></picture></p>\n<p>It was an adjustment for both us and her. It's been close to four years since we last had a dog, and Tess has a lot of puppy energy to burn. It has gotten both my wife and I up and active a little more. Barring bad weather, we end up taking her for 2-3 walks a day. She loves the outdoors and sometimes seems like a bloodhound with how much she loves sniffing around.</p>\n<p>We were thankful we had a fenced in backyard for her to run around in, until we found out the hard way that she figured out she could jump the fence with a running start. That was a fun midnight adventure getting her back. We ended up extending the height of the fence to 6 feet so now she thankfully is confined, but still has space to run around. My father-in-law was awesome in helping us extend the height of the fence with a minimal price tag all things considered.</p>\n<p>We've fallen in love with her and are glad to have welcomed her into our family.</p>\n<h2>Writing</h2>\n<p>I've written more this year than I have in the past. My goal was to write 100 blog posts this year and I just passed it with 101 posts for 2025. Not bad. I think I want to try to keep a Tuesday and Thursday posting schedule for 2026. I figure I'm not going to get a post out every Tuesday and Thursday, but it's a reasonable target.</p>\n<p>As for longer form writing. I took a pause from the novella or novel I was writing for the last 2 years. I wasn't really liking where it was going and didn't know how to get it back to a place that I liked. I did build an outline for a new fantasy novel that I'm going to explore.</p>\n<p>Writing is hard.</p>\n<h2>Guitar</h2>\n<p>I've been trying to play the guitar daily. I don't always succeed, but I think I've been getting better. I still struggle with barre chords, but I've added more songs to my repertoire. I feel kind of competent, though I know there's still a ways for me to go.</p>\n<p>I've tried playing my electric some, but I think I need to find a repair shop. The sound cuts out depending on where the volume knob is. Might be a bad connection. It could also be something I look to YouTube for to see if there's a fix I can implement on my own.</p>\n<h2>Music</h2>\n<p>One thing I've been trying to do more of is to purchase music rather than just streaming. I've made a note to pay attention for Bandcamp Fridays to support artists even more. I haven't gotten as many vinyl records this year as I have in the past, but my digital collection is growing. My iPhone storage is starting to feel a little tight since I've been transferring the files to have on the device itself. And I have a 256GB iPhone.</p>\n<p>I do wish vinyl records more often came with digital download cards like they used to. I love the sound of vinyl, but it'd be nice to have the albums to go as well.</p>\n<h2>Politics</h2>\n<p>Sigh. I wish I didn't even have to think about this, but 2025 had other plans for me. It's been disheartening to see the country dive into fascism &amp; authoritarianism. It's been equally as hard to see the all the racism and bigotry that has always been simmering just beneath the surface rise to the forefront and be celebrated by this administration.</p>\n<p>It's been incredibly disappointing that the Democrats not showing up. America needs a true opposition party to fight back against the fascist GOP and instead all we're getting are strongly worded letters. Very few of them seem to recognize the dangerous times we're living through and how we're very much on the edge of knife.</p>\n<p>I'm just hoping America can last long enough to begin to undo all the damage Trump and his cronies are inflicting upon this country. It's going to take at least a generation. All the horrors, kleptocracy, blatant corruption, and more. I'd say maybe 2026 will be better, but I'd be lying.</p>\n<h2>Work</h2>\n<p>I've had a pretty good year at work. The Blazor project I was working on for almost all of 2024 finally went live in April. The project had plenty of challenges arise throughout its entire process, but I'm happy with how it turned out.</p>\n<p>I ended up being brought onto another team and for the last quarter of the year or so. It had it's learning curve with both the business requirements and the code.</p>\n<p>I'm looking forward to see what challenges await me in 2026. I know there might be some rewrites coming down the pike.</p>\n<h2>Aspirations</h2>\n<h3>Complete 12 Video Games</h3>\n<p>I've ended up spending a lot of evenings on the guitar, writing, and working on side projects that this sort of took a back seat most of the year. I spent most of the year playing Expedition 33 with a lot of stoppages and pauses. It caused me to miss some of the story points unfortunately so I plan on re-playing it eventually. My backlog is fairly large so I'm not sure exactly when that will end up being.</p>\n<p>I did play more often in November and December, completing Jedi Survivor and Far Cry 5. I also started Far Cry New Dawn since I was in the mood to continue the story. Maybe next year.</p>\n<h3>Read 45 Books</h3>\n<p>I blew through this goal. Between physical books, and having some audio books for walking Tess and exercising, I ended up reading 66 books this year.</p>\n<h3>Write 100 Blog Posts</h3>\n<p>I managed to just hit this goal, writing 101 blog posts this year.</p>\n<h3>Finish Sunroom</h3>\n<p>I did buy primer and found out how I'm going to handle the baseboard heaters, so there's that. But that's about the extent of what I did for the sunroom. So...not much.</p>\n<h3>Build USS Enterprise Refit Model</h3>\n<p>Nope, didn't even begin this.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2026-01-01T15:46:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/29/revisiting-software-subscriptions/",
      "url": "https://kpwags.com/posts/2025/12/29/revisiting-software-subscriptions/",
      "title": "Revisiting Software Subscriptions",
      "content_html": "\n\t\t<p>Recently I finally got around to cancelling my subscription to Microsoft's Office 365. I had switched to LibreOffice and determined that there was no reason to keep Microsoft Office around anymore. It's led me to look into what software I subscribe to.</p>\n<p>I wrote <a href=\"https://kpwags.com/posts/2025/12/28/looking-for-a-good-photo-management-app-for-linux/\">yesterday about how I'm looking for a good photography app for Linux</a>. It's my second search for a photography app after I cancelled my Adobe subscription. I had subscribed to Adobe's photography package which was Lightroom and Photoshop. For only $10 a month, it was a pretty good deal. The problem I started to realize after was that it really locked me in.</p>\n<p>Lightroom is a fantastic piece of software. For managing my photography library, it was top notch. I had bought Lightroom 5 and 6. I tried to go back to Lightroom 6, but it kept crashing every time I opened it and all my web searching and troubleshooting came up empty. I would've gladly paid for a standalone license but Adobe no longer offers that option. I sucked it up and cancelled my subscription and went searching for an alternative having decided that I don't want to be stuck with recurring payments to manage my photos.</p>\n<p>Office 365 feels a <em>little</em> better in that there's compatibility between Microsoft Office, LibreOffice, Google Drive, iWork and others. It's easy enough to just take your files over to whichever platform you want. Still not good to have to pay monthly to use the software, but easier to migrate to an alternative. With Lightroom, I still had my photo files of course, but the migration was nowhere close to being the same or nearly as easy.</p>\n<p>I actually like what JetBrains does. I use JetBrains Rider for my C#/.NET development. It's a fantastic development environment. I pay yearly for it, but if at any point I decide to cancel my subscription, <a href=\"https://sales.jetbrains.com/hc/en-gb/articles/207240845-What-is-a-perpetual-fallback-license-and-how-do-I-use-one\">I can still use the version I have</a>. I just won't get any new updates. I think this is a reasonable compromise. I can still use the application, I just don't get any improvements or new features they add.</p>\n<p>I'm going to be spending the rest of the year looking at what applications I use that require a subscription and really think about whether I believe it's still worth paying for or if there's a good alternative I can switch to.</p>\n<p>At the end of the day, I have no issue whatsoever buying software. This isn't me looking for anything for free. What I want is to be able to buy software (or really a license I guess) and just use it without having to subscribe to continue to use it. If your software is good, I'll gladly pay for it and continue to pay for the updates.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-29T14:48:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/153/",
      "url": "https://kpwags.com/reading-log/153/",
      "title": "Reading Log - December 29, 2025 (#153)",
      "content_html": "\n\t\t<p>Some thoughts on Mozilla's latest AI choices, Reddit's dangerous lawsuit, one person's thoughts on switching back to cassettes, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/pure-css-tabs-with-details-grid-and-subgrid/\">Pure CSS Tabs With Details, Grid, and Subgrid</a> - <em>Silvestar Bistrović</em></li>\n<li><a href=\"https://www.tempertemper.net/blog/page-headings-dont-belong-in-the-header\">Page headings don’t belong in the header</a> - <em>Martin Underhill</em></li>\n<li><a href=\"https://gomakethings.com/just-use-a-button/\">Just use a button</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://allthingssmitty.com/2025/10/20/rethinking-async-loops-in-javascript/\">Rethinking async loops in JavaScript</a> - <em>Matt Smith</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://hvpandya.com/fast\">Fast is a Moat</a> - <em>Hardik Pandya</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/10/24/reddits-ai-scraping-lawsuit-is-an-attack-on-the-open-internet/\">Reddit’s ‘AI Scraping’ Lawsuit Is An Attack On The Open Internet</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/flock-exposed-its-ai-powered-cameras-to-the-internet-we-tracked-ourselves/\">Flock Exposed Its AI-Powered Cameras to the Internet. We Tracked Ourselves</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://hidde.blog/mozilla-ai-kill-switch/\">Dear Mozilla, I don't want an “Al kill switch”, I want a more responsible approach for all</a> - <em>Hidde de Vries</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/adam-silvers-job-is-about-to-get-so-much-harder\">Adam Silver's Job Is About To Get So Much Harder</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/12/19/nx-s1-5649814/ai-data-center-electricity-bill\">Planet Money: What AI data centers are doing to your electric bill</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.404media.co/why-i-quit-streaming-and-got-back-into-cassettes/\">Why I Quit Streaming And Got Back Into Cassettes</a> - <em>Janus Rose</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Hit the Lights - Three Oh Nine</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_XlLd9RSHiA\" title=\"Hit the Lights - Three Oh Nine\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-29T14:39:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/28/a-house-of-dynamite/",
      "url": "https://kpwags.com/posts/2025/12/28/a-house-of-dynamite/",
      "title": "A House of Dynamite",
      "content_html": "\n\t\t<p>I just watched <a href=\"https://www.imdb.com/title/tt32376165\">A House of Dynamite</a> and oh man does it show the insanity of nuclear weapons.</p>\n<p>I had read <a href=\"https://bookshop.org/p/books/nuclear-war-a-scenario-annie-jacobsen/20335598?ean=9780593476093\">Nuclear War: A Scenario</a> by Annie Jacobsen towards the end of last year. The book walked through what the US Government would handle a nuclear strike against us. It did a good job showing how hard it would be to keep a nuclear strike contained to just a strike rather than see it fan out into all out nuclear war. It's pretty scary stuff, especially in today's ever more uneasy world.</p>\n<p>The movie plays out in a similar manner to the book albeit on a higher level. It's a scary proposition and it really makes me wish nuclear weapons didn't exist.</p>\n<p><media-box title=\"A House of Dynamite\" image=\"https://i.postimg.cc/jCVkShCY/a-house-of-dynamite.jpg\" link=\"https://www.imdb.com/title/tt32376165\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/jCVkShCY/a-house-of-dynamite.jpg\" alt=\"A House of Dynamite\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt32376165\">A House of Dynamite</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWell done movie that shows the dangers and insanity of nuclear war.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-28T20:38:59Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/28/looking-for-a-good-photo-management-app-for-linux/",
      "url": "https://kpwags.com/posts/2025/12/28/looking-for-a-good-photo-management-app-for-linux/",
      "title": "Looking for a Good Photo Management App for Linux",
      "content_html": "\n\t\t<p>Now that I'm using <a href=\"https://kpwags.com/posts/2025/12/23/linux-as-a-daily-driver/\">Linux Mint as my daily driver</a>, I realize that I don't have an application lined up to use to handle organizing and processing my photos. This is going to be needed for my photography site.</p>\n<p>For the longest time I was an Adobe LightRoom user. I actually really liked the software. But then I got tired of paying Adobe for the privilege of using it. I didn't like the idea of having to pay them monthly to use a piece of software knowing that as soon as I cancelled my subscription, there goes my ability to go through my photos.</p>\n<p>I had bought a license for LightRoom 6, but I could not get it to run on my M1 MacBook Pro. For some reason it kept crashing when it opened. It was who knows how old and while it worked just fine back in the day, I didn't want to spend the time and the hassle keeping it running without crashing, so I opted to move on. I tried <a href=\"https://www.darktable.org/\">Darktable</a>, it looked promising, but felt really sluggish. I ended up settling on <a href=\"https://www.on1.com/\">ON1</a> and was having some success with that, but it's a MacOS app and doesn't run on Linux. I could stick with it, but it'd be nice to be able to have everything working and running on my Linux Mint box.</p>\n<p>So I'm now in the market for a new photo management app. My first target will again be Darktable. Maybe I'll have a better experience with it this time. But if anyone has any suggestions, please let me know.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-28T17:44:34Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/80/",
      "url": "https://kpwags.com/week-note/80/",
      "title": "Week Notes for December 21 - 27 (#80)",
      "content_html": "\n\t\t<p>It was a busy week with Christmas and all, but I'm glad the worst of the holidays are over.</p>\n<h2>Far Cry 5</h2>\n<p>I ended up completing <a href=\"https://www.ubisoft.com/en-us/game/far-cry/far-cry-5\">Far Cry 5</a>. I had heard hints of the ending, but was still a little surprised with how it ended. I ended up starting it's sequel, <a href=\"https://www.ubisoft.com/en-us/game/far-cry/new-dawn\">Far Cry New Dawn</a>. I enjoyed Far Cry 5 and am enjoying New Dawn so far.</p>\n<h2>Christmas</h2>\n<p>Christmas was mostly non-stop. Morning with the in-laws and then dinner with my family. I was so happy to be crashed out on the couch at the end of the day. It wasn't a bad day, just busy. I now have a much better appreciation for my parents when I was young.</p>\n<h2>Ice Storm</h2>\n<p>Friday night into Saturday we had a lot of freezing rain or sleet. I was kind of hoping for snow as it's easier to deal with. I'm now left with an icy driveway that will take a lot of smashing to clear. I'm hoping the above freezing weather will take care of it for me.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-28T16:29:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/apples-assault-on-standards/",
      "url": "https://kpwags.com/notes/apples-assault-on-standards/",
      "title": "Apple&#39;s Assault on Standards",
      "content_html": "\n\t\t<blockquote>\n<p>Apple has deftly used a false cloak of security and privacy to move the internet, and web in particular, toward enclosure and irrelevance. This post makes the case for why Apple should be considered a corrupted, and indeed incompetent, autocrat in our digital lives. It abuses a unique form of monopoly to extract rents, including on the last remnants of open ecosystems it tolerates.</p>\n<p>Worse, Apple's centralisation through the App Store entrenches the positions of peer big tech firms, harming the prospects of competitors in turn. Apple have been, over the course of many years, poisonous to internet standards and the moral commitments of that grand project.</p>\n</blockquote>\n<p>Sometimes apps are nice, but I'd still much rather see all the functionality browsers allow into iOS/iPadOS. Safari is holding it back.</p>\n<blockquote>\n<p>Developers are forced into the App Store by missing web capabilities, ensuring an advantage for Apple's proprietary ecosystem. This induces wealthy and influential users to default to the App Store for software, further damping the competitiveness of open platforms.</p>\n</blockquote>\n<p>Yup...PWAs are handicapped, instead of having one app for the web, now devs and companies need to develop the web app, an iPhone app, and an Android app.</p>\n<blockquote>\n<p>So long as competing vendors are forced into the App Store and required to use Apple's engine, Cupertino owes much more when it comes to completeness and quality. So long as Cupertino compels use of WebKit, the demand should be echoed back: <em>parity with browser features on other Operating Systems is the minimum bar</em>.</p>\n<p>Fundamentally, the web and internet community must stop accepting the premise that Apple should benefit from the protections and privileges of voluntary feature adoption while denying it to others.</p>\n</blockquote>\n<p>Just open up iOS to different browser engines already...sigh.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-27T15:32:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/27/tracking-my-music-purchases/",
      "url": "https://kpwags.com/posts/2025/12/27/tracking-my-music-purchases/",
      "title": "Tracking My Music Purchases",
      "content_html": "\n\t\t<p>I've mentioned before that I've been trying to <a href=\"https://kpwags.com/posts/2025/08/14/ownership/\">purchase more music</a> rather than relying on streaming services. Something I've started to wonder about is how my music purchases have changed over time.</p>\n<p>My music collection goes back to probably middle school. There's no way for me to know exactly when I bought my first cassette tape or CD. With my more recent additions, that's obviously a little different. I could certainly go through my email and look for the receipts, but even that doesn't grasp all of it as I don't have the receipts from the vinyl I got at record shops.</p>\n<p>Lucky for me, my <a href=\"https://kpwags.com/music/\">music page</a> is built off my <a href=\"https://codeberg.org/kpwags/wags-media-repository\">media repository</a>. This means that I can go into the code and <a href=\"https://codeberg.org/kpwags/wags-media-repository/issues/141\">add a field</a> in the database to start tracking when I purchased the album.</p>\n<p>I'll probably end up going through my Bandcamp purchases and see if I can backfill some of the data, but once integrated, it'll be nice to get some kind of visualization of what albums I bought when and how many albums I've bought per year.</p>\n<p>This is one of the reasons I love these little home-cooked apps. I built it to solve a problem I had, and can have it do whatever I need it or want it to. I build it for me. Anyone is welcome to download it or to fork it of course, but I have it working the way I want and will continue that.</p>\n<p>Little projects are fun.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-27T15:28:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/dear-mozilla-i-dont-want-an-al-kill-switch-i-want-a-more-responsible-approach-for-all/",
      "url": "https://kpwags.com/notes/dear-mozilla-i-dont-want-an-al-kill-switch-i-want-a-more-responsible-approach-for-all/",
      "title": "Dear Mozilla, I don&#39;t want an “Al kill switch”, I want a more responsible approach for all",
      "content_html": "\n\t\t<blockquote>\n<p>I understand the backlash Mozilla faced after announcing more AI in the browser, scepticism about the product direction is warranted for many reasons. At the same time, I see how some of the features could be useful, and that other big tech companies are less responsible about it. Mozilla tries to be responsible and my hope is for <strong>more of that</strong>, it's the reason I and many others choose Mozilla products.</p>\n<p>I hope Mozilla succeeds in their aim to do AI “right”, adhering to the <a href=\"https://www.mozilla.org/en-US/about/manifesto/details/\">manifesto</a>, and inspires others to do the same. It's very much needed too, as at this rate our industry is on the way to beat big tobacco and big oil in breaking things.</p>\n</blockquote>\n<p>I share this hope too, I just want this to be all opt-in rather than opt-out. I want Firefox to remain viable, but fully understand how this can erode trust very quickly.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-27T15:26:54Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/25/merry-christmas/",
      "url": "https://kpwags.com/posts/2025/12/25/merry-christmas/",
      "title": "Merry Christmas",
      "content_html": "\n\t\t<p>For all who celebrate, I hope you have a safe and Merry Christmas.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-25T14:40:41Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/23/linux-as-a-daily-driver/",
      "url": "https://kpwags.com/posts/2025/12/23/linux-as-a-daily-driver/",
      "title": "Linux as a Daily Driver",
      "content_html": "\n\t\t<p>I've been dual booting my desktop between Windows and Linux for a while. Despite this, more often than not I booted into Windows, primarily for gaming. It often didn't even matter though since I would still spend more time on my MacBook Pro as my primary machine. That hasn't been the case of late though. Enter Linux Mint.</p>\n<p>I'm not entirely sure when I installed Linux Mint 22.2 on my desktop. Based on some timestamps on files, I'd roughly guess maybe sometime in October? I can't say for certain, other than it's been several months. Performance-wise, I have no complaints. The machine and system are speedy and snappy. From a &quot;I want to get stuff done&quot; perspective, it's been mostly fine.</p>\n<h2>Speed Bumps Mostly</h2>\n<p>Most of the issues I've dealt with have been more like speed bumps. The first issue I ran into was getting Wine and World of Warcraft to play nice together. I remember having constant issues with it back in the mid-to-late 2000s and never getting it to work properly. After doing some reading, it looks like it had gotten a lot better, as has gaming on Linux as a whole. I still had some trouble getting Wine, Lutris and WoW up and running. I had given up on it for a while until I came back at it and with a little more troubleshooting, got it working. The only frustrating part (maybe?) is that I'm still not quite sure what I did differently before when it wasn't working. Oh well, it's installed and running, as is Steam and a few other games.</p>\n<p>The other issue I dealt with was getting .NET 10 running. I'm thinking that part of my issue was that I installed .NET 9 through Linux Mint's package manager which set up some environmental variables that conflicted with the updated way of installing the .NET SDK. I was able to get it working after a little troubleshooting, <a href=\"https://kpwags.com/posts/2025/12/14/installing-net-10-on-linux-mint-222/\">wrote about it</a>, and am now in good shape.</p>\n<h2>Smooth Sailing Otherwise</h2>\n<p>Outside of those two issues and speed bumps, I've been very happy with Linux Mint. I'm able to work on my side projects just fine. I have .NET, Node.js and NPM all running without issue. The primary applications I use all have Linux versions or good alternatives.</p>\n<p>I've now been using it far more often than my MacBook when I'm working at my desk. I'm definitely not in the market for a new laptop, but it's given me something to think about when the time comes.</p>\n<p>I still don't think it'll get wide adoption as Windows and MacOS tend to be more user-friendly for non-technical folks, but it's nice to see it come along as well as it has.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-23T13:47:30Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/22/staying-in-the-groove/",
      "url": "https://kpwags.com/posts/2025/12/22/staying-in-the-groove/",
      "title": "Staying in the Groove",
      "content_html": "\n\t\t<p>One of the things I've mentioned over the last month or two is that I've struggled to stay in the fitness groove, especially when it comes to lifting. Some of this was caused by getting sick, but other times it was me just not wanting to lift, probably because it would be a legs day. I didn't necessarily revert to being lazy, often times I would skip legs day for a run instead. But in the end, the result was the same, I got out of my rhythm.</p>\n<p>I'm one of the people who does best when I can get into a routine. Getting into a routine is incredibly helpful for me to help maintain both my focus and my motivation. Be it fitness, writing, or anything else, having a routine has been helpful to keep me zeroed into what I want to be accomplishing.</p>\n<p>During the pandemic, one of the things I appreciated about working from home and not having any out-of-the-house activities was that I could more easily get into a fitness routine. I would get up early, lift, work for the morning, go for a walk or a run over lunch, then work the afternoon. After work, I'd cook dinner and have the evening to focus on whatever I wanted to do.</p>\n<p>With the end of the pandemic and being vaccinated, I started playing hockey again. And while obviously that's my own choice, it did and is continuing to affect the routine I rather liked during the pandemic as the game times are all over the place, but often starting very late. And with the rush of adrenaline from the competition, well, there were times when I didn't end up going to bed until 1:00 am. Try getting up before or around 6:00 am after going to bed at one. I know, first world problem here.</p>\n<p>I got a new job at the end of 2020 and my work schedule has changed anyway, so the routine I was doing doesn't really apply anymore. But I'm hoping that I can use the holiday break to help jump-start myself back into a routine that keeps me going to the gym roughly every other day. The GZCLP program I use for strength training has me lifting every other day which I appreciate as I'm starting to get a bit older. My goal is to use the off-days for walks, runs, and maybe even some bike rides. I'll throw some actual rest days in there too as sometimes my body just needs a-sit-around-and-do-nothing day.</p>\n<p>Over the last 10 days, I've gotten 4 sessions in. It feels good to be lifting weights again. I've kept with the same program I was running back over the summer, just lowered the weights and restarted my linear progression.</p>\n<p>The one thing about the breaks is that I have to deal with delayed onset muscle soreness (DOMS) with my leg and core muscle groups. For a couple days after the first leg and core workouts after a break, the muscles become sore and I have to hope I don't need to cough. It throws me off. Thankfully, once I start lifting regularly, I don't really deal with that kind of intense soreness. So here's hoping these last 10 days stick and I don't have to deal with the DOMS for a while.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-22T14:08:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/vibe-engineering/",
      "url": "https://kpwags.com/notes/vibe-engineering/",
      "title": "Vibe Engineering",
      "content_html": "\n\t\t<blockquote>\n<p>One of the lesser spoken truths of working productively with LLMs as a software engineer on non-toy-projects is that it’s <em>difficult</em>. There’s a lot of depth to understanding how to use the tools, there are plenty of traps to avoid, and the pace at which they can churn out working code raises the bar for what the human participant can and should be contributing.</p>\n</blockquote>\n<p>It can be so easy to see code and think <em>hey! this works!</em> But code that works is only half of what it means to develop software. Can the code scale at all? Can it be maintained? Is it efficient? For a little tool you're building to help you with something, maybe none of that matters. But for anything more extensive than that, you bet it does.</p>\n<blockquote>\n<p>If you’re going to really exploit the capabilities of these new tools, you need to be operating <em>at the top of your game</em>. You’re not just responsible for writing the code—you’re researching approaches, deciding on high-level architecture, writing specifications, defining success criteria, designing agentic loops, planning QA, managing a growing army of weird digital interns who will absolutely cheat if you give them a chance, and spending <em>so much time on code review</em>.</p>\n<p>Almost all of these are characteristics of senior software engineers already!</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-22T14:08:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/152/",
      "url": "https://kpwags.com/reading-log/152/",
      "title": "Reading Log - December 22, 2025 (#152)",
      "content_html": "\n\t\t<p>This week it's some podcast episodes on climate change and ESG investing, digging into CSS colors and layouts, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.thomasclaudiushuber.com/2025/10/22/csharp-14-the-field-keyword/\">C# 14: The field Keyword – Or Should I Say: I Had a Dream?</a> - <em>Thomas Claudius Huber</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://infrequently.org/2025/09/apples-crimes-against-the-internet-community/\">Apple's Assault on Standards</a> - <em>Alex Russell</em></li>\n<li><a href=\"https://adrianroselli.com/2025/10/openai-aria-and-seo-making-the-web-worse.html\">OpenAI, ARIA, and SEO: Making the Web Worse</a> - <em>Adrian Roselli</em></li>\n<li><a href=\"https://frontendmasters.com/blog/the-two-button-problem/\">The Two Button Problem</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://ishadeed.com/article/modern-css-section-layout/\">Solved By Modern CSS: Section Layout</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://www.zachleat.com/web/copy-paste/\">Copy <em>and</em> Paste…in this Economy?</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://piccalil.li/blog/nan-the-not-a-number-number-that-isnt-nan/\">NaN, the not-a-number number that isn’t NaN</a> - <em>Mat “Wilto” Marquis</em></li>\n<li><a href=\"https://ishadeed.com/article/anchor-positioning/\">The Basics of Anchor Positioning</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://piccalil.li/blog/a-pragmatic-guide-to-modern-css-colours-part-two/\">A pragmatic guide to modern CSS colours - part two</a> - <em>Kevin Powell</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://scribe.rip/default-isnt-design-24df33272abb\">Default Isn’t Design</a> - <em>Rob Eisenberg</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://ericwbailey.website/published/harm-reduction-principles-for-digital-accessibility-practitioners/\">Harm reduction principles for digital accessibility practitioners</a> - <em>Eric Bailey</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://resonantcomputing.org/\">The Resonant Computing Manifesto</a> - <em>Resonant Computing</em></li>\n<li><a href=\"https://frontendmasters.com/blog/50-reasons-to-build-a-website/\">50 Reasons to Build a Website</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://thomasrigby.com/posts/smartphones-are-not-the-enemy/\">Smartphones are not the enemy</a> - <em>Thomas Rigby</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://adactio.com/journal/22177\">Coattails</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://phirephoenix.com/blog/2025-10-11/friction\">Choosing Friction</a> - <em>Jenny</em></li>\n<li><a href=\"https://simonwillison.net/2025/Oct/7/vibe-engineering/\">Vibe Engineering</a> - <em>Simon Willison</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/ai-browsers-frontier-security/\">AI Browsers: Living on the Frontier of Security</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/whose-league-is-it-anyway\">Whose League Is It Anyway?</a> - <em>Maitreyi Anantharaman</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/episode/2025/04/09/the-god-box\">How We Survive: The God Box</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2025/04/16/the-death-of-esg\">How We Survive: The Death of ESG</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2025/04/23/the-evolution-of-esg-investing\">How We Survive: ESG, Reincarnated</a></li>\n<li><a href=\"https://www.dancarlin.com/product/ep-32-the-show-with-mike-rowe/\">Hardcore History Addendum: The Show with Mike Rowe</a></li>\n</ul>\n<hr />\n<h2>History</h2>\n<ul>\n<li><a href=\"https://www.404media.co/scientists-discover-massive-underwater-ruins-that-may-be-a-lost-city-of-legend/\">Scientists Discover Massive Underwater Ruins That May Be a Lost City of Legend</a> - <em>Becky Ferreira</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/10/22/more-than-170-u-s-citizens-have-been-held-by-immigration-agents-theyve-been-kicked-dragged-and-detained-for-days/\">More Than 170 U.S. Citizens Have Been Held By Immigration Agents. They’ve Been Kicked, Dragged And Detained For Days.</a> - <em>Nicole Foy</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.smithsonianmag.com/history/rifling-through-archives-legendary-historian-robert-caro-180985956/\">Rifling Through the Archives With Legendary Historian Robert Caro</a> - <em>Chris Heath</em></li>\n<li><a href=\"https://defector.com/the-2025-haters-guide-to-the-williams-sonoma-catalog\">The 2025 Hater's Guide To The Williams-Sonoma Catalog</a> - <em>Drew Magargal</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Eric Mintel Quartet - Linus &amp; Lucy</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/gwoJuL4t__Y\" title=\"Eric Mintel Quartet - Linus & Lucy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-22T14:04:59Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/21/getting-ready-for-my-2025-media-consumption-pages/",
      "url": "https://kpwags.com/posts/2025/12/21/getting-ready-for-my-2025-media-consumption-pages/",
      "title": "Getting Ready for My 2025 Media Consumption Pages",
      "content_html": "\n\t\t<p>Every year now I've been posting a look back at the books, TV, movies, and video games I consumed the previous year. I find it a rather interesting exercise looking back at what I've read, watched, and played and thinking about what I really enjoyed and what I might not have.</p>\n<p>One of the more annoying parts of the posts is building out the components in the blog post markdown files. I've built a WebC component to render the content, but there's a lot of copying and pasting from my media repository to lay them all out.</p>\n<p>It got me thinking though, my media repository has an API that I use to build my media pages for my site and even my reading log pages. Certainly I could do something similar.</p>\n<p>I have a tool that I named <a href=\"https://codeberg.org/kpwags/site-content-generator\">site-content-generator</a>. It's a small .NET console app that I use to generate the bones of my blog posts, notes, book notes, and a few other things. It speeds up the process of scaffolding all the front matter I'd like for my posts.</p>\n<p>I'm currently in the process of adding more options to it to handle scaffolding the yearly posts. The endpoints already exist to pull in the books, TV and other media to lay out the bare bones of the pages. I could then go in and make the final tweaks. I started working on it the other night and have the book generation mostly taken care of. Movies and video games won't be too bad now that I have the basic framework taken care of.</p>\n<p>TV will be a challenge though as there's no date I can really work off of. Since TV goes from <strong>watching</strong> to <strong>on pause</strong> back to <strong>watching</strong> as seasons end and start, I'm not sure there's anything I can necessarily grab onto in the data. With books, movies, &amp; video games, I have a date watched or date finished I can use to group the media into 2025. Maybe it's an improvement I can make to my media repository, but it doesn't exactly help me now.</p>\n<p>Either way, it'll be nice to have a tool to help me get the posts started and trim some time off the tedious work. Automate things when you can.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-21T17:15:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/79/",
      "url": "https://kpwags.com/week-note/79/",
      "title": "Week Notes for December 13 - 19 (#79)",
      "content_html": "\n\t\t<p>It's the final week before Christmas. Thankfully I'm all set, so the next week should hopefully be mostly stress-free.</p>\n<h2>I-League Season Over</h2>\n<p>Monday was the final I-League game of the season. Unfortunately I did not play particularly well and we lost 6-5. Oh well, it was still a fun season.</p>\n<p>The instructional sessions start right after the new year and the next season will begin in mid-February or so.</p>\n<h2>Eric Mintel Quartet Concert</h2>\n<p>On Wednesday, my wife and I went to a local bar for a Christmas jazz concert. <a href=\"https://ericmintelquartet.com/\">Eric Mintel Quartet</a> was playing at <a href=\"https://118northwayne.com/\">118 North</a> Christmas songs. Some of the songs were originals, but they also played the Charlie Brown Christmas Special. It was a nice evening with good music. They were really impressive.</p>\n<h2>Phantoms Teddy Bear Toss Game</h2>\n<p>Saturday was the annual Lehigh Valley Phantoms teddy bear toss game. Many minor league teams have yearly games where they collect stuffed animals for charity. Whenever the home team scores their first goal, everyone throws their stuffed animals they brought onto the ice. It's fun to watch and experience and it's for charity so it's a great time.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/3dikRj3CZq-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/3dikRj3CZq-1920.gif 1920w\" /><img alt=\"Teddy bears litter the ice at a hockey game\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/3dikRj3CZq-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>We made an evening of it. We went to Fegley Brew Works across the street from the arena for dinner and drinks, and then to the game to cheer on the Phantoms. The game was fun. We got to throw the teddy bears shortly after the start of the 2nd period, and the Phantoms went on to win 2-1 in the shootout.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-21T17:07:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/19/how-we-survive-dives-into-esg/",
      "url": "https://kpwags.com/posts/2025/12/19/how-we-survive-dives-into-esg/",
      "title": "How We Survive Dives into ESG",
      "content_html": "\n\t\t<p>I listen to a lot of podcasts from American Public Media. One of their podcasts is <a href=\"https://www.marketplace.org/shows/how-we-survive\">How We Survive</a>, which focuses on climate change and how it affects us. I'm a little behind on it, but season 7 focused on Environmental, Social, and Governance (ESG) and I'd recommend it.</p>\n<p>Here are the 3 episodes.</p>\n<ol>\n<li><a href=\"https://www.marketplace.org/episode/2025/04/09/the-god-box\">The God Box</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2025/04/16/the-death-of-esg\">The Death of ESG</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2025/04/23/the-evolution-of-esg-investing\">ESG, Reincarnated</a></li>\n</ol>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-19T13:14:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/50-reasons-to-build-a-website/",
      "url": "https://kpwags.com/notes/50-reasons-to-build-a-website/",
      "title": "50 Reasons to Build a Website",
      "content_html": "\n\t\t<blockquote>\n<p>You can (and likely will) make websites that don’t make any money and you won’t be paid to build them. I, for one, think that’s awesome. Not everything has to be a hustle.</p>\n</blockquote>\n<p>Keep building, this is an awesome list. I love seeing what people create.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-19T12:24:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/18/growing-up-on-the-internet/",
      "url": "https://kpwags.com/posts/2025/12/18/growing-up-on-the-internet/",
      "title": "Growing Up on the Internet",
      "content_html": "\n\t\t<p>My formative years were in the mid-1990s. I remember my family's first Windows computer and us first connecting to the internet and World Wide Web. I remember the dial-up sounds, AOL, and a shared phone line causing many disconnections. I look back at those times with rose colored glasses. It was an amazing time, first seeing what the internet could do.</p>\n<h2>First Sites</h2>\n<p>When first introduced to to the web, I didn't really know where to go, or what sites to visit. It felt like I was placed in the middle of an open world with an almost infinite number of paths to take, and no direction on where to go. It was both daunting and exciting. I can't remember exactly the first site I went to, but I remember my brother and I at the time were collecting and playing the <a href=\"https://en.wikipedia.org/wiki/Star_Wars_Customizable_Card_Game\">Star Wars Customizable Card Game</a> by Decipher. I remember browsing Decipher's website looking at the different cards available. I think part of it was imagining me being able to get one of the more rare, powerful cards to use in my decks.</p>\n<h2>The AOL Era</h2>\n<p>Originally we had CompuServe as our internet provider. I'm not entirely sure why, but we switched to AOL. I think the only good thing that came out of that was AOL Instant Messenger. It was nice to be able to chat with friends. It was also my first introduction to email. IMs and email felt magical in a way I can't fully explain. To be able to write some text in a form, press send, and boom, someone else however far away would get it, felt crazy in a good way. We take it for granted now, but for 12 year old me, it felt revolutionary to me.</p>\n<h2>Slow Dialup</h2>\n<p>Growing up, our internet was limited to around 28.8 kbps. We had a 56.6 modem, but our phone line was crummy and our connection speed would top out around 33.6 on a good day. Verizon or whoever our phone provider was would only guarantee voice communications. So long as you could talk on the phone without issue, they wouldn't re-run the line without you footing the bill.</p>\n<p>The slow speeds were annoying, but such was the early internet. I remember the first time I tried to game on the connection. I tried playing <a href=\"https://en.wikipedia.org/wiki/Star_Wars_Jedi_Knight:_Dark_Forces_II\">Star Wars: Jedi Knight</a> multiplayer. Talk about a lesson in &quot;not going to happen&quot;. I remember constantly dying randomly having no idea why. I also remember hitting an opponent so many times with my blaster and wondering how the hell he was still alive. Only to then see them magically far off in the map. My connection was too slow and I was lagging like crazy. I gave up ever playing multiplayer after that.</p>\n<h2>The Geocities Era</h2>\n<p>This is where I first started playing around with web development. I remember wanting to build my own website. The sites I built were stupid, contained far too many animated GIFs and images I pilfered from around the web. I also naively didn't fully understand how to get my own domain and was wondering why all I could get were sites that had to include geocities.com.</p>\n<p>It did help spark that curiosity though.</p>\n<h2>College &amp; My First Taste of High Speed Internet</h2>\n<p>In 2002, I went off to college. That got me access to high speed internet for the first time in my life. No longer would websites take forever to load, now they'd pop up in no time. Downloading larger files? Easy and fast, no longer waiting an hour and hoping the phone line doesn't disconnect. There was no longer any worry about going over a monthly allotment of online hours, I could browse the internet and see what was out there to my heart's content.</p>\n<h2>MySpace &amp; The Facebook</h2>\n<p>MySpace was my first foray into social media. I remember playing around with my profile's HTML and styling, but I don't really remember much else about it.</p>\n<p>Facebook on the other hand I remember getting on back at the beginning when it was still thefacebook.com. I was still in college and thought it was a neat place to keep up with friends from college and people I knew from back home.</p>\n<h2>Post-College and My Own Site</h2>\n<p>After college, I finally got my own domain, darkernemesis.com. I ran a blog off there until maybe around 2013. It started out as a home-cooked PHP / MySQL site with my own CMS. I eventually switched to WordPress, losing posts every time I migrated somewhere. I didn't particularly care, it was fun to build and play around with.</p>\n<h2>The Demise of Facebook and Twitter</h2>\n<p>After the 2016 election of Donald Trump, I took a step back from Facebook, eventually deleting my account. And then given Meta/Facebook's privacy nightmares, I deleted Instagram too. I have no account on any service Meta owns, and I will do everything I can to keep it that way.</p>\n<p>Elon's purchase of Twitter also got me off Twitter. I kept my account, locked and private for a little while holding out hope that maybe things wouldn't be bad or that Elon would just quickly sell it or something. That obviously didn't happen and I eventually just deleted my account completely.</p>\n<h2>The Rise of Federated Social Media &amp; Back to Blogs</h2>\n<p>Blogs never went away and I had continued to use RSS even after Google killed off Reader. I switched to Feedly, tried others, and have landed on <a href=\"https://feedbin.com/\">Feedbin</a>. But since the fall of Twitter, I've doubled down on finding more personal sites and blogs of interesting people to add to my feeds.</p>\n<p>The demise of Twitter has so far seemed to cause more people to either start their own personal sites, double down on them, or just simply brought them back into the lime light. I love it.</p>\n<p>It's also caused the rise of federated social media, most notably Mastodon and Bluesky among others. I'm probably a little more active on Mastodon, but have accounts on both and use both. With Mastodon, it's nice to know that I can just move instances if things go south with my current one (<a href=\"https://hachyderm.io/\">hachyderm.io</a>). Bluesky will eventually have the same.</p>\n<p>And that's wheere I am today. I've been spending a lot more time writing for my site and adding more content for it. There's still smoke on the horizon, but it's nice seeing some rays of sunshine from all the personal sites and platforms that are hopefully a little more resistant to the walled gardens we had over the last 10-15 years.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-18T23:34:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-world-is-something-that-we-make/",
      "url": "https://kpwags.com/notes/the-world-is-something-that-we-make/",
      "title": "The World is Something that We Make",
      "content_html": "\n\t\t<blockquote>\n<p>This consistent misread is that no positive change is worth making unless you make it in a pristine, completely consistent, platonic final form.</p>\n</blockquote>\n<p>Over the last several years I've been re-thinking some of my uses and interactions with various companies and whatnot. This sums it up perfectly. You don't have to take the leap right away. Small steps can get you where you want to go over time.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-17T15:55:22Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/17/random-thoughts-on-sports-gambling/",
      "url": "https://kpwags.com/posts/2025/12/17/random-thoughts-on-sports-gambling/",
      "title": "Random Thoughts on Sports Gambling",
      "content_html": "\n\t\t<p>For anyone who knows me, it’s no surprise I’m a sports fan. I play hockey and love watching Baseball, Hockey, and Football. The one thing that I now have to constantly deal with watching sports are the constant ads for sports gambling and sports books. I’d seriously be willing to pay a nominal fee for a feed without all the FanDuel or Draft Kings commercials. My strong distaste for all the gambling ads is an annoyance, for others, it’s a problem.</p>\n<p>Gambling ads of late have been everywhere. It’s not surprising to see and hear them on sports broadcasts and on sports podcasts. If you’re watching or listening to sports and companion shows it make sense you could potentially be their target audience. But I’ve started to see them branch out into ads for other TV shows and podcasts. I feel like I’m being inundated with them.</p>\n<p>I don’t gamble. I can’t say I ever have really. It just never interested me. I’ll play the occasional $10-20 poker game with friends, but that’s about it. Gambling at the slots, blackjack table, or anywhere else just never really piqued my interest. I don’t fault anyone who wants to have a night out at the casino, but it’s just not for me.</p>\n<p>I then read about <a href=\"https://www.rollingstone.com/culture/culture-features/mobile-sports-betting-gambling-addiction-fanduel-draftkings-1235444172/\">people struggling with gambling addiction</a> and how much money people are losing. The ability to so easily and quickly place bets, lose it all, then place more and more bets to try to recoup the losses. <a href=\"https://www.economist.com/united-states/2025/12/08/college-campuses-have-become-a-front-line-in-americas-sports-betting-boom?giftId=ZWFlNGY2MjMtYTViOS00YmZjLWI2ZjctZTZmOTMyNmM4ZWU4&amp;utm_campaign=gifted_article\">College campuses</a> are dealing with it too.</p>\n<p>I really don't know what the solution is, if there even is one, but it's disappointing to see. I don't think I'd agree with banning sports betting, that ship has likely sailed now that sports gambling has been legalized in 39 of the 50 states, it just leaves me shaking my head.</p>\n<p>And then you read about <a href=\"https://www.bbc.com/news/articles/cpv1rkxjyyno\">NBA players and coaches</a> tilting the scales. Major League Baseball, who famously banned Pete Rose for life, has another <a href=\"https://www.espn.com/mlb/story/_/id/46120812/guardians-clase-ortiz-remain-leave-amid-gambling-inquiry\">scandal on its hands</a> involving two Cleveland relievers. As a fan I want to see a &quot;fair&quot; game. I don't really think that any player would intentionally lose a game for a bet, but I can see how a pitcher intentionally starting a batter off with a ball for a parlay could accidentally snowball into a walk which could potentially start a rally. Sports are exciting in that you don't know what's going to happen next. Your team could have an amazing comeback win, or lose it all on a walk-off home run. It's one of the great things about sports. I don't want to have to start wondering if players are involved in any funny business on the field.</p>\n<p>I was listening to a <a href=\"https://www.theringer.com/podcasts/plain-english-with-derek-thompson/2025/10/31/the-problem-with-sports-gambling\">podcast episode</a> about this and one suggestion would be to get rid of some of the ability to bet parlays. From what I've read, that could potentially help with some of the incentives for the funny business I'm worried about as well as limit some of the financial damage unchecked gambling can cause.</p>\n<p>I'll end by leaving this here. Here is a video from ESPN where you can see the gambling ad in the lower right hand corner all of a sudden disappear when they realize what they're discussing.</p>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/j9J4tbEa-nE\" title=\"ESPN Clip\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-17T00:33:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/vibe-coding-is-boring/",
      "url": "https://kpwags.com/notes/vibe-coding-is-boring/",
      "title": "Vibe Coding is Boring",
      "content_html": "\n\t\t<blockquote>\n<p>But as I work more with these tools in and outside of work, I have really re-learned how much I do love coding, and don’t find it that tedious. I don’t really <em>like</em> vibe coding. There’s no joy in it. There’s no “YAY I am a GENIUS because I FIGURED IT OUT” feeling. It’s just there. It’s boring.</p>\n</blockquote>\n<p>There really is something about building things from the ground up and seeing them come alive. There's <em>real</em> joy in solving a tough problem or fixing a troublesome bug. AI will never take that away.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-15T22:50:36Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/151/",
      "url": "https://kpwags.com/reading-log/151/",
      "title": "Reading Log - December 15, 2025 (#151)",
      "content_html": "\n\t\t<p>A little podcast heavy this week including the first 2 parts of Dan Carlin's Hardcore History on Alexander the Great, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://stackoverflow.blog/2025/10/15/secure-coding-in-javascript/\">Secure coding in JavaScript</a> - <em>Tanya Janca</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://overreacted.io/how-to-fix-any-bug/\">How to Fix Any Bug</a> - <em>Dan Abramov</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.gyford.com/phil/writing/2025/10/15/1995-internet/\">My First Months in Cyberspace</a> - <em>Phil Gyford</em></li>\n<li><a href=\"https://werd.io/why-rss-matters/\">Why RSS matters</a> - <em>Ben Werdmuller</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://cassidoo.co/post/vibe-coding-yawn/\">Vibe coding is boring</a> - <em>Cassidy Williams</em></li>\n<li><a href=\"https://boydkane.com/essays/boss\">Why your boss isn't worried about AI</a> - <em>Boyd Kane</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1939\">.NET Rocks: Vertical Slice Architecture with Jeremy Miller</a></li>\n<li><a href=\"https://www.dancarlin.com/product/hardcore-history-71-mania-for-subjugation/\">Hardcore History: Mania for Subjugation</a></li>\n<li><a href=\"https://www.dancarlin.com/product/hardcore-history-72-mania-for-subjugation-ii/\">Hardcore History: Mania for Subjugation II</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/giorgi-dalakishvili.html\">Coffee &amp; Open Source: Giorgi Dalakishvili</a></li>\n<li><a href=\"https://nodogmapodcast.bryanhogan.net/176-jeff-fritz-net-on-linux/\">No Dogma: Jeff Fritz, .NET on Linux</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://birchtree.me/blog/pay-per-stream-is-a-messy-metric/\">Pay per stream is a messy metric</a> - <em>Matt Birchler</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://macwright.com/2025/10/21/what-if-they-dont-want-to\">What if people don't want to create things</a> - <em>Tom MacWright</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Goo Goo Dolls - Name</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/yQOBUrRaPU0\" title=\"Goo Goo Dolls - Name\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-15T22:50:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/14/installing-net-10-on-linux-mint-222/",
      "url": "https://kpwags.com/posts/2025/12/14/installing-net-10-on-linux-mint-222/",
      "title": "Installing .NET 10 on Linux Mint 22.2",
      "content_html": "\n\t\t<p>I had some adventures getting .NET 10 installed and working on Linux Mint and thought I'd share the solution that worked for me.</p>\n<h2>Some Background</h2>\n<p>I was easily able to install the .NET 9 SDK through APT. I think this is why I later had problems with .NET 10. When I would run the <code>dotnet --list-sdks</code> command which lists the .NET SDKs available on your system, it would only display <code>9.0.112</code> which I believe is the version installed.</p>\n<p>Linux Mint and its repositories don't have .NET 10 so in order to use it, I would have to resort to other methods. The one most recommended was the <a href=\"https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#scripted-install\">scripted install</a>. I followed the instructions and it installed without errors, but when I listed the SDKs, .NET 9 remained the only version available. I was a little frustrated.</p>\n<p>The one thing I did note was when it displayed the SDK version, despite the install script installing .NET 10 to <code>~/.dotnet</code>, the .NET 9 SDK version listed <code>/usr/lib/dotnet/sdk</code> as the install location.</p>\n<h2>The Fix</h2>\n<p>Digging into the <a href=\"https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script\">install script documentation</a>, I found that you could specify the install directory. So I decided to try to tell the install script to install to the same directory .NET 9 listed. Because I was installing outside my home directory, I did have to use <code>sudo</code> to elevate my permissions.</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"token operator\">></span> <span class=\"token function\">sudo</span> ./dotnet-install.sh <span class=\"token parameter variable\">--channel</span> LTS --install-dir /usr/lib/dotnet/</code></pre>\n<p>Turns out this did the trick. I'm not sure if it's the &quot;correct&quot; way, but my system now recognizes .NET 10 as a valid SDK and I can get back to development.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-14T18:12:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/78/",
      "url": "https://kpwags.com/week-note/78/",
      "title": "Week Notes for December 7 - 13 (#78)",
      "content_html": "\n\t\t<p>The holidays are fast approaching and it's nice to be able to get things taken care of with time to spare.</p>\n<h2>Finished Christmas Shopping</h2>\n<p>I was able to finish my Christmas shopping this week. I try not to wait until the last minute which saves me some hassle later. Now I can mostly just relax for the rest of the season.</p>\n<h2>My Poor Muscles</h2>\n<p>My workout routines have been all out of whack over the last couple months. I haven't really been able to consistently hit the gym, which means when I do, I end up with what is called the DOMS (Delayed Onset Muscle Soreness). It's not fun for me for a few days after the workout. My hamstrings, quads and glutes are all screaming at me. I'm fine once I get moving, but I'm hoping I can finally get back into some sort of rhythm.</p>\n<h2>All Vaccinated</h2>\n<p>I should've taken care of it in September or October, but I got my COVID and flu shots this week, so I should be protected this upcoming season. I was worried I'd have to jump through more hoops for my COVID vaccine, but thankfully I was able to get it easily enough. Impeach RFK Jr. Now!</p>\n<h2>.NET 10 and Linux</h2>\n<p>I've been struggling to get .NET 10 running on my Linux Mint desktop, I've tried various how tos that always seemed to successfully install, but didn't end up showing when running the <code>dotnet --list-sdks</code> command. I finally <a href=\"https://kpwags.com/posts/2025/12/14/installing-net-10-on-linux-mint-222/\">figured out how to get it work</a> using the <code>--install-dir</code> parameter with the <code>dotnet-install</code> <a href=\"https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script\">script</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-14T18:11:54Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/10/some-quick-thoughts-on-feature-flags/",
      "url": "https://kpwags.com/posts/2025/12/10/some-quick-thoughts-on-feature-flags/",
      "title": "Some Quick Thoughts on Feature Flags",
      "content_html": &lt;p&gt;It’s a secret to everyone! This post is for RSS subscribers only. &lt;a href=&quot;https://kpwags.com/rss-club/&quot;&gt;Read more about RSS Club&lt;/a&gt;.&lt;/p&gt;"\n\t\t<p>I recently started using feature flags at work and I have some quick initial thoughts.</p>\n<p>Feature flags are essentially virtual switches that allow you to turn features on and off in your software. You can configure them to be universal or to even be more granular and only target a specific group of users. There's a lot more detail here, but it they can allow you to deploy code and keep features hidden behind a flag until you're ready or until you're confident the code is stable.</p>\n<p>The general idea at work is that we have two general types of feature flags. Long-term and short-term flags.</p>\n<h2>Short-Term Flags</h2>\n<p>The short-term ones are meant for features that are in development but you don't want to have them turned on in production right away. That way they can be tested and then turned on as we feel confident the code is ready. Once deployed and all looks good, we can go in and remove the feature flag code and the feature flag itself.</p>\n<p>These are great. There have been times where larger features can interfere with other smaller bugs and features getting out due to merge conflicts or any number of other reasons. Having a flag can allow you to unblock processes without necessarily having to worry that the new feature you're working on being seen by the world. They can also allow you to quickly turn off features if a bad bug pops up or something unexpected occurs.</p>\n<h2>Long-Term Flags</h2>\n<p>Long-term flags are ones that remain in place for an extended period of time, perhaps for the life of the software.</p>\n<p>I have a little more concern with these and maybe part of it is just me not understanding something and it could certainly be something with the way we're implementing them.</p>\n<p>At work, we're using a 3rd party library, <a href=\"https://www.featbit.co/\">FeatBit</a> to handle our flags. My experience with them so far has been good. The flags have been easy to setup, configure, and tie into the code. Given that we've been dealing with a wave of <a href=\"https://en.wikipedia.org/wiki/Enshittification\">enshittification</a> of late, my concern with the long-term flags is that what happens if FeatBit jacks up their prices? Or what if their service takes a nose dive and becomes unreliable? We'd have to quickly go through every project that uses them, and pull them out.</p>\n<p>For short-term flags, we'd already be prepared to do this, so I wouldn't think it'd be that big of a deal. For the long-term flags, we'd have to go in and either pull out the flag, migrate the flag to a different service, or something.</p>\n<p>I guess from my perspective, I feel like long-term flags should be baked into apps through some kind of site configuration whether stored in a database, environment variable, or app config. That way, you're not dependent upon any external service to enable and disable the feature. It's still a feature flag of sorts, just built differently.</p>\n<h2>Closing Thoughts</h2>\n<p>It's certainly possible that I'm overthinking things. I'm still new to using feature flags so there could be something I'm just not yet getting when it comes to longer-term flags. Definitely something to explore and research.</p>\n<p><em>Note: as with everything on my site, my thoughts are my own and do not represent the views of the company I work for.</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-10T00:34:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/a-cartoonists-review-of-ai-art/",
      "url": "https://kpwags.com/notes/a-cartoonists-review-of-ai-art/",
      "title": "A Cartoonist&#39;s Review of AI Art",
      "content_html": "\n\t\t<p>A thoughtful piece from someone who does art and cartoons for a living.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-08T23:26:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/150/",
      "url": "https://kpwags.com/reading-log/150/",
      "title": "Reading Log - December 8, 2025 (#150)",
      "content_html": "\n\t\t<p>150 logs now! This week it's a guide to CSS view transitions, thoughts on finishing software, and a good comic on AI art.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://blog.jermdavis.dev/posts/2025/new-extensions-csharp\">C# is fixing a thing that irritated me!</a> - <em>Jeremy Davis</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://developer.mozilla.org/en-US/blog/view-transitions-beginner-guide/\">A beginner-friendly guide to view transitions in CSS</a> - <em>Yash Raj Bharti</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://rosswintle.uk/2025/10/software-can-be-finished/\">Software can be finished</a> - <em>Ross Wintle</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://www.nicchan.me/blog/the-f-off-contact-page/\">The f*** off contact page</a> - <em>Nic Chan</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.404media.co/missouri-age-verification-law-porn-id-check-vpns/\">Half of the US Now Requires You to Upload Your ID or Scan Your Face to Watch Porn</a> - <em>Samantha Cole</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://theoatmeal.com/comics/ai_art\">A Cartoonist’s Review of AI Art</a> - <em>Matthew Inman</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Nothington - Captive Audience</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/qAlwZ4LyTWw\" title=\"Nothington - Captive Audience\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-08T23:23:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/07/christmas-light-problems/",
      "url": "https://kpwags.com/posts/2025/12/07/christmas-light-problems/",
      "title": "Christmas Light Problems",
      "content_html": "\n\t\t<p>I don't hang the outdoor lights out every year, but every time I do, it seems like I need to purchase new lights. It's incredibly frustrating. And yes, I know this is kind of a first-world problem, but it's making me so mad.</p>\n<p>One of the reasons I don't put up lights every year is because all too often the 1-2 year old strands of lights either completely don't work or partially don't work. I have in the past tried to find the bad bulb or bulbs, but all too often I spend hours going through the strand (I get the long ones as to cover the house in one strand) and don't end up finding anything. I haven't found any of the tools that are out there to be all that useful for the LED bulbs.</p>\n<p>This afternoon I checked the strand I purchased 2 years ago (I didn't put any lights up last year) and it looked to be all working. I spent a bunch of time stringing them up along the gutters of our house, turned them on, and now one third of them aren't lighting up. WTF?</p>\n<p>I'm going to try jostling them once it gets dark to get a better idea of how &quot;off&quot; it ends up looking, but at this point I think I'm done if I can't get this strand working.</p>\n<p>The lights aren't exactly cheap and it's wasteful to just throw them out after one season, but fruitlessly and futilely spending hours trying to fix them is just not worth my time or effort. After the first strands stopped working, I moved the lights from the attic to the basement thinking maybe the huge temperature swings in the attic were to blame. The basement, despite having a steady temperature year-round hasn't helped.</p>\n<p>After this year and this recurring issue, I think I'll be done putting out lights each Christmas. I like the way our house looks at Christmas, but not enough to keep shelling out money and the time to try to constantly fix the lights.</p>\n<p>If anyone has any other thoughts on how to more easily keep strands working or fix them, I'm all ears.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-07T19:43:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/77/",
      "url": "https://kpwags.com/week-note/77/",
      "title": "Week Notes for November 30 - December 6  (#77)",
      "content_html": "\n\t\t<p>I can't believe its already December. Where has the year gone. The Christmas season is upon me and it already feels like it's going to fly by.</p>\n<h2>Back-to-Back Hockey Nights</h2>\n<p>I ended up having hockey games back-to-back nights again. Thankfully the first night was a shockingly-early 7pm game. Those are almost unheard of. We ended up losing Sunday's game 1-0, but we were playing one of the top teams in our division and we held with them all game thanks to a great game by our goalie and defense. Our offense had some good chances too, but unfortunately couldn't get the puck to bounce just so. Monday's game was a tough 5-0 loss. I thought we played well all things considered, but their goalie played well and we struggled to keep pressure going in the offensive zone.</p>\n<h2>Trying Again to Get Back into a Fitness Routine</h2>\n<p>I've been trying, mostly unsuccessfully, to get back into a fitness routine over the last month. Between being sick, tired after some late hockey games, I've struggled to get into a rhythm. I tried starting my next cycle lifting and found the weight I was lifting to be a little more than I could comfortably handle. I think at this point, I'm going to stick with the routine, but do a reset and drop the weight. When I get into a rhythm, I'm good, but once I get out of it, it's easy to stray.</p>\n<h2>Cooking</h2>\n<h3>Sausage Tortellini Soup</h3>\n<p>It's (almost) winter, and it's soup season. I found <a href=\"https://damndelicious.net/2025/01/24/sausage-tortellini-soup/\">this recipe</a> online and it tured out really well. I'll definitely make it again, though I might add another cup of stock to help make it a little more &quot;brothy&quot;.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-07T16:20:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/06/rebuilding-my-photography-site/",
      "url": "https://kpwags.com/posts/2025/12/06/rebuilding-my-photography-site/",
      "title": "Rebuilding My Photography Site",
      "content_html": "\n\t\t<p>Several years ago, my site included a photography page where I shared some of the photos I took along my travels. During one of my various redesigns when my site was running Next.js, I was running into build issues with it. I made the decision to split the page out but never actually did. I think that's going to change.</p>\n<p>I haven't really done much with my DSLR of late. I haven't really taken it anywhere of late which hasn't helped motivate me either. There's also the fact that I haven't finished processing two photo sets I took before the pandemic. Part of the issue there at least was me struggling to find a good replacement for Adobe LightRoom. I got tired of paying for the subscription and it took me a while to find ON1 to replace it. I'm still dragging my feet and learning it.</p>\n<p>My ideal situation is to have a subdomain, photography.kpwags.com set up to show off my photo sets as well as maybe a monthly dump from my iPhone of any photos that seem worth sharing. I doubt I'm all that interesting, but I have enjoyed the art of photography even if I haven't taken my Canon 60D out all that recently.</p>\n<p>My technology of choice will undoubtedly be 11ty. I love its ease of use for both my site and my <a href=\"https://bombershockey.org/\">hockey team's site</a>. I'll have to figure out a good way to host the images as I used to just include them in the build, but given their size, a CDN might be a little more in order.</p>\n<p>One thing I'm actually looking forward to experimenting with is the masonry layout being incorporated within browsers and CSS. I've only glanced at it in my periphery so I'm not quite sure what the status is, but I feel like a photo gallery of sorts would be a good use for it.</p>\n<p>I don't really have a timeline for when I want it to be out in the world, but now's as good a time as any to start digging into it and coming up with some kind of design and implementation.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-06T00:14:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/05/on-cooking-experimentation-and-expanding-my-recipe-collection/",
      "url": "https://kpwags.com/posts/2025/12/05/on-cooking-experimentation-and-expanding-my-recipe-collection/",
      "title": "On Cooking, Experimentation, and Expanding My Recipe Collection",
      "content_html": "\n\t\t<p>I recently finished watching <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a> with my wife and also just started reading <a href=\"https://bookshop.org/p/books/food-for-thought-essays-and-ruminations-alton-brown/21530474\">Alton Brown's book of essays</a>. Watching his show, I feel like I've grown even more appreciative of cooking tasty home cooked meals.</p>\n<p>One of the best parts of Good Eats was always how accessible Alton tried to keep everything. He always seemed to make even the more complicated tasks simple, or at least simple enough that even those less experienced could feel comfortable giving them a try.</p>\n<p>I consider myself to be a decent cook. I'm generally comfortable trying new recipes and have gotten to have a decent understanding how different spices work together. I still miss the mark from time to time, and screw up other times.</p>\n<p>I have found that in some cases, unfamiliar recipes or processes cause me to steer away from trying recipes that otherwise sound good. I'm not sure why either as the internet is full of the information I would need. I'm sure someone on YouTube has made a video on how to do just about anything. As for unfamiliar ingredients, an internet search would give me the information I need to know what it is, how to use it, and where to find it.</p>\n<p>Thinking about what I've learned through watching Good Eats as well as having more fun in the kitchen, I think I'm going to really make a concerted effort to be willing to try new things and not let fear of messing up stop me from trying to expand my palate and repertoire. I mean it sucks when a recipe you try doesn't turn out or is somewhat inedible, but it's how you learn and get better.</p>\n<p>And if I screw up? There's always pizza.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-05T01:08:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/03/november-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/12/03/november-2025-check-in/",
      "title": "November 2025 Check-In",
      "content_html": "\n\t\t<p>November was a busy month. Thanksgiving, a long weekend in New York City, and a nagging cough were the highlights.</p>\n<h2>New York City</h2>\n<p>My wife and I have been spending at least one long weekend in NYC every year since we've been together. We even went in February 2020 just before the COVID lockdowns. This year we had to wait until November but were able to enjoy the sights and sounds of the Big Apple.</p>\n<p>We stayed by Bryant Park and enjoyed the mornings with a book in the park with some coffee and pastries with books. They had the ice rink and Christmas shops up. It was a good way to wake up even if it was a little on the chilly side. The rest of the days were spent wandering around the city. We had dim sum in Chinatown, hung out in the Village and enjoyed ourselves. We don't always do all the touristy things when we visit, but NYC has so much to offer.</p>\n<h2>Hosting Thanksgiving</h2>\n<p>We hosted my in-laws for Thanksgiving. It wasn't all that bad as we ended up getting some prepared foods from Wegmans to make it easier on us. At the end of the day, it's about family and we had a good time with family.</p>\n<h2>Off-and-On Cough</h2>\n<p>Throughout the month I had a rather annoying nagging cough. Some days it was bad, but then I'd be fine. It was weird. Kept me home and inside. Sadly missed a Dave Hause show, but I didn't want to spread whatever I had so alas I'll have to wait until May to see him live again. Thankfully it seems to have gone for good and it was still better than whatever the heck I had Christmas 2023.</p>\n<h2>Writing and Video Games</h2>\n<p>I was able to finish <a href=\"https://www.expedition33.com/\">Expedition 33</a> at the beginning of the month before my Game Pass subscription lapsed. I decided that my next game would be <a href=\"https://www.ea.com/games/starwars/jedi/jedi-survivor\">Jedi: Survivor</a>. I played the heck out of the game. I enjoyed the gameplay and the story was captivating. There is something satisfying about pulling a stormtrooper towards you and then slicing him up with your lightsaber.</p>\n<p>I ended up completing the game Thanksgiving morning. Next up, Far Cry 5.</p>\n<p>Needless to say, I lost motivation for writing. My goal of 36,000 words fell by the wayside. Eh, oh well. Dealing with the cough, I sometimes struggled to focus on writing and decided to rest with games or TV.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>1</span> runs - <span>3.26</span> miles</li>\n<li><strong>Walking:</strong> <span>20</span> walks - <span>23.05</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>5</span> sessions - <span>54,900</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/acquired-taste-clay-mcleod-chapman/2d97fa26f163e8c5\">Acquired Taste</a> by Clay McLeod Chapman</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-ai-con-how-to-fight-big-tech-s-hype-and-create-the-future-we-want-alex-hanna/914a89ac020fc825\">The AI Con: How to Fight Big Tech's Hype and Create the Future We Want</a> by Emily M. Bender &amp; Alex Hanna</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/we-are-eating-the-earth-the-race-to-fix-our-food-system-and-save-our-climate-michael-grunwald/41c6116d0380f833\">We Are Eating the Earth: The Race to Fix Our Food System and Save Our Climate</a> by Michael Grunwald</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/armageddon-the-battle-for-germany-1944-1945-max-hastings/8519135\">Armageddon: The Battle for Germany, 1944-1945</a> by Sir Max Hastings</li>\n<li>Started <a href=\"https://bookshop.org/p/books/food-for-thought-essays-and-ruminations-alton-brown/21530474\">Food for Thought: Essays and Ruminations</a> by Alton Brown</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/147/\">November 3 (#146)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/148/\">November 10 (#147)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/149/\">November 24 (#148)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/73/\">October 26 - November 1 (#73)</a></li>\n<li><a href=\"https://kpwags.com/week-note/74/\">November 2 - 8 (#74)</a></li>\n<li><a href=\"https://kpwags.com/week-note/75/\">November 9 - 22 (#75)</a></li>\n<li><a href=\"https://kpwags.com/week-note/76/\">November 23 - 29 (#76)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/11/05/moving-more-analog/\">moving to more analog methods</a></li>\n<li>Ranted about <a href=\"https://kpwags.com/posts/2025/11/19/i-want-dumb-things/\">wanting more &quot;dumb&quot; things</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/11/20/dogs-and-airtags/\">using AirTags with my dog</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/11/25/concerts-and-live-music/\">my new concerts page an live music</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://www.expedition33.com/\">Clair Obscur: Expedition 33</a></li>\n<li>Finished <a href=\"https://www.ea.com/games/starwars/jedi/jedi-survivor\">Jedi: Survivor</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/games/helldivers-2/\">Helldivers II</a></li>\n<li>Started <a href=\"https://www.ubisoft.com/en-us/game/far-cry/far-cry-5\">Far Cry 5</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt8879940/\">Mythic Quest</a></li>\n<li>Finished season 4 of <a href=\"https://www.imdb.com/title/tt11691774/\">Only Murderers in the Building</a></li>\n<li>Finished season 17 of <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0306414/\">The Wire</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt7660850/\">Succession</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-03T23:27:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/12/03/constant-device-upgrades-the-economy-and-i-just-cant-anymore/",
      "url": "https://kpwags.com/posts/2025/12/03/constant-device-upgrades-the-economy-and-i-just-cant-anymore/",
      "title": "Constant Device Upgrades, the Economy, and I Just Can&#39;t Anymore",
      "content_html": "\n\t\t<p>A little over a week ago there was a little bit of a buzz going around about how <a href=\"https://www.cnbc.com/2025/11/23/how-device-hoarding-by-americans-is-costing-economy.html\">Americans are holding onto their devices longer</a> and claiming that this is damaging to the economy.</p>\n<p>Oh brother...</p>\n<p>In a past life, I was definitely someone who wanted the latest and greatest phone, tech and many other things. Nowadays, I want what I purchase to last. My phone is a three year old iPhone 14 Pro Max, my Laptop is a 2020 M1 MacBook Pro. Both are working fine and neither is giving me any reason to upgrade to the latest model. They both do everything I need them to do and both still feel snappy.</p>\n<p>Why should I spend thousands of dollars to upgrade? It's wasteful. I mean sure I'd either re-sell my laptop on Craigslist to hopefully give it a second life, or use Apple's recycling program, but computer parts are notoriously hard to recycle and often hazardous to the humans across the ocean who do a lot of the work.</p>\n<p>As for the article and blaming people like me who are holding onto our devices longer for the economy, I have two things to say.</p>\n<p>First, it's good to see people recognizing their older devices are still good to hopefully help cut down on e-waste.</p>\n<p>Second, the economy is hurting because there's an affordability crisis. Life's basic necessities are getting far more expensive so income that might've otherwise gone towards the &quot;nice to haves&quot; are now being directed towards important things, like groceries. The latest iPhone isn't going to mean much to someone trying to make sure they have food on their table and a roof over their head. If you want to help the economy, help those who are struggling afford what they need to survive.</p>\n<p>I'm tired of living in the dumbest timeline possible...</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-03T01:02:45Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/149/",
      "url": "https://kpwags.com/reading-log/149/",
      "title": "Reading Log - December 1, 2025 (#149)",
      "content_html": "\n\t\t<p>A good look at colors in CSS, updates in TypeScript, a good explanation of Big-O, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://adactio.com/journal/22178\">Simplify</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://thenewstack.io/stop-ignoring-the-browser-the-biggest-frontend-shift-in-a-decade/\">Stop Ignoring the Browser: The Biggest Frontend Shift in a Decade</a> - <em>Alexander T. Williams</em></li>\n<li><a href=\"https://blog.logrocket.com/upgrade-to-typescript-5-9/\">Yes, you should upgrade to TypeScript 5.9 — here’s why</a> - <em>Chizaram Ken</em></li>\n<li><a href=\"https://backbonenotbad.hyperclay.com/\">React vs. Backbone in 2025</a> - <em>panphora</em></li>\n<li><a href=\"https://piccalil.li/blog/a-pragmatic-guide-to-modern-css-colours-part-one/\">A pragmatic guide to modern CSS colours - part one</a> - <em>Kevin Powell</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.seangoedecke.com/bad-code-at-big-companies/\">How good engineers write bad code at big companies</a> - <em>Sean Goedecke</em></li>\n<li><a href=\"https://samwho.dev/big-o/\">Big O</a> - <em>Sam Rose</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.coryd.dev/posts/2025/captchas-and-the-punishment-of-privacy-conscious-users\">CAPTCHAs and the punishment of privacy-conscious users</a> - <em>Cory Dransfeldt</em></li>\n<li><a href=\"https://www.techdirt.com/2025/11/24/xs-new-feature-reveals-why-trust-safety-work-was-never-about-the-censorship-industrial-complex/\">X’s New Feature Reveals Why Trust &amp; Safety Work Was Never About The ‘Censorship Industrial Complex’</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://hidde.blog/filtered-open-web/\">Who wins when we filter the open web through an opaque system?</a> - <em>Hidde de Vries</em></li>\n<li><a href=\"https://www.404media.co/power-companies-are-using-ai-to-build-nuclear-power-plants/\">Power Companies Are Using AI To Build Nuclear Power Plants</a> - <em>Matthew Gault</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/10/01/a-memo-to-corporate-america-how-to-stop-being-cartoon-villains/\">A Memo To Corporate America: How To Stop Being Cartoon Villains</a> - <em>Mike Brock</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://anildash.com/2025/10/07/dadt-dei/\">The “Don’t Ask, Don’t Tell” Era of DEI</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Catbite - Tired of Talk</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/lAMCKQE4n6k\" title=\"Catbite - Tired of Talk\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-12-01T23:37:12Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/big-o/",
      "url": "https://kpwags.com/notes/big-o/",
      "title": "Big O",
      "content_html": "\n\t\t<p>This is a great write-up going over the basics of Big O notation.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-30T22:13:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/76/",
      "url": "https://kpwags.com/week-note/76/",
      "title": "Week Notes for November 23 - 29 (#76)",
      "content_html": "\n\t\t<p>It was the week of Thanksgiving. It might've been a shorter week at work, but it was a busy weekend at home.</p>\n<h2>Thanksgiving</h2>\n<p>It's Thanksgiving in the US and that means family and a large dinner. We ended up hosting my in-laws for dinner. It was busy, but we were still able to have a mostly relaxing time with them. Sitting down afterwards felt good though.</p>\n<h2>Black Friday Tradition</h2>\n<p>One of the things my wife and I have been doing over the last several years has been going to <a href=\"https://www.bluebirddistilling.com/\">Bluebird Distilling's</a> Black Friday launches. Every Black Friday, they release some new limited spirits and this year was no different. This year I wanted to get their 10 year bourbon and their 10 year rye. I'm looking forward to giving each a taste. It was another fun morning, enjoying some special seasonal cocktails and a nice way to start the holiday season.</p>\n<h2>Finished Good Eats</h2>\n<p>My wife and I have been watching <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a> sporadically over the last year or so. I've enjoyed it, we've found some good recipes, kitchen tips and tricks, and learned plenty about food history and the science behind foods and recipes. Sadly, we've gone through all the episodes. I really liked how Alton Brown made everything accessible and understandable. Maybe he'll reboot the show at some point, but it's sad to see it over.</p>\n<h2>Gaming</h2>\n<p>I ended up finishing <a href=\"https://www.ea.com/games/starwars/jedi/jedi-survivor\">Jedi: Survivor</a>. I enjoyed it. I enjoyed the story and the gameplay. It was a fitting sequel to <a href=\"https://www.ea.com/games/starwars/jedi/jedi-fallen-order\">Fallen Order</a>.</p>\n<p>I decided to go with <a href=\"https://www.ubisoft.com/en-us/game/far-cry/far-cry-5\">Far Cry 5</a> as my next game. I had started it several years ago but got distracted by something. Some of it feels a little too close to home given some of the politics here in America. Part of me also chose it since it was recently <a href=\"https://www.polygon.com/far-cry-tv-series-hulu-alien-earth/\">announced that Rob Mac &amp; Noah Hawley are creating a TV series on the series.</a>.</p>\n<h2>Cooking</h2>\n<h3>Braised Boneless Beef Short Ribs</h3>\n<p>We had found some boneless short ribs reduced in price at Wegmans and found what looked like a good <a href=\"https://simplymadeeats.com/7900/oven-baked-boneless-beef-short-ribs/\">recipe</a> for them. The short ribs were tender and turned out really well. We had them with some fresh asparagus and mashed potatoes. It ended up working out too because the leftovers were my Thanksgiving dinner.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-30T16:59:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/power-companies-are-using-ai-to-build-nuclear-power-plants/",
      "url": "https://kpwags.com/notes/power-companies-are-using-ai-to-build-nuclear-power-plants/",
      "title": "Power Companies Are Using AI To Build Nuclear Power Plants",
      "content_html": "\n\t\t<blockquote>\n<p>Khlaaf pointed to Three Mile Island as an example of an entirely human-made accident that AI may replicate. The accident was a partial nuclear meltdown of a Pennsylvania reactor in 1979. “What happened is that you had some equipment failure and design flaws, and the operators misunderstood what those were due to a combination of a lack of training…that they did not have the correct indicators in their operating room,” Khlaaf said. “So it was an accident that was caused by a number of relatively minor equipment failures that cascaded. So you can imagine, if something this minor cascades quite easily, and you use a large language model and have a very small mistake in your design.”</p>\n</blockquote>\n<p>File this under &quot;what could possibly go wrong?&quot;</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-25T17:52:36Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/11/25/concerts-and-live-music/",
      "url": "https://kpwags.com/posts/2025/11/25/concerts-and-live-music/",
      "title": "Concerts &amp; Live Music",
      "content_html": "\n\t\t<p>I recently added a <a href=\"https://kpwags.com/music/concerts/\">concerts</a> page to my site. I've been keeping track of the number of times I've seen bands and decided it might be a neat thing to visualize as a page on my site. The list of concerts isn't complete, nor is the list of bands I've seen, but I can't remember everything.</p>\n<p>Every time I go to a show now I keep track of who I'm seeing as well as the opening acts. I often remember the headliners, but don't always remember the opening acts. I make a note to see about checking them out after the show. I've sometimes found it can be hard to judge a band if the first time you've heard them was live. Sometimes they jump out as amazing, other times not as much.</p>\n<p>An example is the first time I saw The Arkells live was when they were opening for Frank Turner. The audio mixing was off for their set and I want to say one of the guitars was drowning out the rest. I sadly couldn't really get into their set, but could sort of tell they had some catchy songs. I brought them up on Spotify (or whatever streaming service I was using at the time) and found that I did like their music. Luckily for me I went to see Frank Turner again a couple months later and The Arkells were opening for them again, and this time, the volume levels were much better and they put on a great set. I even got to meet and chat with Max, their lead singer and rhythm guitarist after their set. I have a picture with him somewhere, though the dark venue makes the photo kind of lousy.</p>\n<p>I want to make sure I'm not writing off any band too early. Some bands put on great sets and I'm immediately drawn to them. Others put on good sets, but their vibe doesn't quite resonate with me. Sometimes, their music is better than their sets. It's a whole spectrum.</p>\n<p>I've been to a bunch of shows this fall. I saw Dave Hause twice Labor Day weekend, Lucero &amp; The Menzingers in September. I was supposed to see Dave Hause again last weekend but got sick and had to miss the show. All of these had headliners I went for, but each had opening acts that put on good shows that didn't have the same name recognition (at least for me). I've found a few new bands I've liked and many cases, took advantage of a few Bandcamp Fridays for.</p>\n<p>I mention this, because I want to go to more shows in 2026. There are some local venues that are active in the music scene. I think it'd be fun to check out and support some smaller acts. It's also nice that the venues are close by and don't require us to go into Philly (don't get me wrong, I love Philadelphia, but with where we live, it can be a pain to get in and out of the city).</p>\n<p>I'm hoping to add to the list of shows and bands I've seen next year. I already have tickets to a Menzingers show at the end of January and a <a href=\"https://singushomefestival.com/\">3 day music festival</a> in Philly in May, so I'm off to a good start!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-25T14:37:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/148/",
      "url": "https://kpwags.com/reading-log/148/",
      "title": "Reading Log - November 24, 2025 (#148)",
      "content_html": "\n\t\t<p>This week it's an interview with Cory Doctorow, issues with AI, and others.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.oddbird.net/2025/09/23/type-units/\">The Best CSS Unit Might Be a Combination</a> - <em>Miriam Suzanne</em></li>\n<li><a href=\"https://medienbaecker.com/articles/trusting-the-browser\">Trusting the browser</a> - <em>Thomas Günther</em></li>\n<li><a href=\"https://www.developerway.com/posts/react-state-management-2025\">React State Management in 2025: What You Actually Need</a> - <em>Nadia Makarevich</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.seangoedecke.com/taste/\">What is &quot;good taste&quot; in software engineering?</a> - <em>Sean Goedecke</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/a16z-is-funding-a-speedrun-to-ai-generated-hell-on-earth/\">a16z Is Funding a 'Speedrun' to AI-Generated Hell on Earth</a> - <em>Emanuel Maiberg</em></li>\n<li><a href=\"https://www.404media.co/a16z-backed-startup-sells-thousands-of-synthetic-influencers-to-manipulate-social-media-as-a-service/\">a16z-Backed Startup Sells Thousands of ‘Synthetic Influencers’ to Manipulate Social Media as a Service</a> - <em>Emanuel Maiberg</em></li>\n<li><a href=\"https://www.anildash.com/2025/11/14/wanting-not-to-want-ai/\">I know you don’t want them to want AI, but...</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/business/burger-king-braces-for-the-demise-of-the-penny-967e00c5\">Burger King Braces for the Demise of the Penny</a> - <em>Heather Haddon</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://defector.com/lance-armstrong-and-the-myth-of-the-natural-body\">Only If You Get Caught: Lance Armstrong And The Myth Of The Natural Body</a></li>\n<li><a href=\"https://www.theverge.com/podcast/809081/enshittification-cory-doctorow-platforms-ai-monopoly-big-tech-interview\">Decoder: How Silicon Valley enshittified the internet</a></li>\n<li><a href=\"https://www.404media.co/the-video-game-industrys-existential-crisis-with-jason-schreier/\">404 Media Podcast: The Video Game Industry’s Existential Crisis (with Jason Schreier)</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/articles/the-democratic-party-spam-machine\">The Democratic Party's Spam Machine</a> - <em>On the Media</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://charity.wtf/2025/07/09/thoughts-on-motivation-and-my-40-year-career/\">Thoughts on Motivation and My 40-Year Career</a> - <em>Charity Majors</em></li>\n<li><a href=\"https://gregmorris.co.uk/the-weight-is-optional/\">The Weight Is Optional</a> - <em>Greg Morris</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Cocaine &amp; Lexapro</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/-mgMCG53z3g\" title=\"Spanish Love Songs - Cocaine & Lexapro\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-24T23:50:12Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/75/",
      "url": "https://kpwags.com/week-note/75/",
      "title": "Week Notes for November 9 - 22 (#75)",
      "content_html": "\n\t\t<p>Double week issue here with my trip to New York City last weekend. Though outside the trip, it's been a quiet two weeks.</p>\n<h2>New York City</h2>\n<p>My wife and I took a long weekend to the Big Apple last weekend. We stayed in a hotel near Bryant Park and enjoyed a quiet weekend wandering around the city. The weather was a little on the chilly side, but was still enjoyable.</p>\n<h2>Stupid Cold</h2>\n<p>This past week I've been battling a cold. A nasty cough has kept me home and resting. Not sure where exactly I caught it. New York is certainly a likely possibility but it made it a quiet week.</p>\n<h2>Jedi: Survivor</h2>\n<p>I've been playing a lot of Jedi: Survivor. I loved Jedi: Outcast and this is a good sequel. It is so satisfying force pulling a Stormtrooper towards you and then slicing him up with your lightsaber. The story of the first game was good and the second has been enjoyable so far. I'd highly recommend it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-24T02:19:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/11/20/dogs-and-airtags/",
      "url": "https://kpwags.com/posts/2025/11/20/dogs-and-airtags/",
      "title": "Dogs and AirTags",
      "content_html": "\n\t\t<p>Something that makes me chuckle but also makes me sad is dogs and AirTags.</p>\n<p>We put an AirTag on Tess's collar in the off-chance she gets away from us. It's attached neatly to her collar and it gives us some peace of mind knowing it's another tool to help us find her should the need arise. One thing that has made me chuckle, but also go &quot;awww...&quot; is when we drop her off at day care, the groomers or to be boarded, and we get the following notification:</p>\n<blockquote>\n<p>Tess has been left behind.</p>\n</blockquote>\n<div style=\"font-size:2rem\">🥹 😢 😭</div>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-20T22:33:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/11/19/i-want-dumb-things/",
      "url": "https://kpwags.com/posts/2025/11/19/i-want-dumb-things/",
      "title": "I Want Dumb Things",
      "content_html": "\n\t\t<p>Look, fancy features are nice and all, but you know what I really want? I want the appliances and other gear I buy and own to be as dumb as a back of bricks.</p>\n<p>I recently read about how <a href=\"https://arstechnica.com/gadgets/2025/09/samsung-forces-ads-onto-fridges-is-a-bad-sign-for-other-appliances/\">Samsung was putting ads onto its $3,000+ refrigerators</a>. I have several thoughts about that. One, why does a fridge need a screen? Seriously, I want my refrigerator to keep my milk cold and my ice cream frozen. I don't need a screen for that, I have one in my pocket. Two, why does a fridge need wifi? Are they trying to subscribe you to some kind of refrigerator subscription or hold your milk hostage? Pay us $20 a month or your milk gets warm and your ice cubes melt. Three, ads for someone who just shelled out 3 grand on a fridge? Do you want to drive your customers away. Okay, maybe not everyone can just go out and get a new fridge right away, but if they paid $3k for one, maybe they're in the group that can. If not, you're basically going to be driving away any future customers.</p>\n<p>It was an expensive start to the year for me when we ended up having to replace our dishwasher, washer, and dryer. I wasn't a fan of having to buy three large appliances in the span of a couple months. But I'll tell you one thing, I wanted them all to be as dumb as possible. I didn't want push notifications telling me when the dishes were done, I didn't need a washer to alert me that it was time to switch my laundry. I want them to wash dishes, wash my clothes, and dry my clothes. Any smart features would just increase the cost and be something else that might break later down the line and I don't trust them to be built such that the &quot;smart&quot; features breaking would not also cause more necessary features to also break.</p>\n<p>I know this probably makes me sound like a Luddite or someone who hates technology. I'm not, I enjoy technology (most of the time anyway), I just don't need everything to have a wifi connection or other smart features. I need them to do what they're supposed to do and work.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-19T00:25:50Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/emily-m-bender-alex-hanna-the-ai-con/",
      "url": "https://kpwags.com/books/emily-m-bender-alex-hanna-the-ai-con/",
      "title": "Book Notes for The AI Con: How to Fight Big Tech&#39;s Hype and Create the Future We Want",
      "content_html": "\n\t\t<p>This was a fascinating read about a little bit of the history or the current AI hype and many of its problems. It did a fantastic job of digging into what the different tools being hyped actually are as well as the basics on how they work, and why they aren't as &quot;powerful&quot; as they seem. They point out the issues many of these tools have with built-in biases, the costs of the creatives behind the tooling and many of the downstream negative effects.</p>\n<p>As the ending of chapter 4 put it.</p>\n<blockquote>\n<p>Input a set of symptoms, and what comes out looks like a diagnosis. Input a legal query, and what comes out looks like a contract or a legal brief. Input a school subject and a request for a lesson plan on literally anything, and what comes out will look like a set of facts that you can teach students and exercises to have them do. We empathize with the people on the ground, teachers, physician's assistants, and paralegals, among many other professionals faced with great need, and insufficient resources, wanting to believe that these systems actually work. But we have no empathy for powerful interests looking to shirk taxes, nor the forces within government who respond by shredding the social safety net and pushing so-called AI as a cheap replacement. And we have nothing but scorn for the would be creators of AI, tech philanthropists, and their allies who claim to be acting in the interests of everyone, pointing to real needs in the world and selling their tech as a solution. But that solution is only poor facsimiles of welfare services, healthcare providers, legal aid, and educators. Facsimiles that the tech barons would never rely on for their own families. Just because you've identified a social problem doesn't mean LLMs or any other kind of so-called AI are a solution. When someone says so, the problem is usually better understood by widening the lens, looking at if from its broader context. As Shankar Narayan, the tech and liberty project director for ACLU of Washington asked regarding biased recidivism prediction systems, &quot;Why are we asking who is most likely to reoffend, rather than what do these people need to give theme the best chance of not reoffending.&quot; Likewise, when someone suggest a robodoctor, robotherapist, or a roboteacher, we should ask, &quot;Why isn't there enough money for public clinics, mental health counseling, and schools?&quot;. Text synthesis machines can't fill holes in the social fabric. We need people, political will, and resources.</p>\n</blockquote>\n<p>I'd recommend this book to anyone who's looking to get a little more context in the environment we're in with all these AI tools being introduced.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/147/",
      "url": "https://kpwags.com/reading-log/147/",
      "title": "Reading Log - November 10, 2025 (#147)",
      "content_html": "\n\t\t<p>Not much this week. Some thoughts on personal websites, browser APIs and CSS.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://denodell.com/blog/we-keep-reinventing-css\">We Keep Reinventing CSS, but Styling Was Never the Problem</a> - <em>Den Odell</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/browser-apis-as-sass/\">Browser APIs: The Web’s Free SaaS</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.laurahilliger.com/writing/my-website-is-a-junk-drawer/\">My website is a junk drawer</a> - <em>Laura Hilliger</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Prophets of Rage - Living on the 110</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/PzAvPcM7Vw0\" title=\"Prophets of Rage - Living on the 110\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-10T21:29:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/74/",
      "url": "https://kpwags.com/week-note/74/",
      "title": "Week Notes for November 2 - 8 (#74)",
      "content_html": "\n\t\t<p>It was a quiet week at home. My wife was away for work for most of it so it was just me and Tess holding down the fort.</p>\n<h2>Home Alone</h2>\n<p>It's not very often I have the house to myself for a length of time. My wife was away for work so I was left to hold down the fort at home with Tess. It was a quiet week, but I celebrated Tess' 2nd birthday by giving her extra love and treats.</p>\n<h2>Hockey</h2>\n<p>I had back-to-back nights of hockey Monday &amp; Tuesday. Monday's game I was in net and we won 5-1. It was a fantastic team effort, everyone playing well.</p>\n<p>Tuesday's game was a rough 4-1 loss. They took advantage of some mistakes in the 2nd period and we struggled to get passes and make good on our opportunities.</p>\n<h2>Writing and Side Project Distractions</h2>\n<p>I started out the month well with writing, but have since slackened off a bit. I got distracted starting back up on a side project and have dedicated a little too much time on that.</p>\n<h2>Completed Expedition 33</h2>\n<p>I ended up completing Expedition 33 in the nick of time. I enjoyed it but kind of felt like I missed out some on the story since I took such long breaks between play sessions. It was on sale in the PlayStation store though, so I did pick it up. Might do another play through to have a better experience.</p>\n<h2>Cooking</h2>\n<h3>Impossible Chili</h3>\n<p>Since it was only me, I was a little lazy and just made chili in the slow cooker. I used Impossible ground beef rather than actual ground beef. I've made it before, but this time around it didn't turn out the greatest. It tasted like it needed a little more time despite it being in the slow cooker for 8 hours.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-09T16:41:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/11/05/october-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/11/05/october-2025-check-in/",
      "title": "October 2025 Check-In",
      "content_html": "\n\t\t<p>I finally was able to enjoy a vacation this month, a much needed vacation. Other than that, it was a mostly quiet month.</p>\n<h2>Vacation</h2>\n<p>We went to Cape May for just under a week for a vacation and to celebrate our anniversary. We've been married for 12 years now and it's still kind of hard to believe it's been that long (in a good way). It doesn't feel like it's been that long, but I can't imagine my life without her as my wife.</p>\n<p>We stayed in the amazing Congress Hall and had an amazing view from our room. You can't beat waking up and looking out at the ocean.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/eFkuYUVSDl-1512.webp 1512w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/eFkuYUVSDl-1512.gif 1512w\" /><img alt=\"View from my hotel window, a pool and the ocean in the distance\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/eFkuYUVSDl-1512.jpeg\" width=\"1512\" height=\"2016\" /></picture></p>\n<h2>I-League Hockey Season Starts Back Up</h2>\n<p>We're now 3 games in to the season in the other league I play in. I play goalie in this one and we're a respectable 2-1. We lost the first game in a close one 3-1. I missed the next one while I was in Cape May, but the team won that one 3-1. The third game did not go well for me, but the team bailed me out and we ended up coming from behind and winning 7-6. It's an 8 game regular season, so we're off to a good start, but still plenty of games to go. I'm feeling good despite my lackluster performance in the last game.</p>\n<h2>Writing</h2>\n<p>I took advantage of the quiet time at wineries and breweries, as well as the veranda at Congress Hall with my iPad to write. I didn't get as much done as I had hoped, but still got words to paper which is important.</p>\n<h2>Site Updates &amp; Bombers Hockey Website</h2>\n<p>I finished my site updates and got them deployed. Not too much has changed from a visual perspective. I cleaned up a lot of the 11ty code and the CSS. Let me know if you see something off.</p>\n<p>I also ended up building a <a href=\"https://bombershockey.org/\">website for my Bombers team</a>, also in 11ty. It's nothing fancy, but why not, we've been around for 8 years now.</p>\n<h2>Mad Dash to Finish Expedition 33</h2>\n<p>I'm in a mad dash to finish Expedition 33 before my Game Pass subscription expires. I've enjoyed the game, though I'm worried all the breaks I've taken will hurt my understanding of the story's finale. Still gonna push through. Can always purchase it for another play-through. It's apparently a good game for that which I can appreciate, though my large backlog is beckoning.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>12</span> runs - <span>48.13</span> miles</li>\n<li><strong>Walking:</strong> <span>22</span> walks - <span>20.48</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>1</span> sessions - <span>12,525</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://doylestownbookshop.com/book/9781683693062\">Whisper Down the Lane</a> by Clay McLeod Chapman</li>\n<li>Finished <a href=\"https://doylestownbookshop.com/book/9781683693789\">Ghost Eaters</a> by Clay McLeod Chapman</li>\n<li>Finished <a href=\"https://doylestownbookshop.com/book/9781683693956\">Wake Up and Open Your Eyes</a> by Clay McLeod Chapman</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/stories-are-weapons-psychological-warfare-and-the-american-mind-annalee-newitz/5dadea9e83b77a8a\">Stories Are Weapons: Psychological Warfare and the American Mind</a> by AUTHOR</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/why-fascists-fear-teachers-public-education-and-the-future-of-democracy-randi-weingarten/86407292f508ba9e\">Why Fascists Fear Teachers: Public Education and the Future of Democracy</a> by AUTHOR</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/automatic-noodle-annalee-newitz/625018d0518991aa\">Automatic Noodle</a> by AUTHOR</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/inferno-the-world-at-war-1939-1945-max-hastings/15283304\">Inferno: The World at War, 1939-1945</a> by Sir Max Hastings</li>\n<li>Started <a href=\"https://bookshop.org/p/books/armageddon-the-battle-for-germany-1944-1945-max-hastings/8519135\">Armageddon: The Battle for Germany, 1944-1945</a> by Sir Max Hastings</li>\n<li>Started <a href=\"https://bookshop.org/p/books/acquired-taste-clay-mcleod-chapman/2d97fa26f163e8c5\">Acquired Taste</a> by Clay McLeod Chapman</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/143/\">October 6 (#143)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/144/\">October 13 (#144)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/145/\">October 27 (#145)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/70/\">September 28 - October 4 (#70)</a></li>\n<li><a href=\"https://kpwags.com/week-note/71/\">October 5 - 11 (#71)</a></li>\n<li><a href=\"https://kpwags.com/week-note/72/\">October 12 - 25 (#72)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote a bit more <a href=\"https://kpwags.com/posts/2025/10/01/an-addendum-to-building-my-new-archives-page/\">about my new archives page</a></li>\n<li>Thought about another <a href=\"https://kpwags.com/posts/2025/10/02/as-if-we-needed-another-wwii-comparison/\">WWII comparison</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/10/03/the-safety-of-what-you-know/\">safety in what you know</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/10/07/wishing-i-didnt-need-ad-and-tracker-blockers/\">how annoying it is to need to block ads</a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2025/10/14/constant-default-app-switching/\">never being able to make up my mind on apps</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/10/16/windows-10-end-of-life-linux-other-thoughts/\">Windows 10 and Linux</a></li>\n<li>Thought about how <a href=\"https://kpwags.com/posts/2025/10/28/feeling-a-bit-restless/\">I'm sometimes feeling restless</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/10/30/thankful-for-my-parents/\">how thankful I am for my parents</a></li>\n<li>Talked about <a href=\"https://kpwags.com/posts/2025/10/31/cracking-down-again/\">revisiting my diet</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/10/31/happy-halloween/\">a happy Halloween message</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.expedition33.com/\">Expedition 33</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-05T00:19:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/11/05/moving-more-analog/",
      "url": "https://kpwags.com/posts/2025/11/05/moving-more-analog/",
      "title": "Moving More Analog",
      "content_html": "\n\t\t<p>Lately I've been considering more about how I interact with technology. The one thing that I've been bouncing back and forth with most is an app like Obsidian for notes and pen and paper.</p>\n<p>For several years now I've been journaling before bed (or some days right after I wake up the next morning). I find it calming to write down what I did each day, what I was thinking, what's on my mind. Life's always so crazy that it feels almost cathartic to just write about my day. For the better part of this time, I've been writing it down by hand in notebooks rather than digitally. For this and for me, there really is something about the act of physical writing that calms me. In case anyone is wondering, my current journal is a <a href=\"https://www.leuchtturm1917.us/120g-edition.html\">LEUCHTTURM1917 120G Edition</a> and I use a <a href=\"https://www.lamy.com/en-us/p/lamy-safari-fountain-pen/52925295952206\">Lamy Safari Fountain Pen</a>.</p>\n<p>Now I've been extending my use of notebooks for both lifting and my book note taking.</p>\n<p>I've used apps to track my lifts in the past. I've used Strong and others, but for a while now, I've been using pen and paper. Since the weights I lift for each session are calculated, apps aren't always able to properly handle calculating what I am targeting each set. They make specialized apps for routines I run or ran in the past, but they're targeted for the specific routine and aren't really general purpose. Enter pen and paper. Nothing specific there. Just list the exercises you want to do, the weight, and boom, you're off. I do use a spreadsheet to help calculate the volume I lift and to help with calculations, but then I transfer what I hope to accomplish each workout to the notebook to enter while I'm lifting. It's certainly better than trying to enter data into spreadsheets on a mobile device, that's for sure. I also have been trying to use less screens and it's easy enough to just note it down in the notebook. The notebooks have definitely outlasted several spreadsheets and routines.</p>\n<p>I read a lot of non-fiction. I'm going to sound like a huge nerd here, but I don't care. I've started taking notes about some of the books I've read. It sometimes feels like I'm in school again, but in this case, I get to decide what books I read, and while I rarely don't finish a book I start, I can if I choose to. Anyway, I've been taking notes when I find a tidbit or quote I find interesting or want to remember. I had been doing it in Obsidian, but I recently decided I'd switch to pen and paper for tis as well. More often than not I'm reading before bed and it's another time when I've been trying to avoid screens. Screens are supposedly not so great before bed, plus you're supposed to remember things better when you physically write them down.</p>\n<p>The digital world is certainly amazing. I'm writing this on a laptop connected to a nearly unlimited network where I have anything I'd want to know or do at my fingertips. Sometimes though, something physical, something you can touch with your fingers is where it's at.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-05T00:09:35Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/146/",
      "url": "https://kpwags.com/reading-log/146/",
      "title": "Reading Log - November 3, 2025 (#146)",
      "content_html": "\n\t\t<p>A smattering of everythign this week. More concerns with vibe coding, love for RSS, private equity hurting libraries and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.milanjovanovic.tech/blog/vertical-slice-architecture-is-easier-than-you-think\">Vertical Slice Architecture Is Easier Than You Think</a> - <em>Milan Jovanović</em></li>\n<li><a href=\"https://visualstudiomagazine.com/articles/2025/09/22/confirmed-finally-again-no-visual-studio-ide-for-linux-macos.aspx\">Confirmed, Finally, Again: No Visual Studio IDE for Linux/macOS</a> - <em>David Ramel</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.developerway.com/posts/local-storage-instead-of-context\">Can We Use Local Storage Instead of Context-Redux-Zustand?</a> - <em>Nadia Makarevich</em></li>\n<li><a href=\"https://lyra.horse/blog/2025/08/you-dont-need-js/\">You no longer need JavaScript</a> - <em>Rebane</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/dont-forget-these-html-tags/\">Don’t Forget These Tags to Make HTML Work Like You Expect</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://overreacted.io/open-social/\">Open Social</a> - <em>Dan Abramov</em></li>\n<li><a href=\"https://blog.burkert.me/posts/in_praise_of_syndication/\">In Praise of RSS and Controlled Feeds of Information</a> - <em>Tom Burkert</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://brilliantcrank.com/leave-the-token-counting-for-chuck-e-cheese/\">Leave the token counting for Chuck-E-Cheese.</a> - <em>Greg Storey</em></li>\n<li><a href=\"https://hackernoon.com/vibe-coding-is-creating-a-generation-of-unemployable-developers\">Vibe Coding is Creating a Generation of Unemployable Developers</a> - <em>Paolo Perrone</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.404media.co/libraries-scramble-for-books-after-giant-distributor-shuts-down/\">Libraries Scramble for Books After Giant Distributor Shuts Down</a> - <em>Claire Woodcock</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/the-day-the-browns-crafted-a-playbook-entirely-out-of-spite\">The Day The Browns Crafted A Playbook Entirely Out Of Spite</a> - <em>Vince Guerrieri</em></li>\n<li><a href=\"https://defector.com/the-nbas-rookie-class-is-getting-straight-to-work\">The NBA's Rookie Class Is Getting Straight To Work</a> - <em>Patrick Redford</em></li>\n<li><a href=\"https://defector.com/the-nba-media-is-not-built-to-cover-a-gambling-scandal\">The NBA Media Is Not Built To Cover A Gambling Scandal</a> - <em>Patrick Redford</em></li>\n<li><a href=\"https://defector.com/the-commanders-d-c-stadium-deal-is-an-abomination\">The Commanders' D.C. Stadium Deal Is An Abomination</a> - <em>Chris Thompson</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/10/22/nx-s1-5581445/no-ai-data-centers-in-my-backyard\">The Indicator: No AI data centers in my backyard!</a></li>\n<li><a href=\"https://www.npr.org/2025/10/23/nx-s1-5582775/are-concert-tickets-under-priced\">The Indicator: Are concert tickets UNDER priced?</a></li>\n<li><a href=\"https://slate.com/podcasts/what-next-tbd/2025/10/taking-music-from-spotify-in-protest\">What Next: TBD: Why Bands Are Leaving Spotify</a></li>\n<li><a href=\"https://slate.com/podcasts/what-next/2025/10/sports-betting-and-other-legal-scams\">What Next: Where Sports Betting Got Us</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/09/19/how-maga-killed-foreign-influence-research-but-now-demands-social-media-stop-foreign-influence-campaigns/\">How MAGA Killed Foreign Influence Research, But Now Demands Social Media Stop Foreign Influence Campaigns</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://pluralistic.net/2025/09/22/one-throat-to-choke/\">It's still censorship (even if it doesn't violate the First Amendment)</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.404media.co/how-artists-are-keeping-the-lost-art-of-neon-signs-alive/\">How Artists Are Keeping 'The Lost Art' of Neon Signs Alive</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://joshs.bearblog.dev/being-good-isnt-enough/\">Being good isn’t enough</a> - <em>Josh Swords</em></li>\n<li><a href=\"https://www.joanwestenberg.com/p/why-you-should-write-every-day-even-if-you-re-not-a-writer\">Why You Should Write Every Day (Even if You’re Not a Writer)</a> - <em>JA Westenberg</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - Came Out Swinging (f/ Joe Taylor of Knuckle Puck)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_aqem-UrGpQ\" title=\"The Wonder Years - Came Out Swinging (f/ Joe Taylor of Knuckle Puck)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-03T23:30:09Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/73/",
      "url": "https://kpwags.com/week-note/73/",
      "title": "Week Notes for October 26 - November 1  (#73)",
      "content_html": "\n\t\t<p>After a week off on vacation, getting back into the grind of the real world is kind of a letdown.</p>\n<h2>Back to Work</h2>\n<p>Had a full week of work. I like my job, but I still miss being on vacation.</p>\n<h2>Back to Back Hockey Games</h2>\n<p>After missing 2 games on vacation, I ended up playing twice Monday night. I subbed for another team and had a shutout going until the final minute when they snuck one in. Won 5-1 anyway, though it was mostly because of solid defensive play in front of me.</p>\n<p>Second game was for my team. We won 7-6 after a 3rd period comeback. I played like crap most of the game, but got bailed out by my teammates with 6 goals in the final period.</p>\n<h2>Cracking Down Some</h2>\n<p>As <a href=\"https://kpwags.com/posts/2025/10/31/cracking-down-again/\">mentioned</a>, my weight has been ticking up so it's time to be a little more cognizant of my diet. Life's too short to give up everything, but still gotta try to eat a bit healthier.</p>\n<h2>Site Updates Out</h2>\n<p>I finished my site update and deployed it. The changes aren't extensive, but I like how the code is organized better. Let me know if you notice anything off.</p>\n<h2>Halloween</h2>\n<p>It was a chilly, windy night, but my wife and I sat on our porch to give out candy. We even had Tess out with us for a while until she got bored and seemed to want to go inside. We didn't have that many kids this year so we have way too much candy left over. My goal of cracking down on my diet will be tested.</p>\n<h2>Novel Writing</h2>\n<p>I'm going to try again to focus on my novel this November. I tried last year, but Trump's election sort of screwed up my focus. It's not all that great this year, but we'll see how it goes. My goal isn't so much to finish it, so much as it is to write 1,200 words a day with a 36,000 word goal for the month. I figure that's doable and would get a good chunk of words to paper, which is what it's all about.</p>\n<h2>Cooking</h2>\n<p>I'm going to try adding some of the things I've been cooking. I've been trying to cook new recipes more and figured maybe share some of what I've been trying.</p>\n<h3>Ropa Vieja</h3>\n<p>I tried a new slow cooker meal this week. I tried a <a href=\"https://www.themagicalslowcooker.com/slow-cooker-ropa-vieja/\">Ropa Vieja</a> dish (minus the olives). It was fine. It turned out well but didn't particularly <em>wow</em> me. It was an easy meal though which had that going for it. Made a lot for leftovers as well which is appreciated.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-11-02T15:28:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/31/happy-halloween/",
      "url": "https://kpwags.com/posts/2025/10/31/happy-halloween/",
      "title": "Happy Halloween",
      "content_html": "\n\t\t<p>Hope everyone has a happy and spooky Halloween!</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/STzwV5heV6-1512.webp 1512w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/STzwV5heV6-1512.gif 1512w\" /><img alt=\"My pumpkin carved this year as the poop emoji\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/STzwV5heV6-1512.jpeg\" width=\"1512\" height=\"2016\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-31T12:29:07Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/31/cracking-down-again/",
      "url": "https://kpwags.com/posts/2025/10/31/cracking-down-again/",
      "title": "Cracking Down Again",
      "content_html": "\n\t\t<p>I’ve been looking at the scale lately and I haven’t liked what I’ve seen. I think it’s time for me to cut back on my food intake and do better at what I eat.</p>\n<p>My weight’s been creeping up lately and it’s definitely my own fault. I’ve been eating more and enjoying a beer or two a little more often, and my workouts aren’t going to overcome that. As the saying goes,</p>\n<blockquote>\n<p>You can’t outrun a bad diet.</p>\n</blockquote>\n<p>It’s the truth. I know it’s coming up on the holiday season, but it’s about time for me to buckle down and better consider my diet.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-31T12:22:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/30/thankful-for-my-parents/",
      "url": "https://kpwags.com/posts/2025/10/30/thankful-for-my-parents/",
      "title": "Thankful for My Parents",
      "content_html": "\n\t\t<p>I didn't always get along with my parents. I very often thought they were too strict and were getting in my way of having fun. Now, 20+ years later from my teenage years, I guess maturity has a way of making you rethink things and count your blessings.</p>\n<p>I remember reading about the NHL Player <a href=\"https://deadspin.com/how-jack-johnsons-parents-screwed-him-and-left-him-mill-1663583325/\">Jack Johnson</a> and his financial woes. He signed a 7 year contract in 2011 worth over $30 million and had his parents help him handle his finances. Instead of actually helping him, they took out loans in his name and used his money to buy cars, homes, and who knows what else. It was so bad he had to declare bankruptcy. I never got that kind of money, but if I did that young, I know I could trust my parents to either handle it responsibly, or more likely, point me in the right direction on <em>how</em> to handle it.</p>\n<p>The older I get, the more fortunate I know I am having two wonderful parents who love me and have always done what was best for me, even when I didn't.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-30T13:28:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/vibe-coding-is-creating-a-generation-of-unemployable-developers/",
      "url": "https://kpwags.com/notes/vibe-coding-is-creating-a-generation-of-unemployable-developers/",
      "title": "Vibe Coding is Creating a Generation of Unemployable Developers",
      "content_html": "\n\t\t<blockquote>\n<p>But it’s a trap. Vibe coding doesn’t create developers; it creates <em>fragile intermediaries</em>. People who can generate code but cannot read, debug, or maintain it.</p>\n<p>If you’re a new developer, this isn’t a shortcut. It’s a cliff. And you’re being encouraged to run straight toward it.</p>\n</blockquote>\n<p>There's a reason people are offering services cleaning up vibe code...and getting hired to do just that. Learning the basics is important, use AI to supplement your coding if you must, but know how code works.</p>\n<blockquote>\n<p>The result is a dangerous illusion of competence. You can generate output, but you cannot command it. When it breaks (and it will), you have no map, no tools, and no idea why. This isn’t coding: it’s <strong>outsourcing your own understanding</strong>.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-30T13:27:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/no-ai-is-not-making-engineers-10x-as-productive/",
      "url": "https://kpwags.com/notes/no-ai-is-not-making-engineers-10x-as-productive/",
      "title": "No AI is not Making Engineers 10x as Productive",
      "content_html": "\n\t\t<blockquote>\n<p>Eventually every vibe coder reaches the point where the returns start heavily diminishing. Their site gets hacked and they need to actually sink the time to learn how security works. The app gets too big for context windows and things start looking and functioning inconsistently. Real frontend engineers who know what they are doing are hired to implement a consistent design system and UX.</p>\n</blockquote>\n<p>I think that's the biggest thing with vibe coding, you want to build a simple little tool for yourself, it can probably work well enough. Want to build a new SaaS product...whelp...good luck with that.</p>\n<blockquote>\n<p>There is no secret herbal medicine that prevents all disease sitting out in the open if you just follow the right Facebook groups. There is no AI coding revolution available if you just start vibing. You are not missing anything. Trust yourself. You are enough.</p>\n<p>Oh, and don't scroll LinkedIn. Or Twitter. Ever.</p>\n</blockquote>\n<p>Always good advice.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-30T13:26:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/28/feeling-a-bit-restless/",
      "url": "https://kpwags.com/posts/2025/10/28/feeling-a-bit-restless/",
      "title": "Feeling a Bit Restless",
      "content_html": "\n\t\t<p>I'm not sure whether its because it's the first week back from vacation or maybe the change in the weather, but over the last several days I've just been feeling restless and aimless.</p>\n<p>I had told myself getting back from vacation I was going to crack down and get some blog posts written as I'm hoping to focus on my novel come November, but want to have some drafts ready to finalize and post as to keep pushing for my goal of 100 posts for the year. Tonight is the first night since getting back that I've actually sat down and focused on writing. And even this took some effort.</p>\n<p>I still need to beat Expedition 33 before my Game Pass subscription ends next weekend, but I don't even feel like doing that.</p>\n<p>I get in these weird funks from time to time so I'm not terribly concerned. It will pass, just want to feel productive or motivated and for whatever reason, that's just not meant to be this week.</p>\n<p>I'm still enjoying my nights on the couch before bed reading, so I guess there's that. I'm almost done my 60th book of the year. It's still kind of crazy I've read that much this year.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-28T23:05:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/react-won-by-default-and-its-killing-frontend-innovation/",
      "url": "https://kpwags.com/notes/react-won-by-default-and-its-killing-frontend-innovation/",
      "title": "React Won By Default - And It’s Killing Frontend Innovation",
      "content_html": "\n\t\t<blockquote>\n<p>When teams need a new frontend, the conversation rarely starts with “What are the constraints and which tool best fits them?” It often starts with “Let’s use React; everyone knows React.” That reflex creates a self-perpetuating cycle where network effects, rather than technical fit, decide architecture.</p>\n</blockquote>\n<p>I'd be lying if I said that my knowledge of React makes it a quick choice.</p>\n<blockquote>\n<p>React’s dominance creates self-reinforcing barriers. Job postings ask for “React developers” rather than “frontend engineers,” limiting skill diversity. Component libraries and team muscle memory create institutional inertia.</p>\n<p>Risk-averse leaders choose the “safe” option. Schools teach what jobs ask for. The cycle continues independent of technical merit.</p>\n<p>That’s not healthy competition; it’s ecosystem capture by default.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-27T17:22:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/145/",
      "url": "https://kpwags.com/reading-log/145/",
      "title": "Reading Log - October 27, 2025 (#145)",
      "content_html": "\n\t\t<p>Two weeks worth of articles and podcasts this week.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/using-and-authoring-dotnet-tools/\">Using and authoring .NET tools</a> - <em>Andrew Lock</em></li>\n<li><a href=\"https://platform.uno/blog/the-gaps-and-richness-of-the-net-ecosystem/\">The Gaps and Richness of the .NET Ecosystem</a> - <em>Sam Basu</em></li>\n<li><a href=\"https://dev.to/iamcymentho/entity-framework-core-isnt-slow-youre-just-using-it-wrong-308i\">Entity Framework Core Isn’t Slow; You’re Just Using It Wrong</a> - <em>Odumosu Matthew</em></li>\n<li><a href=\"https://blog.nimblepros.com/blogs/the-value-of-custom-exceptions/\">The Value of Custom Exceptions</a> - <em>Scott DePouw</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://drewdevault.com/2025/09/17/2025-09-17-An-impossible-future-for-JS.html\">A better future for JavaScript that won't happen</a> - <em>Drew DeVault</em></li>\n<li><a href=\"https://www.lorenstew.art/blog/react-won-by-default/\">React Won By Default - And It’s Killing Frontend Innovation</a> - <em>Loren Stewart</em></li>\n<li><a href=\"https://piccalil.li/blog/taking-a-shot-at-the-double-focus-ring-problem-using-modern-css/\">Taking a shot at the double focus ring problem using modern CSS</a> - <em>Eric Bailey</em></li>\n<li><a href=\"https://allthingssmitty.com/2025/09/08/finally-safe-array-methods-in-javascript/\">Finally, safe array methods in JavaScript</a> - <em>Matt Smith</em></li>\n<li><a href=\"https://nerdy.dev/cascading-secret-sauce\">One List To Rule Them All</a> - <em>Adam Argyle</em></li>\n<li><a href=\"https://engineering.usemotion.com/moving-off-of-typescript-e7bb1f3ad091\">Moving off of TypeScript</a> - <em>Chander Ramesh</em></li>\n<li><a href=\"https://blog.logrocket.com/the-silent-shift-to-vite/\">The silent shift to Vite: What it means for your stack</a> - <em>Elijah Asaolu</em></li>\n<li><a href=\"https://sarahmhigley.com/writing/forced-color-adjust-none/\">forced-color-adjust: none is an unavoidable foot gun</a> - <em>Sarah Higley</em></li>\n<li><a href=\"https://daverupert.com/2025/10/custom-elements-manifest-killer-feature/\">The killer feature of Web Components</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://kyrylo.org/software/2025/08/21/why-do-software-developers-love-complexity.html\">Why do software developers love complexity?</a> - <em>Kyrylo Silin</em></li>\n<li><a href=\"https://www.seangoedecke.com/the-simplest-thing-that-could-possibly-work/\">Do the simplest thing that could possibly work</a> - <em>Sean Goedecke</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/idea-to-reality-with-prototypes/\">Successive Prototypes Bridge the Gap Between Idea and Reality</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://www.seangoedecke.com/the-simplest-thing-that-could-possibly-work/\">Do the simplest thing that could possibly work</a> - <em>Sean Goedecke</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://adamsilver.io/blog/your-vs-my-in-user-interfaces/\">“Your” vs “My” in user interfaces</a> - <em>Adam Silver</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/09/05/be-the-first-person/\">Why Wikipedia works</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.thisdaysportion.com/posts/contra-analytics/\">You do not need “analytics” for your blog because you are neither a military surveillance unit nor a commodity trading company</a> - <em>Leon</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/satellites-are-leaking-the-worlds-secrets-calls-texts-military-and-corporate-data/\">Satellites Are Leaking the World’s Secrets: Calls, Texts, Military and Corporate Data</a> - <em>Andy Greenberg &amp; Matt Burgess</em></li>\n<li><a href=\"https://www.anildash.com//2025/09/09/how-tim-cook-sold-out-steve-jobs/\">How Tim Cook sold out Steve Jobs</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>Cybersecurity</h2>\n<ul>\n<li><a href=\"https://this.weekinsecurity.com/why-ad-blockers-are-a-top-security-and-privacy-defense-for-everyone/\">Why ad blockers are a top security and privacy defense for everyone</a> - <em>Zack Whittaker</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.anildash.com//2025/10/17/the-majority-ai-view/\">The Majority AI View</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://colton.dev/blog/curing-your-ai-10x-engineer-imposter-syndrome/\">No, AI is not Making Engineers 10x as Productive</a> - <em>Colton Voege</em></li>\n<li><a href=\"https://www.404media.co/lawyer-using-ai-fake-citations/\">Lawyer Caught Using AI While Explaining to Court Why He Used AI</a> - <em>Samantha Cole</em></li>\n<li><a href=\"https://www.404media.co/what-happened-when-ai-came-for-craft-beer-canadian-beer-awards-best-beer-app/\">What Happened When AI Came for Craft Beer</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-are-there-still-pirates-fans?giftLink=76f333b446cbb7d6c9d54f6317a2e99b&amp;utm_campaign=defector&amp;utm_medium=email&amp;utm_source=newsletter\">Why Are There Still Pirates Fans?</a> - <em>Keith Paradise</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/10/14/techdirt-podcast-episode-434-the-new-generation-of-independent-journalists/\">Techdirt Podcast: The New Generation Of Independent Journalists</a></li>\n<li><a href=\"https://defector.com/the-most-difficult-job-in-the-world-with-seth-wickersham\">The Distraction: The Most Difficult Job In The World, With Seth Wickersham</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/jamie-taylor.html\">Coffee &amp; Open Source: Jamie Taylor</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://defector.com/podcasts-are-not-television\">Podcasts Are Not Television</a> - <em>Alex Sujong Laughlin</em></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=gieTx_P6INQ\">Bari Weiss</a> - <em>Last Week Tonight with John Oliver</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/09/09/germanium-valley/\">Trump steals $400b from American workers</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://newsletter.antoniokov.com/archive/why-arent-you-a-good-fit/\">Why aren’t you a good fit?</a> - <em>Anton Iokov</em></li>\n<li><a href=\"https://www.rollingstone.com/culture/culture-features/mobile-sports-betting-gambling-addiction-fanduel-draftkings-1235444172/\">There’s Now a Casino in Everyone’s Pocket. For Some Young Men, It’s a Near-Fatal Gamble.</a> - <em>Paul Solotaroff &amp; Eli Senor</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Free Throw - Two Beers In</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/WftssJYhtqA\" title=\"Free Throw - Two Beers In\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-27T12:46:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/72/",
      "url": "https://kpwags.com/week-note/72/",
      "title": "Week Notes for October 12 - 25 (#72)",
      "content_html": "\n\t\t<p>I spent the last week in Cape May for my anniversary, so this is a double issue.</p>\n<h2>Cape May Trip</h2>\n<p>Cape May, NJ is our happy place. It's our favorite vacation spot, and we felt like it was a good spot to celebrate our wedding anniversary. We stayed in Congress Hall and had a long relaxing vacation. We took it easy for the most part and explored some of our favorite breweries and wineries in the Cape May area. It was nice to sit, enjoy some wine and beer, and read and even get some writing done.</p>\n<p>For the wineries, we went to <a href=\"https://www.hawkhavenvineyard.com/\">Hawk Haven</a> and <a href=\"https://jessiecreekwinery.com/\">Jessie Creek</a>. For the Breweries, we stopped at <a href=\"https://www.slacktidebrewingco.com/\">Slack Tide</a> and <a href=\"https://www.gustobrewco.com/\">Gusto</a>.</p>\n<p>It was a much needed vacation. We pushed off vacations this year after adopting Tess. We wanted to get her used to her new home and were hesitant to board her. Thankfully, she's gotten used to us and her new routine and home that we felt comfortable to board her for an extended period. It's her doggie day care location so she seemed to have a good time and is happy to be home.</p>\n<h2>Everything Else</h2>\n<p>The Cape May trip basically enveloped these last 2 weeks. The week before I was getting ready for the trip.</p>\n<p>My other hockey league started back up. I had to miss one game due to vacation, but the first game was hard fought, but we fell short, losing 3-1.</p>\n<p>I did spend some time building a new website for the hockey team I captain. It's a static site built in <a href=\"https://www.11ty.dev/\">11ty</a> and I'm not sure what all will get added to it. I just figured I might as well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-26T15:55:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/16/windows-10-end-of-life-linux-other-thoughts/",
      "url": "https://kpwags.com/posts/2025/10/16/windows-10-end-of-life-linux-other-thoughts/",
      "title": "Windows 10 End of Life, Linux &amp; Other Thoughts",
      "content_html": "\n\t\t<p>Windows 10 reached the end of its life this week. This means that Microsoft will no longer be providing support for Windows 10 machines. No bug fixes, no security updates, nothing. For a multitude of reasons, this sucks.</p>\n<p>As a warning, this post might meander around a bit, I have some thoughts and figure I'll just write them down, they might not always be the most organized.</p>\n<p>Windows 10 came out in July 2015. It's been around for over 10 years. In the world of software, that's actually a pretty long time. I don't think you can expect Microsoft or any other company to support an operating system forever, but the jump to Windows 11 adds some wrinkles to the mix that I believe should require some exceptions.</p>\n<p>In order to run Windows 11, the computer's hardware needs to support TPM 2.0. TPM is an acronym for Trusted Platform Module and it's a security feature built into the hardware of the computer itself. This is where the biggest wrinkle with the upgrade is. Many older machines, even some with decent specs, don't support TPM 2.0. This means that they can't upgrade to a supported Windows operating system without replacing their physical computer.</p>\n<p>This is different from previous operating system upgrades which didn't have the same hardware requirements limiting the number of machines that could take the upgrade.</p>\n<p>I ran into the same problem with my older machine. My last custom-built PC could not run Windows 11. I wanted to upgrade it anyway as I wanted a machine that could play more modern games and my older machine was starting to struggle with newer games. But my old machine was still a good machine. It might not have been the fastest machine or be able to play modern games, but it was still pretty fast and ran well. I ended up giving it to my in-laws to replace their much older machine that was well past its prime. For them, my old PC was still plenty good. It could do everything they wanted and needed a computer to do. I think that's what bothers me most. Because of the TPM 2.0 requirement, many computers that are still plenty functional are probably going to be thrown out.</p>\n<p>What this also means is those who do not want to upgrade their actual hardware are likely to simply continue using their current machines running a now unsupported Windows 10. If it were simply losing access to new features or even bug fixes, that wouldn't be that big of a deal. The bigger issue is the lack of security updates. Any security flaws in Windows will no longer be fixed. It will leave Windows 10 machines vulnerable to exploits, attacks and many other threats.</p>\n<p>This irritates me. People are going to be faced with the choice of running an unsupported operating system on otherwise good hardware, or throw out their machine and pay for a new computer.</p>\n<p>And before anyone says anything, yes, I know Linux exists. I've been running Linux on my computers since college 20 years ago. My desktop dual boots between Windows 11 and Linux Mint. So yes, Linux is technically an option as it will run on older machines, receive software and security updates, and can make the machines feel new. While yes, many Linux distributions have gotten better and more user-friendly, I still don't believe it's an actually viable solution for the majority of people.</p>\n<p>I have a Windows 11 install for one reason...gaming. If I want to play PC games, Windows is still really my only choice. Too many games just don't have installers for any other operating system. I've gotten back into World of Warcraft and have followed every guide I could find to get it running on my Linux Mint install. Every guide says it's easy to do. Just follow these instructions. Whelp, every guide has yet to work of my machine. I keep running into various errors during install or starting up Battle.net. I still haven't figured it out, and I like to consider myself technically proficient.</p>\n<p>Imagine someone who doesn't have a technical background trying to do something outside the &quot;happy path&quot;. This isn't to say that no one could figure it out or that Linux isn't an option for anyone, I just can see too many people getting frustrated with some of the differences Linux brings and giving up.</p>\n<p>It's a shame too, because Linux is a great operating system. I <em>really</em> wish it had better support for those games that are built for Windows. But if my struggles to get a popular game like WoW running, I'm not sure how well I'll be able to get other games running. I'm also not sure how much time I'm going to want to spend fighting to get games running when I can just boot into Windows. My dream would be to get rid of Windows altogether and move forward with only Linux. Maybe I'll try it again once I finish Expedition 33...gotta finish it before my GamePass subscription expires in early November...thanks Microsoft for jacking up the price to make it no longer worth it, saves me $20/month.</p>\n<p>Windows is also going all-in on Copilot and AI. Ugh. Every Microsoft app I use, it just gets shoved down my throat and I have to figure out how to either turn it completely off, or hide it. I don't want or use AI tools and it's annoying how hard Microsoft is pushing it on its users.</p>\n<p>For my laptop, I have an M1 MacBook Pro I bought back in 2021. The machine is awesome. It's fast and continues to run well. I have no intention of upgrading anytime soon as this machine can handle everything I've thrown at it. When it does become time to upgrade, I can comfortably say I will likely not upgrade to a Windows-based laptop.</p>\n<p>I will probably look at what laptops are around that are good with Linux. Thinking ahead, I was giving consideration to Framework until the <a href=\"https://gardinerbryant.com/the-omarchy-framework-thing/\">whole DHH thing</a>. If you don't know who <a href=\"https://jakelazaroff.com/words/dhh-is-way-worse-than-i-thought/\">DHH is</a>, that's probably not a bad thing, but suffice it to say, he's a questionable individual to put it mildly. Maybe Framework will reverse course, maybe they won't. I thankfully don't have to make that decision now, but I don't want my money going towards a company that is helping finance DHH.</p>\n<p>What I will want is a solid machine that will be supported for a long time. Apple has generally done a decent job supporting their hardware with OS updates and security patches. Linux of course is great with this. There are a large number of distributions and many that can do a good job supporting older hardware. My hope would be that if I go the Linux route, I can continue to count  on that.</p>\n<p>As I've gotten older, the less I've wanted the latest and greatest. My iPhone 14 Pro is still great, my 2021 laptop is still more than enough. I want a machine that will last me and if Linux is the route I go, I'm sure that barring a hardware failure, Linux will not let me down. I've been using my Linux desktop quite a bit lately and with the exception of gaming, there's nothing I use a computer for that it can't do.</p>\n<p>.NET development? Check!</p>\n<p>Node.js development? Check!</p>\n<p>Basic web development? Of course!</p>\n<p>People might have to get used to alternative apps that they're potentially unused to, think LibreOffice rather than Microsoft Office, but it's doable for those willing and able.</p>\n<p>404 Media <a href=\"https://www.404media.co/the-end-of-windows-10-support-is-an-e-waste-disaster-in-the-making/\">has a good article and podcast episode on the end of Windows 10 and the problems it will likely cause</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-16T23:01:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/14/constant-default-app-switching/",
      "url": "https://kpwags.com/posts/2025/10/14/constant-default-app-switching/",
      "title": "Constant Default App Switching",
      "content_html": "\n\t\t<p>What do you call it when you can't seem to stick to a single application for its given purpose. I feel like that's where I am with my notes and writing apps, as well as web browser. I stick with one for a little while only to then decide to switch to something else.</p>\n<h2>Web Browsers</h2>\n<p>Over the last couple months I've used Vivaldi, Zen, &amp; Firefox as my default browser on my MacBook and Linux desktop. I use one for a while, then switch to another, think differently and end up switching again.</p>\n<p>I like that Vivaldi uses Chromium given that sadly that's where it seems web browsers are going nowadays with Chrome, Edge, Brave, and many others using it as its base engine. There's still Webkit/Safari and Firefox, but their marketshare is unfortunately fading. I like how Vivaldi has workspaces that allow me to keep my different projects separated. I also appreciate them not trying to force AI down my throat.</p>\n<p>This brings me to Zen. Zen is a new browser on the scene that takes a lot of queues from Arc, only using Firefox/Gecko as its base rather than Chromium. It has some neat features like the ability to split the view between two websites, or the ability to open a page within a page (this is useful when I need to make a quick edit to a Google Sheet).</p>\n<p>Finally there's Firefox. Firefox was probably the first browser that really stood out to me, though a lot of that probably stems from the fun that was IE6. Mozilla has a lot of issues and they too often put focus on projects other than the core of Firefox. But I also want multiple browser engines. I don't want Chromium to be the only game in town. As good as Google has been for advancing newer web technologies and advancements in HTML, CSS &amp; JavaScript, I don't like a single company dictating what the standards should be. I want to see competition. I use Firefox to help push forward that desire and also because it's a good browser and it still supports uBlock Origin.</p>\n<p>Every time I think I'm sticking with one browser, the feeling that the grass is greener with one of the others starts tickling my brain. I feel at home with all of them and they all work well. I figure I can't really go wrong with any of them, but it's weird to be constantly changing the default browser on my computers.</p>\n<h2>Notes App</h2>\n<p>I have this same thing going with my notes and writing app as well. I use both iA Writer and Obsidian. I chose both of these at different times for the simple reason that they both operate out of a folder full of markdown files. No proprietary formats, no notes locked into a walled garden. I don't have to worry about exporting notes to view them elsewhere, I just grab the .md file and open it in the text editor of my choosing.</p>\n<p>iA Writer is a beautifully clean application that puts writing first and foremost. It's barebones, but that's fine. It excels at what it does, and it's absolutely phenomenal at it. I've purchased it on both iOS/iPadOS as well as MacOS. In my opinion, it's been worth the purchase. If I used Windows more often, I'd purchase it on Windows as well.</p>\n<p>Obsidian is an app that is powerful, extendable, and can do so much, while still sticking with the idea that it's just a folder full of markdown files. I can definitely trim down the UI to make it look more minimalist and barebones to keep writing simple, but it has so much more to offer, much of which I don't actually use. It also has the added benefit of being available on Linux as well. I've been using Linux more on my desktop as I'm really not a fan of Windows 11 so it'd be nice to not have to find a different application for one operating system.</p>\n<p>The thing that keeps me on Obsidian more is its template system and tagging systems. I can create templates for notes that I can quickly just apply to new files. No copying and pasting, the files start clean. This is important to me because I use frontmatter in a lot of my notes. It's a way to store data in the notes without the need of a database or anything along those lines. It's especially useful for writing blog posts so I can keep track of when I first started the post, when I published it, where it's viewable, etc. iA Writer supports all of that as well, but there's no quick way to apply it to files without copying and pasting it from elsewhere.</p>\n<p>Both iA Writer and Obsidian support tags, but the one thing that Obsidian has over iA Writer is nested tags. With Obsidian I can nest tags almost like folders. If I use the tag <code>blog-post/productivity</code>, it applies the tag <code>blog-post</code> as well as the tag <code>productivity</code> nested underneath <code>blog-post</code>. It might not feel like that big of a deal but I find it useful for my organizational methods.</p>\n<p>And as nice as all these extra features are, there's still the clean simplicity iA Writer offers that draws me in. The good news is that the two apps can work together side by side. I can point iA Writer to my Obsidian folder and can edit the files in either app. <em><strong>This</strong></em> is why no matter what app I might choose to use more of, or what app I move forward with, I will always stick with one that just works off a folder with markdown files I control. This would be an added benefit of using Linux since while Obsidian supports Linux, not every app developer does. It feels to me that a folder of files is a little more future-proof should the environment change.</p>\n<p>I'm not fully sure why I'm so indecisive between these apps, but I also figure the browsers and notes apps are all good options so I can't go wrong with any of them. Other than having to re-sign into some websites, there's no big harm in switching back and forth.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-14T22:56:53Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/targeting-specific-characters-with-css-rules/",
      "url": "https://kpwags.com/notes/targeting-specific-characters-with-css-rules/",
      "title": "Targeting Specific Characters with CSS Rules",
      "content_html": "\n\t\t<p>Because why not have some fun with your designs.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-13T13:28:35Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-lifeblood-of-the-web/",
      "url": "https://kpwags.com/notes/the-lifeblood-of-the-web/",
      "title": "The Lifeblood of the Web",
      "content_html": "\n\t\t<blockquote>\n<p>A lot of us spend the majority of our days in front of a screen. We have online conversations and collaborate with people from all over the world. We read each other’s blog posts and social media rants. But behind every line of code, behind every post about the latest CSS tricks, behind every talk and video tutorial, there’s a real person. A person with a story, with struggles, with a life. And a few of those people are now here at the conference. That’s when you realize: the Web isn’t just a bunch of servers and websites. The Web is the people building it. The Web is community.</p>\n</blockquote>\n<p>I can't say I've ever been to a conference, but the community out there is awesome. So many web devs building cool stuff and sharing their creations.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-13T13:27:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/144/",
      "url": "https://kpwags.com/reading-log/144/",
      "title": "Reading Log - October 13, 2025 (#144)",
      "content_html": "\n\t\t<p>Some fun CSS tricks, a Blazor annoyance fixed and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://dotnetwebacademy.substack.com/p/net-10-finally-fixes-prerendering\">Blazor Prerendering is Finally SOLVED in .NET 10!</a> - <em>Patrick God</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://matthiasott.com/notes/the-lifeblood-of-the-web\">The Lifeblood of the Web</a> - <em>Matthias Ott</em></li>\n<li><a href=\"https://shkspr.mobi/blog/2025/09/targetting-specific-characters-with-css-rules/\">Targeting Specific Characters with CSS Rules</a> - <em>Terence Eden</em></li>\n<li><a href=\"https://nolanlawson.com/2025/08/31/why-do-browsers-throttle-javascript-timers/\">Why do browsers throttle JavaScript timers?</a> - <em>Nolan Lawson</em></li>\n<li><a href=\"https://matthiasott.com/notes/css-is-where-the-magic-happens\">CSS :is() :where() the Mag­ic Happens</a> - <em>Matthias Ott</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://revontulet.dev/p/2025-hidden-cost-slow-feedback-loops/\">The Hidden Cost of Slow Feedback Loops</a> - <em>Matthias Döpmann</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://whitep4nth3r.com/blog/we-all-have-a-choice/\">We all have a choice</a> - <em>Salma Alam-Naylor</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.economist.com/podcasts/2025/10/09/bubble-trouble-could-the-ai-boom-go-pop?utm_campaign=shared_article\">The Economist: Bubble trouble: could the AI boom go pop?</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2024/10/09/wargames\">How We Survive: Wargames</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.mcsweeneys.net/articles/we-are-not-fascists-and-if-you-call-us-fascists-we-will-arrest-you\">We Are Not Fascists, and If You Call Us Fascists, We Will Arrest You</a> - <em>Carlos Greaves</em></li>\n</ul>\n<hr />\n<h2>Investing</h2>\n<ul>\n<li><a href=\"https://www.spilledcoffee.co/p/life-isnt-a-spreadsheet\">Life Isn’t a Spreadsheet</a> - <em>Eric Soda</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - Junebug</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_IhE26ELGn0\" title=\"The Wonder Years - Junebug\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-13T13:27:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/71/",
      "url": "https://kpwags.com/week-note/71/",
      "title": "Week Notes for October 5 - 11 (#71)",
      "content_html": "\n\t\t<p>It was a quiet week, and a miserable one for my sports teams.</p>\n<h2>Bad Week for Philly Sports</h2>\n<p>Woo boy. It was a bad week for Philly sports. The Phillies lost in the NLDS to the Dodgers by deciding that hitting the baseball wasn't all that important. The Eagles dropped 2 to the Broncos and then the Giants, looking bad in both. There's always the Flyers...oh wait, they lost their first 2 games of the season.</p>\n<p>This is the Philly sports fandom I'm used to.</p>\n<h2>Personal Site Coming Together</h2>\n<p>The last bits of my redesign or rebuild are getting worked on. I feel better about the code base and how things are built. From a design perspective, it won't be a huge change from what it looks like today, so the redesign isn't so much an overhaul as it is a series of what I think are positive tweaks.</p>\n<h2>Fixing my Acoustic Guitar</h2>\n<p>Friday I went to re-string my acoustic guitar only to find that the nut (the little plastic piece at the top of the neck that help guide the strings down the guitar) came off the neck. I guess I can't say I'm surprised as I noticed that it had slid out of place earlier. I think the tension of the strings was the only thing keeping it in place.</p>\n<p>I made my first attempt to fix it by just super gluing it back on. We'll see how that holds.</p>\n<p>It might explain some oddities while playing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-12T21:28:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/07/wishing-i-didnt-need-ad-and-tracker-blockers/",
      "url": "https://kpwags.com/posts/2025/10/07/wishing-i-didnt-need-ad-and-tracker-blockers/",
      "title": "Wishing I Didn’t Need Ad and Tracker Blockers",
      "content_html": "\n\t\t<p>Tracking software different websites use to track your movement around the web is insidious and should be stopped. Thankfully there are tools like <a href=\"https://ublockorigin.com/\">uBlock Origin</a> and <a href=\"https://privacybadger.org/\">Privacy Badger</a> can help. Switching away from Chrome should also be a good first step. But with these tools, come some unfortunate side effects.</p>\n<p>This past week I was looking to buy tickets to a music festival next year. Tickets went on sale at 10:00AM and I went to go buy them and it kept erroring out. I was a little surprised as I didn't think the demand was going to spike so much as to crash. I figured I must've been wrong and would try back later. Later came and it still wasn't working. I wasn't sure what to think.</p>\n<p>Fortunately for me, my wife decided to give it a try got in. Finally, the pieces clicked. The blockers I was running prevented the site from working, whereas the blocking tools my wife was using didn't interfere.</p>\n<p>This is what I hate about the modern web. Because of surveillance capitalism and enshittification, we have to browse the web with additional browser extensions, DNS filtering, and a bunch of other tools to make the web usable and/or not quite a complete privacy nightmare. This comes with the double-edged sword of some sites not built in such a way to work with the blockers in place. It'd be so much easier if I didn't need to run ad blockers and privacy extensions. I then wouldn't have to remember that if I run into issues, maybe the extensions are the problem.</p>\n<p>It should be pretty obvious in hindsight that my extensions are the issue, but all too often, I forget I'm even running them. They're always on in the background quietly doing their thing. Most of the sites I go to on the regular either don't have a lot of trackers (yay personal sites), or work just fine with the blockers enabled so it's normally not an issue.</p>\n<p>Maybe sometime in the future this won't be as much of an issue, but I doubt it. Either way, I'm still blocking ads, tracking tools, and as much of the anti-user, anti-privacy BS that sites use.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-07T11:42:54Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/143/",
      "url": "https://kpwags.com/reading-log/143/",
      "title": "Reading Log - October 6, 2025 (#143)",
      "content_html": "\n\t\t<p>A little light this week. Some thoughts on a CSS starter, CSS functions and more AI problems.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/running-dotnet-in-the-browser-without-blazor/\">Running .NET in the browser without Blazor</a> - <em>Andrew Lock</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/links/the-coyier-css-starter/\">The Coyier CSS starter</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://una.im/5-css-functions/\">5 Useful CSS functions using the new @function rule</a> - <em>Una Kravets</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://shkspr.mobi/blog/2025/08/is-it-possible-to-allow-sideloading-and-keep-users-safe/\">Is it possible to allow sideloading <em>and</em> keep users safe?</a> - <em>Terence Eden</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"http://anthonymoser.github.io/writing/ai/haterdom/2025/08/26/i-am-an-ai-hater.html\">I Am An AI Hater</a> - <em>Anthony Moser</em></li>\n<li><a href=\"https://www.404media.co/ai-workslop-is-killing-productivity-and-making-workers-miserable/\">AI Slop Invades the Office</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/chaos-brought-to-you-by-kickers?giftLink=d80e7c17fc207a8e8192f90e02c13b3e\">Chaos, Brought to You by Kickers</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2025/10/why-i-hate-the-mvp-car/\">Why I hate the MVP car</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Lookers (Menzingers Cover)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/BIkdUo5f17M\" title=\"Dave Hause - Lookers (Menzingers Cover)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-06T23:32:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/70/",
      "url": "https://kpwags.com/week-note/70/",
      "title": "Week Notes for September 28 - October 4  (#70)",
      "content_html": "\n\t\t<p>My week notes for the week of September 28 through October 4.</p>\n<p>It was mostly a quiet week. Work, some relaxation, reading, then bed...rinse and repeat. Sometimes you need those kind of weeks though.</p>\n<h2>Music</h2>\n<p>Friday was <a href=\"https://daily.bandcamp.com/features/bandcamp-fridays\">Bandcamp Friday</a>. Bandcamp runs a promo the first Friday of some months where 100% of the money spent goes to the artists (the next one is Friday 12/5). I try to purchase an album or two to support artists. This month I ended up buying a few albums from <a href=\"https://catbite.bandcamp.com/\">Catbite</a> and <a href=\"https://freethrowemo.bandcamp.com/\">Free Throw</a>. They opened for The Menzingers at the concert last week and I liked what I heard. I’ve been enjoying the albums. I might get more of their music down the line.</p>\n<p>I also finally got some better speakers for my stereo system. I picked up a pair of <a href=\"https://electronics.sony.com/audio/speakers/home-theater-speakers/p/sscs5m2\">Sony SS-CS5M2 Bookshelf Speakers</a>. I had a pair of cheap speakers for who knows how long, so having some nicer sounding ones provides a better experience.</p>\n<h2>Site Redesign</h2>\n<p>I’ve been making some good progress this week on my site’s (slight) redesign. I’ve moved onto my media pages. Most of the styling is going to be similar here, but I’m looking into cleaning up the code. Once the media pages are done and cleaned up, the last part will be my notes page. I’m still trying to figure out how to best design and style it. We’ll see how it goes and if it ends up causing  me to revisit other pages. It’s been a running trend, build something out, move onto the next and like a slightly different design that needs to be re-applied to other pages. It’s fun to always mess around with my site though, so I don’t mind.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-05T15:13:50Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/04/september-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/10/04/september-2025-check-in/",
      "title": "September 2025 Check-In",
      "content_html": "\n\t\t<p>September was a busy month. One of my teams' hockey season started back up, went to some concerts and generally stayed active.</p>\n<h2>Concerts</h2>\n<p>After a busy Labor Day weekend seeing Dave Hause twice, I ended up going to two other concerts in the month. I saw Lucero mid-month when I found out they were doing a show at Ardmore Music Hall, a cool small venue near us. They ended up celebrating the 20th anniversary of the release of <a href=\"https://www.youtube.com/watch?v=c6RoAjmDPBw&amp;list=PL4C072D4A4D7B097E\">Nobody's Darlings</a> and then some of their hits. I even got to meet their frontman, Ben Nichols after the show.</p>\n<p>My wife and I also traveled to Asbury Park, NJ to the Stone Pony to see The Menzingers play on the summer stage. It was a fun weekend. Good music, a nice venue and a nice beach town. We'd definitely go back.</p>\n<h2>Bombers Season Starts Back Up</h2>\n<p>The team I captain, the <em>Bombers</em> had the fall/winter 2025-26 season start back up. We've played 3 games so far and are a respectable 2-1. Probably could've been 3-0, but I had a crummy game in net in the opener and let too many easy ones in spoiling a good effort by the rest of the team.</p>\n<h2>New Project at Work</h2>\n<p>For work, I've been put on a new project since the work has been slowing down for the one I'd been working on. It's been a pretty big adjustment trying to figure out the new codebase, new terminology, and how everything pieces together and works. I've been working with plenty of current and former teammates who have been doing a great job helping me out. I have no doubt I'll pick it up, just goes with the theme of <a href=\"https://kpwags.com/posts/2025/10/03/the-safety-of-what-you-know/\">safety of the known</a>.</p>\n<h2>Writing More</h2>\n<p>I've been continuing my goal of writing more. I've done a pretty decent job of getting 2 posts out a week beyond my week notes and reading logs. I've been trying to set aside 30-45 minutes a day to just get words out. Not always successful, but I'm starting to feel better about my writing.</p>\n<h2>Personal Site Redesign</h2>\n<p>I've been able to get a good chunk of my personal site redesign taken care of. There's still a little ways to go, but I'm feeling better about the codebase. I've been cleaning up old components, deleting bits and pieces as I realize they're no longer needed or merged in elsewhere. I'm hoping it provides a better base for my site.</p>\n<h2>Espresso</h2>\n<p>The other thing I've been trying to do more is take advantage of our espresso machine. We got it somewhere around the pandemic and while it doesn't go unused, I've been making it a point to use it more whether it's for a red-eye in the morning or a latte in the afternoon. Any good recipes anyone knows would be appreciated.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>9</span> runs - <span>31.66</span> miles</li>\n<li><strong>Walking:</strong> <span>28</span> walks - <span>15.95</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>9</span> sessions - <span>128,395</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/our-dollar-your-problem-an-insider-s-view-of-seven-turbulent-decades-of-global-finance-and-the-road-ahead-kenneth-rogoff/f7eb2fbd7e0e2059\">Our Dollar, Your Problem: An Insider's View of Seven Turbulent Decades of Global Finance, and the Road Ahead</a> by Kenneth Rogoff</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/apple-in-china-the-capture-of-the-world-s-greatest-company-patrick-mcgee/21872828\">Apple in China: The Capture of the World's Greatest Company</a> by Patrick McGee</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/billion-dollar-whale-the-man-who-fooled-wall-street-hollywood-and-the-world-bradley-hope/15276700\">Billion Dollar Whale: The Man Who Fooled Wall Street, Hollywood, and the World</a> by Bradley Hope &amp; Tom Wright</li>\n<li>Finished <a href=\"https://www.amazon.com/gp/product/0857199250\">Just Keep Buying: Proven ways to save money and build your wealth</a> by Nick Maggiulli</li>\n<li>Started <a href=\"https://doylestownbookshop.com/book/9781683693062\">Whisper Down the Lane</a> by Clay McLeod Chapman</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/138/\">September 1 (#138)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/139/\">September 8 (#139)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/140/\">September 15 (#140)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/141/\">September 22 (#141)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/142/\">September 29 (#142)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/66/\">August 31 - September 6 (#66)</a></li>\n<li><a href=\"https://kpwags.com/week-note/67/\">September 7 - 13 (#67)</a></li>\n<li><a href=\"https://kpwags.com/week-note/68/\">September 14 - 20 (#68)</a></li>\n<li><a href=\"https://kpwags.com/week-note/69/\">September 21 - 27 (#69)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/09/04/still-trying-to-figure-out-a-good-social-media-balance/\">trying to find a social media balance</a></li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2025/09/09/why-do-i-read-books-that-make-me-angry-so-often/\">reading books that make me angry</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/09/11/a-redesign-with-a-focus-on-notes-and-links/\">my site's redesign</a></li>\n<li>Shared thoughts <a href=\"https://kpwags.com/posts/2025/09/23/jimmy-kimmel-and-the-battle-for-the-1st-amendment/\">on Jimmy Kimmel's suspension and the 1st Amendment</a></li>\n<li>Shared how <a href=\"https://kpwags.com/posts/2025/09/25/building-my-new-archives-page/\">I'm building my new archives page</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/09/30/routines-and-focus/\">routines and staying focused</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">WoW</a></li>\n<li>Continued <a href=\"https://www.expedition33.com/\">Clair Obscur: Expedition 33</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0092455/\">Star Trek: The Next Generation</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0247082/\">CSI</a></li>\n<li>Finished Season 3 of <a href=\"https://www.imdb.com/title/tt12327578/\">Star Trek: Strange New Worlds</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt10574236/\">Station Eleven</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-04T19:43:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/03/the-safety-of-what-you-know/",
      "url": "https://kpwags.com/posts/2025/10/03/the-safety-of-what-you-know/",
      "title": "The Safety of What You Know",
      "content_html": "\n\t\t<p>In the last month, I've been transitioning to work on a new (to me) project at work as the work load for the project I've been working on has been slowing. This last month has in some cases made me feel like I changed jobs with the completely different code base and project. It's made me think about how disruptive it sometimes feels and how the familiar can feel so safe.</p>\n<p>I'm coming up on 5 years working at WebstaurantStore. I'm happy at the job, I work with a good team and am enjoying the work. Since I started, I've pretty much exclusively worked on the same project the entire time. There were some brief branching off to help on other projects from time to time, but I've probably spent 95+% time on one project.</p>\n<p>I've gotten good at knowing the project, it's quirks, as well as all the business requirements. It's allowed me to sort of predict what people might be looking for when new features or enhancements are discussed. I know how most of the code is organized and how it works. It feels <em>safe</em>.</p>\n<p>Now that I've moved on to a new project, that safety has sort of been pulled out from underneath me. I'm learning a brand new code base, a new organizational structure, new terminology, new business requirements, and new everything else that goes along with a project. It's caused some of the work I've done on it to take longer than it might take someone more familiar. In some cases it kind of feels like I'm a junior dev again.</p>\n<p>Now I have no doubt I'll pick things up quickly enough. I consider myself to be a competent developer and will no doubt learn how to find things in the code and how it all pieces together. It's written in React with a C#/.NET backend. Both languages I've used extensively so it's one less thing I have to worry about and learn.</p>\n<p>This new challenge has just made me think about how much the familiar is sometimes equated with a safety blanket. We know something, so we feel safe. Sometimes even at the cost of better opportunities or challenges. I knew the code base of the previous project so I felt safe in that I knew I could handle any issues that arose. With the new code base, I don't have that safety net and it's kind of scary. Scary isn't always bad though, and sometimes it's good to jump in head-first, grab the bull by its horns so to speak. Dive in and learn something new and better improve your skills whether you're a developer like me or any other profession or trade.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-03T18:16:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/10/01/an-addendum-to-building-my-new-archives-page/",
      "url": "https://kpwags.com/posts/2025/10/01/an-addendum-to-building-my-new-archives-page/",
      "title": "An Addendum to Building My New Archives Page",
      "content_html": "\n\t\t<p>Last week I posted about <a href=\"https://kpwags.com/posts/2025/09/25/building-my-new-archives-page/\">how I built my new archives page</a>. After releasing the post and getting back to my redesign, I realized that I overcomplicated one bit of code and figured I'd add an addendum to the post showing the simplification.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">getPostType</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">tags</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'readinglog'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Reading Log'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'reading-log'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'shortnotes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'weeknote'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Week Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'week-note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'booknotes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Book Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'book-note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Post'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'post'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I had built this code to help me identify the post type. It's not awful code (at least I don't think it is), but 11ty can help me out here so much easier.</p>\n<p>With 11ty, I could use the <code>.11tydata.js</code> file for each of my collections to simplify the process. Remember how I added <code>postYear</code> to the <code>eleventyComputed</code> object? Well, if I was thinking, I would have realized I could have added the data returned in the above function as well.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">layout</span><span class=\"token operator\">:</span> <span class=\"token string\">'layouts/notes.html'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">tags</span><span class=\"token operator\">:</span> <span class=\"token string\">'shortnotes'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">eleventyComputed</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function-variable function\">dateString</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> page <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dayjs<span class=\"token punctuation\">.</span><span class=\"token function\">utc</span><span class=\"token punctuation\">(</span>page<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MMMM D, YYYY'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">shortDateString</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> page <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dayjs<span class=\"token punctuation\">.</span><span class=\"token function\">utc</span><span class=\"token punctuation\">(</span>page<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MMM D'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">postYear</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> page <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dayjs<span class=\"token punctuation\">.</span><span class=\"token function\">utc</span><span class=\"token punctuation\">(</span>page<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'YYYY'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">postType</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>So now, instead of calling the <code>getPostType()</code> function, I can simply access the data from the post itself:</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> items <span class=\"token operator\">=</span> everything<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>postType<span class=\"token punctuation\">.</span>css <span class=\"token operator\">===</span> <span class=\"token string\">'book-note'</span>\n    <span class=\"token operator\">?</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>title<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>subtitle<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span>\n    <span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">url</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">year</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>postYear<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">month</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>postMonth<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">dateString</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>shortDateString<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">type</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>postType<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>It's not a huge change, but it simplifies the code just a bit.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-10-01T18:17:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/09/30/routines-and-focus/",
      "url": "https://kpwags.com/posts/2025/09/30/routines-and-focus/",
      "title": "Routines and Focus",
      "content_html": "\n\t\t<p>At the beginning of the year, I wanted to really make a concerted effort this year to try to improve my ability to focus on whatever the task at hand might be. Be it a task at work, writing, or a side project. I'd been realizing that my ability to focus on the task at hand was not as strong as I would've liked it to be.</p>\n<p>At the beginning of the year, I <a href=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448\">read</a> <a href=\"https://bookshop.org/p/books/slow-productivity-the-lost-art-of-accomplishment-without-burnout-cal-newport/20143790\">several</a> <a href=\"https://bookshop.org/p/books/deep-work-rules-for-focused-success-in-a-distracted-world-cal-newport/8339760\">books</a> by Cal Newport about deep work, focus, and productivity. I understood a lot of it as I was very often got distracted by social media, thoughts in my own head, and everything else the modern world throws at us.</p>\n<p>One of the things that Cal talks about which I feel like I can definitely relate to is having a routine. Routines have been <a href=\"https://kpwags.com/posts/2021/01/14/my-typical-weekday/\">helpful in the past</a> and I can see why. It feels like it's a way to trick your mind into doing what it is you want it to do.</p>\n<p>If I were to spell out my general routine on a weekday, it'd be this:</p>\n<ol>\n<li>6:30AM - Wake up</li>\n<li>6:45AM - Take Tess for her morning walk</li>\n<li>7:00AM - Start Work</li>\n<li>12:00PM - If it's not a lifting day, go for a 3-4 mile run</li>\n<li>1:00PM - Back to Work if I ran</li>\n<li>4:00PM / 5:00PM - Work Day Over</li>\n<li>4:00PM - If I didn't run, lift</li>\n<li>5:45PM - Cook and eat dinner</li>\n<li>7:00PM - Practice Guitar</li>\n<li>7:30PM - Relaxation (Writing, Gaming, etc.)</li>\n<li>8:30PM - Read Before Bed</li>\n<li>9:45PM - Journal</li>\n<li>10:00PM - Bed</li>\n</ol>\n<p>Obviously life isn't always that smooth. Hockey can get in the way as do doctor's appointments and a myriad of other things. But that generally is how my weekdays go.</p>\n<p>I actually really appreciate having this routine, and I'm not going to lie, I sometimes get annoyed when I have to deviate too much from it. My last dentist appointment, a source of fun for everyone involved, didn't bother me and generally doesn't bother me. Having to make up the time for work and cut into my evening respite, that <em>did</em> annoy me. It is what it is, getting your teeth checked is important, but is no one thinking of my routine?</p>\n<p>It a world with so many distractions that I'm so often distracted by, I sometimes find that routines help me keep my focus. Assuming I want to spend my relaxation time writing or working on a side project, seeing the hour set aside somehow helps me better maintain focus.</p>\n<p>And thankfully there are tools to help with this focus. I've also been using <a href=\"https://manual.raycast.com/focus\">Raycast Focus</a> lately to help keep myself in check. When I'm writing, it's nice to have a little tool that helps me by blocking the apps and sites I want to avoid. When I'm writing, especially my novel, I try to keep my browser closed to not even have the temptation open. Sometimes though I need to look something up be it for the novel or a blog post, and it can be too easy to think &quot;I'll just check to see what the top headlines are right now.&quot; Nope, don't need to know. Willpower can't always get you there, so it's nice to have a helping hand.</p>\n<p>I've had mixed success with all of this. Some weeks I feel on point, like I'm nailing everything, I'm in that zone and getting a lot accomplished. Other weeks I'm just <em>blah</em>, and feel like I can't focus on anything to save my life.</p>\n<p>As I've mentioned recently, I started trying to limit my screen time in an attempt to keep my attention on whatever it is I'm doing. I had realized I, like many others was mindlessly browsing around in various social apps and whatnot. I started logging daily, the number of pickups and the total time on my phone. Based on the weekly screen time summary the iPhone provides, prior to my focusing on limiting screen time, I was on my phone 4-5 hours a day. Now I'm down to 1-1.5.</p>\n<p><em>Note: The numbers aren't completely comparable as I made a change to my display settings when starting to log. The iPhone's always on screen apparently counts towards screen time even if you're nowhere near the phone which is stupid. I turned that off to get a better idea of total time, but don't have the benchmark in the before-times to equally compare.</em></p>\n<p>I'm not sure what a good or healthy number for me is, but if I had to measure my thoughts on it, I'd say I'm feeling better about it. My point with limiting screen time has never been to let it go completely, just put myself in a better place with hopefully a healthier mindset. I'd say it's a tentative success so far.</p>\n<p>As for sticking to the routine and maintaining more focus, I'd call it a tentative success as well. I still slip up, and get distracted from time to time, but I've also been able to spend time writing both my novel and my blog posts. I'm on my 7th week of getting a blog post out every Tuesday and Thursday. The words are getting &quot;printed&quot; and I'm getting stuff done.</p>\n<p>It's an ever evolving process and I'll try to take time now and again to take a step back, see what's working, see what's not, and make adjustments.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-30T12:25:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/ai-slop-invades-the-office/",
      "url": "https://kpwags.com/notes/ai-slop-invades-the-office/",
      "title": "AI Slop Invades the Office",
      "content_html": "\n\t\t<blockquote>\n<p>The Harvard Business Review study came out the <a href=\"https://www.ft.com/content/e93e56df-dd9b-40c1-b77a-dba1ca01e473\">day after a <em>Financial Times_analysis</em></a> of hundreds of earnings reports and shareholder meeting transcripts filed by S&amp;P 500 companies that found huge firms are having trouble articulating the specific benefits of widespread AI adoption but have had no trouble explaining the risks and downsides the technology has posed to their businesses: “The biggest US-listed companies keep talking about artificial intelligence. But other than the ‘fear of missing out,’ few appear to be able to describe how the technology is changing their businesses for the better,” the <em>Financial Times</em> found. “Most of the anticipated benefits, such as increased productivity, were vaguely stated and harder to categorize than the risks.”</p>\n<p>No single study on AI in the workplace is going to be definitive, but evidence is mounting that AI is affecting people’s work in the same way it’s affecting everything else: It is making it easier to output low-quality slop that other people then have to wade through.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-30T12:23:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-lethal-trifecta/",
      "url": "https://kpwags.com/notes/the-lethal-trifecta/",
      "title": "The “Lethal Trifecta”",
      "content_html": "\n\t\t<blockquote>\n<p>The great works of Victorian England were erected by engineers who could not be sure of the properties of the materials they were using. In particular, whether by incompetence or malfeasance, the iron of the period was often not up to snuff. As a consequence, engineers erred on the side of caution, overbuilding to incorporate redundancy into their creations. The result was a series of centuries-spanning masterpieces.</p>\n<p>AI-security providers do not think like this. Conventional coding is a deterministic practice. Security vulnerabilities are seen as errors to be fixed, and when fixed, they go away. AI engineers, inculcated in this way of thinking from their schooldays, therefore often act as if problems can be solved just with more training data and more astute system prompts.</p>\n</blockquote>\n<p>More risks from vibe coding. If you're going to use AI in production environments, you better be able to understand and work with the code it spits out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-29T23:46:14Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/142/",
      "url": "https://kpwags.com/reading-log/142/",
      "title": "Reading Log - September 29, 2025 (#142)",
      "content_html": "\n\t\t<p>A little light this week. Some updates on the Ruby drama, thoughts on AI risks, landlords acting <em><strong>really</strong></em> badly, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://ethanmarcotte.com/wrote/a-notional-design-studio/\">A notional design studio.</a> - <em>Ethan Marcotte</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.404media.co/how-ruby-went-off-the-rails/\">How Ruby Went Off the Rails</a> - <em>Emanuel Maiberg</em></li>\n<li><a href=\"https://gomakethings.com/wait-until-you-need-it/\">Wait until you need it</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/npm-risks/\">The Risks of NPM</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/landlords-demand-tenants-workplace-logins-to-scrape-their-paystubs/\">Landlords Demand Tenants’ Workplace Logins to Scrape Their Paystubs</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://economist.com/leaders/2025/09/25/how-to-stop-ais-lethal-trifecta?giftId=d753ee85-7829-4ccc-b46d-ff85be396cc8&amp;utm_campaign=gifted_article\">The “Lethal Trifecta”</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/08/28/strew-deal/\">The capitalism of fools</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://medium.com/whither-news/the-nation-is-lost-c134bc22da64\">The Nation is Lost</a> - <em>Jeff Jarvis</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Cellmates</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Oo6LBDr7YGs\" title=\"Dave Hause - Cellmates\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-29T23:40:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/69/",
      "url": "https://kpwags.com/week-note/69/",
      "title": "Week Notes for September 21 - 27 (#69)",
      "content_html": "\n\t\t<p>My week notes for the week of September 21 through September 27.</p>\n<h2>Hard Fought Hockey Win</h2>\n<p>There's a team in my division in hockey that always seems to have our number. For whatever reason, they're able to stymie us, slow us down, and limit our offense. Even when we're otherwise playing well, they just always manage to squeak past us. Well, we played them again Thursday and this time we managed to squeak past them, winning 3-2. It was a fun, evenly matched game.</p>\n<h2>Back Feeling Better</h2>\n<p>After tweaking my back last week on my final set of squats (still not sure what happened as I did it lifting the bar off the rack an inch or two in preparation to squat), I was able to feel confident to get back to lifting. The session went well, felt a little weaker than usual, but hit all my sets.</p>\n<h2>The Menzingers Concert</h2>\n<p>My wife and I traveled up to Asbury Park, New Jersey to see The Menzingers play at the Stone Pony Summer Stage. We had never been to Asbury Park, or the Stone Pony so it was a first for us. I had heard plenty about it and the outdoor stage was a great place for a concert. The weather was cloudy and it started to rain towards the end of the show, but it was still a great time.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-28T19:42:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/09/25/building-my-new-archives-page/",
      "url": "https://kpwags.com/posts/2025/09/25/building-my-new-archives-page/",
      "title": "Building My New Archives Page",
      "content_html": "\n\t\t<p>One of the things I'm doing with my redesign is changing my archives page. Right now if you go to my <a href=\"https://kpwags.com/archives\">archives page</a>, it's a bunch of links to pages for year or month and year. The new page is going to just be everything broken up by year.</p>\n<div class=\"bordered-image\">\n<picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/J-Wr8usX0R-1059.webp 1059w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/J-Wr8usX0R-1059.gif 1059w\" /><img alt=\"A screenshot of my new archives page with all the posts listed with their date and post type\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/J-Wr8usX0R-1059.png\" width=\"1059\" height=\"1365\" /></picture>\n</div>\n<p>One of the things I want to do with this redesign is to clean up my code and address tech debt accumulated by me learning 11ty on the fly. One of the pages that was a challenge was the archives page. With Next.js, all the pages were automatically generated. It was seamless when the year turned into the next. With 11ty, I couldn't quite manage to make it work that simply. Every January, I have to add a new page for the yearly page. It's mostly a copy/paste job and easy enough, but I decided to go another route this time around.</p>\n<h2>Defining What I Want</h2>\n<p>For my archives page, I wanted a page that just listed all my blog posts, notes, reading logs, notes, and book notes. I didn't need any excerpts, or anything along those lines. All I wanted was the title, date, and what kind of post was it. To have it slightly more organized, I wanted to break it out by year, but other than that, keep it simple.</p>\n<h2>Tweaking My Collections</h2>\n<p>For my site content, I take advantage of the <code>.11tydata.js</code> files. In the root directory of my content folders, there's a <code>.11tydata.js</code> file that help define the collection. One of the things you can add is computed data. You can use it to take the frontmatter from the posts and automatically build some data points that get attached to every object in the collection.</p>\n<p>Below is an excerpt from the <code>.11tydata.js</code> file for my notes. Any computed data should go in the <code>eleventyComputed</code> object. For all of my posts, I added the following properties: <code>dateString</code>, <code>shortDateString</code>, <code>postMonth</code>, &amp; <code>postYear</code>. All use <a href=\"https://day.js.org/\">dayjs</a> to provide a formatted date. I use this on different pages, but I can also use it in the JavaScript code to build the archives collection.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">layout</span><span class=\"token operator\">:</span> <span class=\"token string\">'layouts/notes.html'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">tags</span><span class=\"token operator\">:</span> <span class=\"token string\">'shortnotes'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">eleventyComputed</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function-variable function\">dateString</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> page <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dayjs<span class=\"token punctuation\">.</span><span class=\"token function\">utc</span><span class=\"token punctuation\">(</span>page<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MMMM D, YYYY'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">shortDateString</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> page <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dayjs<span class=\"token punctuation\">.</span><span class=\"token function\">utc</span><span class=\"token punctuation\">(</span>page<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MMM D'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">postYear</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> page <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dayjs<span class=\"token punctuation\">.</span><span class=\"token function\">utc</span><span class=\"token punctuation\">(</span>page<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'YYYY'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<h2>Digging into Collections</h2>\n<p><a href=\"https://www.11ty.dev/docs/collections/\">Collections</a> can contain whatever you want. There's no set structure which made my job easier. I decided I wanted to have the following model:</p>\n<pre class=\"language-json\" tabindex=\"0\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  year<span class=\"token operator\">:</span> number<span class=\"token punctuation\">,</span>\n  posts<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span>\n      title<span class=\"token operator\">:</span> string<span class=\"token punctuation\">,</span>\n      url<span class=\"token operator\">:</span> string<span class=\"token punctuation\">,</span>\n      year<span class=\"token operator\">:</span> number<span class=\"token punctuation\">,</span>\n      dateString<span class=\"token operator\">:</span> string<span class=\"token punctuation\">,</span>\n      type<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        name<span class=\"token operator\">:</span> string<span class=\"token punctuation\">,</span>\n        css<span class=\"token operator\">:</span> string\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This data model will allow me to loop through each year, and then again through each post in the year.</p>\n<p>Let's build the collection. First, we'll start by building out the collection int the <code>eleventy.config.js</code> file.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\">eleventyConfig<span class=\"token punctuation\">.</span><span class=\"token function\">addCollection</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"archives\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">collections</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This tells 11ty we're adding a new custom collection called <strong>archives</strong>. The next thing we're going to want to do is pull in all the items. The collections API defined by the <code>collections</code> variable contains the ability for us to get all the items I want for the page. So let's get everything, and for good measure, let's sort them by date.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\">eleventyConfig<span class=\"token punctuation\">.</span><span class=\"token function\">addCollection</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"archives\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">collections</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> everything <span class=\"token operator\">=</span> collections<span class=\"token punctuation\">.</span><span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">.</span>date <span class=\"token operator\">></span> b<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>So now I have all my blog posts, reading logs, week notes, notes, and book notes in the variable <code>everything</code>. The next step is to transform each object to the model I'm storing in the posts array for each year. For that I can take advantage of the <code>.map()</code> method in JavaScript.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">getPostType</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">tags</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'readinglog'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Reading Log'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'reading-log'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'shortnotes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'weeknote'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Week Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'week-note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'booknotes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Book Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'book-note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Post'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'post'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\neleventyConfig<span class=\"token punctuation\">.</span><span class=\"token function\">addCollection</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"archives\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">collections</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> everything <span class=\"token operator\">=</span> collections<span class=\"token punctuation\">.</span><span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">.</span>date <span class=\"token operator\">></span> b<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">const</span> items <span class=\"token operator\">=</span> everything<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token function\">getPostType</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>tags<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>css <span class=\"token operator\">===</span> <span class=\"token string\">'book-note'</span>\n      <span class=\"token operator\">?</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>title<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>subtitle<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span>\n      <span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">url</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">year</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>postYear<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">dateString</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>shortDateString<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">type</span><span class=\"token operator\">:</span> <span class=\"token function\">getPostType</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>tags<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I included the <code>getPostType()</code> function I built. It takes an array of post tags and returns the type of post and a CSS class to use based on the collection tag that is unique to each collection. I look for that specific tag and if it exists, I know what kind of post I'm looking at. I also use it to tweak the title for book notes as I keep the book's title and subtitle separate, but want both to be displayed.</p>\n<p>The next step is to reverse the array and grab the unique years. By default, the collection will be returned starting with the oldest item. I want the newest item at the first item in the array. I use the <code>toReversed()</code> function in JavaScript.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> sortedItems <span class=\"token operator\">=</span> items<span class=\"token punctuation\">.</span><span class=\"token function\">toReversed</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> uniqueYears <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Set</span><span class=\"token punctuation\">(</span>items<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">i</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> i<span class=\"token punctuation\">.</span>year<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></code></pre>\n<p>To get the unique years, I use the <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\"><code>Set</code></a> object in Javascript. Initializing a set with an array will return a list of objects where each value only returns once. I use the <code>map()</code> function to just pull the year out of the collection items as I don't need any of the other values.</p>\n<p>The final piece is to build the final object and return it as the collection.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> archivesArray <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> year <span class=\"token keyword\">of</span> uniqueYears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  archivesArray<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    year<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">posts</span><span class=\"token operator\">:</span> sortedItems<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">i</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> i<span class=\"token punctuation\">.</span>year <span class=\"token operator\">===</span> year<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">return</span> archivesArray<span class=\"token punctuation\">;</span></code></pre>\n<p>I start with an empty array. I then go through each unique year and add the year with its posts. I use JavaScript's built in <code>filter()</code> function to grab only the posts where their year matches the year being added.</p>\n<p>So now that I have the collection, let's build the actual page in 11ty. I'm using <a href=\"https://mozilla.github.io/nunjucks/\">nunjucks</a> for this page (<a href=\"https://www.11ty.dev/docs/languages/nunjucks/\">11ty documentation</a>).</p>\n<p>Since there is going to be a lot of links on the page, I wanted to add a list of links at the top to allow the user to jump to the year.</p>\n<p>For this, I'll use a for loop for each year in the archives collection. If you remember, the archives collection is an array of years and the posts in that year. For this loop, all i really care about is creating a list of links with the year.</p>\n<p>I go through each year, and just make an in-page link with the ID being the year, i.e. <code>#2025</code>.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archives-years<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span>\n  {% for year in collections.archives %}\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>#{{ year.year }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ year.year }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n  {% endfor %}\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>The next section on the page will be a search filter. More on this later.</p>\n<p>The final piece of the page is to list out each year, and then each post.</p>\n<p>Again, I start out with looping through the archives collection. This time, I want to start by creating an <code>h2</code> with its element ID being the same year so the in-page links bring the user to the correct section.</p>\n<p>Once the <code>h2</code> is created, I'll build an unordered list for each post. Using <a href=\"https://css-tricks.com/snippets/css/a-guide-to-flexbox/\">CSS flexbox</a>, I'm able to neatly lay out the posts with their titles on one side and the date they were posted as well as the post type on the right. The CSS for this is at the bottom of this post.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archives<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  {% for year in collections.archives %}\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archive-year<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>{{ year.year }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ year.year }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archives-list<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      {% for post in year.posts %}\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>{{ post.url }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ post.title }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>post-metadata<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>tag {{ post.type.css }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ post.type.name }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>date<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ post.dateString }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n      {% endfor %}\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  {% endfor %}\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>Now back to the filter.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    Filter\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>clear-filters<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-primary<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Clear<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>I wanted an easy way to filter down to the post someone is looking for. There are hundreds of links on this page, I want to make it a little easier to find what one might be looking for.</p>\n<p>I'm not going to go crazy with this, I'm just going to allow the user to enter text into the box which will automatically filter the list down to posts with titles matching the text entered into the box. I want to do it in real time as the text is entered. words entered in.</p>\n<p>To do this, I'll attach the <code>keyup</code> event on the filter textbox and then as text gets input, I'll add the <code>hidden</code> attribute for all <code>li</code> elements that don't have their text content (the post's title) match the text entered. It might not be the most in-depth search, but it should hopefully allow posts to be found faster than scrolling through.</p>\n<p>For good measure, I added a clear button to allow the user to quickly clear the filter and return all the results again.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'DOMContentLoaded'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'filter'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'keyup'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">filterItems</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'clear-filters'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'filter'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">clearFilters</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">filterItems</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">.</span><span class=\"token function\">trim</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>length <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">clearFilters</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.archives-list li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> idx</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'a'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">?.</span>textContent<span class=\"token punctuation\">.</span><span class=\"token function\">toLowerCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">.</span><span class=\"token function\">toLowerCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      x<span class=\"token punctuation\">.</span><span class=\"token function\">removeAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      x<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">clearFilters</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.archives-list li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    x<span class=\"token punctuation\">.</span><span class=\"token function\">removeAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This was a fun little project for me, I wanted something nicer for my archives, and while this might seem a little nuts, I like the way it turned out, and thought I'd share. I don't really have an ETA on when the new design will be finished, but hopefully sometime soon.</p>\n<p>And now all the final pieces.</p>\n<div class=\"code-block-filename\">archives.js</div>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">getPostType</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">tags</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'readinglog'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Reading Log'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'reading-log'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'shortnotes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'weeknote'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Week Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'week-note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>tags<span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span><span class=\"token string\">'booknotes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Book Note'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'book-note'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Post'</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">css</span><span class=\"token operator\">:</span> <span class=\"token string\">'post'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\neleventyConfig<span class=\"token punctuation\">.</span><span class=\"token function\">addCollection</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"archives\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">collections</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> everything <span class=\"token operator\">=</span> collections<span class=\"token punctuation\">.</span><span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">.</span>date <span class=\"token operator\">></span> b<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">const</span> items <span class=\"token operator\">=</span> everything<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">title</span><span class=\"token operator\">:</span> <span class=\"token function\">getPostType</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>tags<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>css <span class=\"token operator\">===</span> <span class=\"token string\">'book-note'</span>\n      <span class=\"token operator\">?</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>title<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>subtitle<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span>\n      <span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">url</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">year</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>postYear<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">dateString</span><span class=\"token operator\">:</span> e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>shortDateString<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">type</span><span class=\"token operator\">:</span> <span class=\"token function\">getPostType</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>tags<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">const</span> sortedItems <span class=\"token operator\">=</span> items<span class=\"token punctuation\">.</span><span class=\"token function\">toReversed</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">const</span> uniqueYears <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Set</span><span class=\"token punctuation\">(</span>items<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">i</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> i<span class=\"token punctuation\">.</span>year<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">const</span> archivesArray <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> year <span class=\"token keyword\">of</span> uniqueYears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    archivesArray<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      year<span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">posts</span><span class=\"token operator\">:</span> sortedItems<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">i</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> i<span class=\"token punctuation\">.</span>year <span class=\"token operator\">===</span> year<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> archivesArray<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<div class=\"code-block-filename\">archives.njk</div>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archives-years<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span>\n  {% for year in collections.archives %}\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>#{{ year.year }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ year.year }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n  {% endfor %}\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    Filter\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>filter<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>clear-filters<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-primary<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Clear<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archives<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  {% for year in collections.archives %}\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archive-year<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>{{ year.year }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ year.year }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>archives-list<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      {% for post in year.posts %}\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>{{ post.url }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ post.title }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>post-metadata<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>tag {{ post.type.css }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ post.type.name }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>date<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ post.dateString }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n      {% endfor %}\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  {% endfor %}\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n  <span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'DOMContentLoaded'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'filter'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'keyup'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">filterItems</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'clear-filters'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'filter'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">;</span>\n      <span class=\"token function\">clearFilters</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">function</span> <span class=\"token function\">filterItems</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">.</span><span class=\"token function\">trim</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>length <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">clearFilters</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.archives-list li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> idx</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'a'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">?.</span>textContent<span class=\"token punctuation\">.</span><span class=\"token function\">toLowerCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">includes</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">.</span><span class=\"token function\">toLowerCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        x<span class=\"token punctuation\">.</span><span class=\"token function\">removeAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        x<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">function</span> <span class=\"token function\">clearFilters</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.archives-list li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      x<span class=\"token punctuation\">.</span><span class=\"token function\">removeAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre>\n<div class=\"code-block-filename\">main.css</div>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">section.archives-years</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.archives-years ul</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> inline-flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">gap</span><span class=\"token punctuation\">:</span> 24px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">flex-wrap</span><span class=\"token punctuation\">:</span> wrap<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.archives-years ul li</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">list-style-type</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.archives-years ul li::marker</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">content</span><span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.filter</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 32px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">justify-content</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">gap</span><span class=\"token punctuation\">:</span> 24px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> stretch<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.filter label</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> inline-block<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.filter input</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin-left</span><span class=\"token punctuation\">:</span> 16px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 8px 12px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 300px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">section.archives h2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 48px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">list-style-type</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">justify-content</span><span class=\"token punctuation\">:</span> space-between<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-bottom</span><span class=\"token punctuation\">:</span> 1px solid <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--border-color<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 4px 8px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li[hidden]</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li:first-child</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">border-top</span><span class=\"token punctuation\">:</span> 1px solid <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--border-color<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">gap</span><span class=\"token punctuation\">:</span> 12px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">min-width</span><span class=\"token punctuation\">:</span> 195px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">justify-content</span><span class=\"token punctuation\">:</span> flex-end<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.tag</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 2px 8px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 2px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-self</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 0.75rem<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.tag.post</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>0.4147 0.0937 241.41<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>100% 0 0<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.tag.reading-log</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>0.5235 0.1283 46.59<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>100% 0 0<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.tag.note</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>0.4941 0.0863 171.53<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>100% 0 0<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.tag.book-note</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>0.4294 0.1603 321.88<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>100% 0 0<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.tag.week-note</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>0.4169 0.1381 354.71<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">oklch</span><span class=\"token punctuation\">(</span>100% 0 0<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archives-list li .post-metadata span.date</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">min-width</span><span class=\"token punctuation\">:</span> 75px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> right<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archive-year:has(li[hidden])</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.archive-year:has(li:not([hidden]))</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> inherit<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token atrule\"><span class=\"token rule\">@media</span> <span class=\"token punctuation\">(</span><span class=\"token property\">max-width</span><span class=\"token punctuation\">:</span> 500px<span class=\"token punctuation\">)</span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token selector\">section.filter</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">gap</span><span class=\"token punctuation\">:</span> 16px<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token selector\">section.filter input</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 8px 0 0 0<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 9px 12px<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token selector\">section.filter button</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">align-self</span><span class=\"token punctuation\">:</span> flex-end<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token selector\">.archives-list li</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 8px<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token selector\">.archives-list li .post-metadata</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">flex-direction</span><span class=\"token punctuation\">:</span> column<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">min-width</span><span class=\"token punctuation\">:</span> 100px<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">gap</span><span class=\"token punctuation\">:</span> 4px<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> flex-end<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token selector\">.archives-list li .post-metadata span.tag</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">align-self</span><span class=\"token punctuation\">:</span> flex-end<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-25T23:28:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/bradley-hope-tom-wright-billion-dollar-whale/",
      "url": "https://kpwags.com/books/bradley-hope-tom-wright-billion-dollar-whale/",
      "title": "Book Notes for Billion Dollar Whale: The Man Who Fooled Wall Street, Hollywood, and the World",
      "content_html": "\n\t\t<p>I had heard about this book a while ago and when it was mentioned again in <a href=\"https://bookshop.org/p/books/apple-in-china-the-capture-of-the-world-s-greatest-company-patrick-mcgee/21872828\">Apple in China</a>, I decided to see if it was available through my library, and sure enough it was.</p>\n<p>This book goes through the history of the <a href=\"https://en.wikipedia.org/wiki/1Malaysia_Development_Berhad_scandal\">1MDB scandal</a>. For those unaware, 1MDB was a Malaysian sovereign wealth fund that ended up being a slush fund for the Malaysian Prime Minister, Najib Razak and his family, Jho Low, and several other conspirators in Saudi Arabia, the United Arab Emirates and others.</p>\n<p>The book was a fascinating look at how the fund was formed and how Jho Low was able to expertly navigate the world's financial systems to bypass all safeguards they had put in place.</p>\n<p>This, like many other financial scandals that have occurred throughout the world, had many red flags thrown throughout the grift, and every time bankers either were strong-armed into believing questionable statements or were willing to look the other way to make money.</p>\n<p>The book was written in such a way that I was able to easily understand what was going on. It allow the reader to follow the progress of all the different happenings and ways that Low and his conspirators were able to dodge investigations and any roadblocks that were thrown in their path.</p>\n<p>One quote towards the end of book proves prescient still even today.</p>\n<blockquote>\n<p>Low's genius was he sensed that the world's largest banks, its auditors, and its lawyers would not throw up obstacles to his scheme if they smelled profits. It's easy to sneer at Malaysia as a cesspool of graft, but that misses the point. None of this could have happened without the connivance of scores of senior executives in London, Geneva, New York, Los Angeles, Singapore, Hong Kong, Abu Dhabi, and elsewhere.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/best-practice-is-just-your-opinion/",
      "url": "https://kpwags.com/notes/best-practice-is-just-your-opinion/",
      "title": "&quot;Best practice&quot; is Just Your Opinion",
      "content_html": "\n\t\t<blockquote>\n<p>When we use the term &quot;best practice&quot;, it sounds like what we're saying is, &quot;what you've done is fine, but here's another way you <em>could</em> have done it.&quot; When in fact, what we're really saying is, &quot;I want you to fix this accessibility issue, but I can't technically fail you on it, because it's outside the scope of this particular standard.&quot;</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-22T22:26:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/i-made-a-floppy-disk-from-scratch/",
      "url": "https://kpwags.com/notes/i-made-a-floppy-disk-from-scratch/",
      "title": "I Made a Floppy Disk from Scratch",
      "content_html": "\n\t\t<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/TBiFGhnXsh8\" title=\"Artist - I Made a Floppy Disk from Scratch\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n<p>This was just so cool.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-22T22:24:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/141/",
      "url": "https://kpwags.com/reading-log/141/",
      "title": "Reading Log - September 22, 2025 (#141)",
      "content_html": "\n\t\t<p>A bunch of cool CSS thoughts and new features, API design, Tariffs hurting hobbyists, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.milanjovanovic.tech/blog/the-real-cost-of-abstractions-in-dotnet\">The Real Cost of Abstractions in .NET</a> - <em>Milan Jovanovic</em></li>\n<li><a href=\"https://blog.ivankahl.com/csharp-14-null-conditional-assignments/\">What's New in C# 14: Null-Conditional Assignments</a> - <em>Ivan Kahl</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.simplethread.com/new-and-upcoming-css-features-i-m-excited-about/\">New and Upcoming CSS Features I’m Excited About</a> - <em>Quasar Wei</em></li>\n<li><a href=\"https://andy-blum.com/articles/how-i-wish-web-components-worked/\">How I Wish Web Components Worked</a> - <em>Andy Blum</em></li>\n<li><a href=\"https://www.zachleat.com/web/stable-scrollbar-gutters/\">A Tiny Bit-O-CSS for Stable Scrollbar Gutters</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://aaadaaam.com/notes/no-class/\">This website has no class</a> - <em>Adam Stoddard</em></li>\n<li><a href=\"https://aaadaaam.com/notes/useful-defaults/\">There’s no such thing as a CSS reset</a> - <em>Adam Stoddard</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.seangoedecke.com/good-api-design/\">Everything I know about good API design</a> - <em>Sean Goedecke</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/idea-to-reality-with-prototypes/\">Successive Prototypes Bridge the Gap Between Idea and Reality</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://surfingcomplexity.blog/2025/08/17/easy-will-always-trump-simple/\">Easy will always trump simple</a> - <em>Lorin Hochstein</em></li>\n<li><a href=\"https://craigabbott.co.uk/blog/best-practice-is-just-your-opinion/\">&quot;Best practice&quot; is just your opinion</a> - <em>Craig Abbott</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2025/why-make-a-website-in-2025/\">Why Make a Website in 2025?</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2025/rip-browsers/\">RIP “Browsers”</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/the-software-engineers-paid-to-fix-vibe-coded-messes/\">The Software Engineers Paid to Fix Vibe Coded Messes</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://defector.com/rfk-jr-is-making-his-bid-to-become-one-of-american-historys-biggest-killers\">RFK Jr. Is Making His Bid To Become One Of American History's Biggest Killers</a> - <em>Sabrina Imbler</em></li>\n<li><a href=\"https://badastronomy.beehiiv.com/p/earth-s-oldest-crater-found\">Earth’s oldest crater found!</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2025/09/thirty-years-later-simcity-2000-hasnt-changed-but-i-have/\">Why, as a responsible adult, SimCity 2000 hits differently</a> - <em>Kyle Orland</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.404media.co/2-000-shipping-international-sellers-charge-absurd-prices-to-avoid-dealing-with-american-tariffs/\">$2,000 Shipping: International Sellers Charge Absurd Prices to Avoid Dealing With American Tariffs</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.theringer.com/podcasts/plain-english-with-derek-thompson/2025/09/19/the-jimmy-kimmel-saga-and-americas-free-speech-crisis\">Plain English Podcast: Jimmy Kimmel and America's Free-Speech Crisis</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/17830537-it-s-a-banned-banned-banned-banned-world\">Ctrl-Alt-Speech: It's a Banned, Banned, Banned, Banned World</a></li>\n<li><a href=\"https://shoptalkshow.com/682/\">Shop Talk Show: Whiskey, Security, Antitrust, and Fun with CSS Functions</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://aaadaaam.com/notes/kobo-pilled/\">Kobo-pilled</a> - <em>Adam Stoddard</em></li>\n<li><a href=\"https://daverupert.com/2025/09/you-cant-drink-coffee-on-a-running-horse/\">Many years on the job and I still don't get it</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Billy the Kid - In the Wake of You</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/RK1kNWKNXOw\" title=\"Billy the Kid - In the Wake of You\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-22T22:22:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/68/",
      "url": "https://kpwags.com/week-note/68/",
      "title": "Week Notes for September 14 - 20 (#68)",
      "content_html": "\n\t\t<p>My week notes for the week of September 14 through September 20.</p>\n<h2>Lucero Concert</h2>\n<p>On Tuesday I went to see Lucero live at the Ardmore Music Hall. They were celebrating the 20 year anniversary of the release of <a href=\"https://www.youtube.com/watch?v=c6RoAjmDPBw&amp;list=PL4C072D4A4D7B097E\">Nobody's Darlings</a>. They played the album front to back and then some of their hits. It was a good show and I got to meet Ben Nichols, their frontman at the end of the show.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/gC0FuMuha0-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/gC0FuMuha0-1920.gif 1920w\" /><img alt=\"The band Lucero playing live on stage\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/gC0FuMuha0-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<h2>Lazy(ish) Week</h2>\n<p>From a fitness perspective, it was a lazy week. I decided to take a needed rest day on Monday and then with the concert and being exhausted the day after, I didn't do much those days either. Tried to lift Friday and tweaked my back. Nothing major, just wasn't my week to be active.</p>\n<h2>New Winery &amp; Brewery</h2>\n<p>My wife and I didn't really have any plans Saturday so we ventured down to the Chadds Ford area to check out <a href=\"http://pennswoodswinery.com/\">Penns Woods Winery</a>. They had some good wines and their property was nice. Plenty of tables in a field with some canopies. The weather was beautiful so it was great to just sit outside and enjoy some wine.</p>\n<p>On the way home, we stopped for dinner at the <a href=\"https://2sptaphouse.com/\">2SP Tap House</a>. Dinner was delicious and the beers were good too.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-21T14:49:59Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/its-time-for-modern-css-to-kill-the-spa/",
      "url": "https://kpwags.com/notes/its-time-for-modern-css-to-kill-the-spa/",
      "title": "It’s time for modern CSS to kill the SPA",
      "content_html": "\n\t\t<blockquote>\n<p>While we were busy reinventing navigation in JavaScript, the platform quietly solved the problem.</p>\n<p>Modern browsers – specifically Chromium-based ones like Chrome and Edge – now support native, declarative page transitions. With the View Transitions API, you can animate between two documents – including full page navigations – without needing a single line of JavaScript.</p>\n<p>Yes, really.</p>\n</blockquote>\n<p>Let the browsers do as much of the work as possible.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-17T22:14:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/140/",
      "url": "https://kpwags.com/reading-log/140/",
      "title": "Reading Log - September 15, 2025 (#140)",
      "content_html": "\n\t\t<p>This week it's the last of the &quot;Why Your Team Sucks&quot; series, thoughts on Apple and China, and more.</p>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://buttondown.com/blog/rss-vs-ice\">The story of how RSS beat Microsoft</a> - <em>Ryan Farley</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pxlnv.com/blog/mcgee-apple-in-china/\">Apple in China</a> - <em>Nick Heer</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/story/2025/09/10/the-double-tax-explores-black-womens-economic-load\">&quot;The Double Tax&quot; looks at the compounded costs Black women face in this economy</a> - <em>Kai Ryssdal &amp; Sean McHenry</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-green-bay-packers\">Why Your Team Sucks 2025: Green Bay Packers</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-minnesota-vikings\">Why Your Team Sucks 2025: Minnesota Vikings</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-houston-texans\">Why Your Team Sucks 2025: Houston Texans</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-los-angeles-rams\">Why Your Team Sucks 2025: Los Angeles Rams</a> - <em>Matt Ufford</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-baltimore-ravens\">Why Your Team Sucks 2025: Baltimore Ravens</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-detroit-lions\">Why Your Team Sucks 2025: Detroit Lions</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-washington-commanders\">Why Your Team Sucks 2025: Washington Commanders</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-buffalo-bills\">Why Your Team Sucks 2025: Buffalo Bills</a> - <em>Victoria Zeller</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-kansas-city-chiefs\">Why Your Team Sucks 2025: Kansas City Chiefs</a> - <em>Dan McQuade</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-philadelphia-eagles\">Why Your Team Sucks 2025: Philadelphia Eagles</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-los-angeles-chargers\">Why Your Team Sucks 2025: Los Angeles Chargers</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-pittsburgh-steelers\">Why Your Team Sucks 2025: Pittsburgh Steelers</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-denver-broncos\">Why Your Team Sucks 2025: Denver Broncos</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.404media.co/charlie-kirk-was-not-practicing-politics-the-right-way/\">Charlie Kirk Was Not Practicing Politics the Right Way</a> - <em>Jason Koebler &amp; Samantha Cole</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Lucero - Buy a Little Time</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/htOEq6JKNDk\" title=\"Lucero - Buy a Little Time\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-15T23:23:07Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/67/",
      "url": "https://kpwags.com/week-note/67/",
      "title": "Week Notes for September 7 - 13 (#67)",
      "content_html": "\n\t\t<p>My week notes for the week of September 7 through September 13.</p>\n<h2>Fall/Winter Hockey Season Starting</h2>\n<p>The offseason is over, the fall/winter season has begun. We had our first game of the season. I ended up playing in net, and sadly it didn't go particularly well. I let in a few soft ones and we lost 5-3. Oh well, it's an 18 game season, will work to bounce back next game.</p>\n<h2>Enjoying the Beautiful Weather</h2>\n<p>This week ended up having some really nice weather and I took advantage by sitting out on the porch as much as possible. I wrote a lot and just enjoyed the brisk weather. Feels like fall is coming a little early before the temperature started warming again.</p>\n<h2>Getting My Strength Back</h2>\n<p>I've been doing a good job of staying in my lifting routine and I'm slowly seeing my strength come back. Part of it might be me resetting the weights I'm lifting a little on the low side, but I'm starting to see the numbers rise to numbers that feel a little more similar to where I was in the past.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-14T17:43:36Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/patrick-mcgee-apple-in-china/",
      "url": "https://kpwags.com/books/patrick-mcgee-apple-in-china/",
      "title": "Book Notes for Apple in China: The Capture of the World&#39;s Greatest Company",
      "content_html": "\n\t\t<p>This was a look at how Apple grew from manufacturing primarily in America to almost exclusively in China. It was a fascinating look from when Apple had to sell their own factories just to avoid bankruptcy to today.</p>\n<p>It was kind of eerie to see all the decisions that slowly but surely tied them to China. The book goes through in detail all the different things Apple did to take advantage of the cheap labor in China as well as all the hoops they had to jump through to appease the dictatorship. It was informative and enlightening both about the decisions Apple made, and how China flexes its muscles to capture technical know-how as well as the manufacturing capabilities.</p>\n<blockquote>\n<p>Cook's silence, his ultimate consent, was highly indicative of just how beholden America's most valuable company had become to an authoritarian state. The point however, isn't to condemn Cook or Apple. It's to convey the predicament they're in. At the turn of the millennium, Washington made a bet on China. A bet that free trade would liberalize the country and perhaps catalyze the creation of the world's biggest democracy. Instead, trade enriched China and empowered its rulers. Cook shouldn't be blamed by politicians for enmeshing Apple's operations in China two decades ago, but he has erred by doubling down over the past decade, despite mounting evidence that Xi has been ramping up repression at home and taking a more combative stance in international affairs.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/09/11/a-redesign-with-a-focus-on-notes-and-links/",
      "url": "https://kpwags.com/posts/2025/09/11/a-redesign-with-a-focus-on-notes-and-links/",
      "title": "A Redesign with a Focus on Notes &amp; Links",
      "content_html": "\n\t\t<p>For the last couple of weeks I've been slowly starting to re-do my site. The design itself I don't see changing significantly. Part of it is my near constant desire to keep tweaking. Another is to try to clean up some of the tech debt I'd accumulated over the course of building this site. The one part I want to focus on is how I share links.</p>\n<h2>Tech Debt</h2>\n<p>When I first started building my site with 11ty, I over-engineered some pieces of the code not fully understanding how it worked or how I could really utilize its functionality. Because of this, I've found plenty of code that is messy, tries to do too much, or just isn't in use anymore. This next build, I'm planning to start from scratch. Remove all my collections, filters, and everything else. And then as I build out the site, reintroduce it as needed and clean it up. It feels a little extreme, but it's my personal site and well, it's what I feel like doing. It'll hopefully make future modifications.</p>\n<h2>Cleaning Up CSS</h2>\n<p>I very often feel like my CSS is a mess. It's probably my weak link when it comes to web development with the HTML/CSS/JS trio. Much like with the rest of the tech debt, I'm thinking it would be worth it to treat my CSS the same way. Clean it up and try to streamline my styles. Unrelated, I think I might start looking for a good CSS online class to take.</p>\n<h2>Sharing Links</h2>\n<p>To get a better understanding of what I'm thinking with regards to link sharing, one thing to keep in mind would be that I share links in several places, and part of what I want to accomplish in this redesign, is to figure out how I want to continue moving forward. I share links in way too many different places and part of me is wondering if I need to condense things.</p>\n<h3>Reading Logs</h3>\n<p>My <a href=\"https://kpwags.com/reading-logs\">reading logs</a> is where it all began. I really enjoyed posts like <a href=\"https://www.alvinashcraft.com/\">Dew Drop</a> by Alvin Ashcraft. It provides a daily list of links from various sources about what's going on in various dev realms, with a slight focus on .NET. I generally don't have time to read and share so many links on a daily basis, so I decided to start my reading logs and post them weekly. I generally read enough weekly to make it worth it. There's no information about each link other than a general category.</p>\n<p>From a technical perspective, I used to build this manually saving each link to a text file. Then I started adding them to Notion, and building them manually from that. Then I decided to take it a step further and built a C# console application to build the bulk of the post for me. Now I save them to my media repository and a console app pulls them from there and builds out the markdown file for the post.</p>\n<h3>Links</h3>\n<p>My <a href=\"https://kpwags.com/links/\">links</a> page came from my reading logs page. I store all the links, so why not just share them on a page. It's sort of the firehose of all the links I want to share. Every link on this page was or will be posted in my reading log. Here the only context behind them is the type (article, podcast, or video).</p>\n<h3>Blog Posts</h3>\n<p>While not the usual way, there are the occasional blog post where I'm sharing a link because I might not be really adding my 2¢ as much as promoting it with some context. It's one of those weird spots where it's not quite a note as it's just a &quot;hey check out what this person did!&quot;.</p>\n<h3>Week Notes</h3>\n<p>Each week notes I share a couple of links with some thoughts around them. I'm starting to think that I might just switch the format back to focusing on what I did the past week and move any links I want to share to the notes page.</p>\n<h3>Notes</h3>\n<p>The final piece is my <a href=\"https://kpwags.com/notes/\">notes</a> page. I shamelessly <s>stole</s> borrowed this idea from the likes of <a href=\"https://notes.jim-nielsen.com/\">Jim Nielsen</a>, <a href=\"https://adactio.com/links\">Jeremy Keith</a>, <a href=\"https://kottke.org/\">Jason Kottke</a>, and I'm sure others. The whole premise is that I'm sharing links with either a few personal notes about the link or a quote from the piece. This is a section of my site where I'm questioning its design. I often view this page and it feels a little crowded.</p>\n<h2>Simplifying Things</h2>\n<p>I'm not sure exactly hot I want to do this. I'm tackling most of my other pages with the redesign first, putting off how to best handle my notes page in particular. I definitely want a cleaner look for the page though I haven't fully flushed that out. From a design perspective, this will probably be the biggest change from the current design.</p>\n<p>I love having a personal site to monkey around with.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-11T13:13:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/09/09/why-do-i-read-books-that-make-me-angry-so-often/",
      "url": "https://kpwags.com/posts/2025/09/09/why-do-i-read-books-that-make-me-angry-so-often/",
      "title": "Why Do I Read Books that Make Me Angry so Often?",
      "content_html": "\n\t\t<p>I read a lot. As I'm writing this, it's the beginning of September and I've read 49 books so far this year. It's the most I've ever read in a year (though it's propped up some by me delving into audio books and being able to juggle 2 books at a time so long as one is an audiobook and the other is physical or an eBook). But the one thing I've sometimes noticed is that I seem to quite often read books that make me angry, and I knew they'd make me angry when I started them.</p>\n<p>Books can make one feel a range of emotions, and while not every book makes me feel this way, even my wife has started noticing that I sometimes read books that make me annoyed or angry. Some examples include:</p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/rise-of-the-warrior-cop-the-militarization-of-america-s-police-forces-radley-balko/11487752\">Rise of the Warrior Cop: The Militarization of America's Police Forces</a> by Radley Balko</li>\n<li><a href=\"https://bookshop.org/p/books/bad-company-private-equity-and-the-death-of-the-american-dream-megan-greenwell/22086306\">Bad Company: Private Equity and the Death of the American Dream</a> by Megan Greenwell</li>\n<li><a href=\"https://bookshop.org/p/books/murder-the-truth-threats-intimidation-and-a-secret-campaign-to-protect-the-powerful-david-enrich/21543213\">Murder the Truth: Fear, the First Amendment, and a Secret Campaign to Protect the Powerful</a> by David Enrich</li>\n<li><a href=\"https://bookshop.org/p/books/when-mckinsey-comes-to-town-the-hidden-influence-of-the-world-s-most-powerful-consulting-firm-michael-forsythe/18369941\">When McKinsey Comes to Town: The Hidden Influence of the World's Most Powerful Consulting Firm</a> by Walt Bogdanich &amp; Michael Forsythe</li>\n<li><a href=\"https://bookshop.org/p/books/the-death-of-expertise-second-edition-the-assault-on-establishment-knowledge-and-why-it-matters-tom-nichols/20688747\">The Death of Expertise: The Campaign Against Established Knowledge and Why It Matters</a> by Tom Nichols</li>\n</ul>\n<p>These books were all incredibly fascinating and I would recommend them to anyone. But each one made me angry or worrysome for the future in different ways.</p>\n<p><em>Rise of the Warrior Cop</em> talked about how police forces have changed over the years, and how they've in many cases built into small armies while also, with the help of the courts, stripping away our constitutional rights.</p>\n<p><em>Bad Company</em> talked about how private equity has begun to eat away at communities, jobs and our health care all to make (a few people) a quick buck.</p>\n<p><em>Murder the Truth</em> went into the history of libel law, and how now, the rich and powerful are trying to silence those who want to shed light on their (mis)deeds. First amendment be damned.</p>\n<p><em>When McKinsey Comes to Town</em> was about how McKinsey would often come into companies to &quot;increase performance&quot; but would all too often cause irredeemable harm to everyone involved from employees laid off to even making the opioid crisis worse.</p>\n<p><em>The Death of Expertise</em> talked about, among many things, how often now &quot;doing your own research&quot; at the university of Google is now being pushed as being better than experts and those who have actual knowledge with the subject matter.</p>\n<p>Each one of these books touch on important topics that need to be discussed, and subject matter that more people need to learn about. I found each one to be fascinating, but each one made me want to rage as I look at the world and get mad that we as a nation and as a world are in the position we're in.</p>\n<p>I don't regret reading them, and it's not like every book I read makes me want to scream out in anger, but sometimes I wonder what I'm thinking when it comes to what I choose to read.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-09T22:57:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/139/",
      "url": "https://kpwags.com/reading-log/139/",
      "title": "Reading Log - September 8, 2025 (#139)",
      "content_html": "\n\t\t<p>A little light this week. Some tricks with CSS and scrolling, domain hoarding and selling, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.sarasoueidan.com/blog/css-scrollspy/\">CSS-only scrollspy effect using scroll-marker-group and :target-current</a> - <em>Sara Soueidan</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.jordanharbinger.com/edward-fishman-why-the-dollar-is-americas-most-potent-weapon/\">Jordan Harbinger Show: Edward Fishman | Why the Dollar Is America’s Most Potent Weapon</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/17792429-the-haidt-of-hypocrisy\">Ctrl-Alt-Speech: The Haidt of Hypocrisy</a></li>\n<li><a href=\"https://www.npr.org/2025/09/03/nx-s1-5526903/domain-name-value-milk-dot-com\">Planet Money: The million dollar mystery behind Milk.com</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://paulkrugman.substack.com/p/hackification\">Hackification</a> - <em>Paul Krugman</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Tisburys - The Tisburys (On Main Street)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/1TqhyoOKGeE\" title=\"The Tisburys - The Tisburys (On Main Street)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-08T23:44:08Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/66/",
      "url": "https://kpwags.com/week-note/66/",
      "title": "Week Notes for August 31 - September 6  (#66)",
      "content_html": "\n\t\t<p>My week notes for the week of August 31 through September 6.</p>\n<h2>More Dave Hause</h2>\n<p>After seeing Dave Hause at Spruce Street Harbor Park in Philly, we went into Wayne to see him again for a record release show and party. It was at a cool little bar venue called <a href=\"https://118northwayne.com/\">118 North</a>. It was a good set and nice to hear all the new songs.</p>\n<h2>Hockey Starting Back Up</h2>\n<p>It's still technically between seasons, but I rented one of the rinks for an hour for my team to practice and then scrimmage. It was a lot of fun but damn was I gassed after.</p>\n<h2>Practicing Guitar</h2>\n<p>I've been practicing guitar more. I still have quite a bit to work on, but the back-to-back nights of concerts, I've been inspired to play more. I also spent an hour-plus removing all the stickers from my electric guitar that I stupidly put on as a teenager when I first tried to pick up the guitar.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-07T19:09:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/09/04/still-trying-to-figure-out-a-good-social-media-balance/",
      "url": "https://kpwags.com/posts/2025/09/04/still-trying-to-figure-out-a-good-social-media-balance/",
      "title": "Still Trying to Figure Out a Good Social Media Balance",
      "content_html": "\n\t\t<p>At the beginning of the year I took I want to say close to 2 months off social media. I stayed off the two platforms I have accounts on (Mastodon &amp; Bluesky), I deleted the apps and signed out of my desktop sessions. I have since returned to the platforms, but I'm still trying to figure out how I want to handle my use of social media.</p>\n<p>There's a lot of hate aimed at social media about how it affects people's mental health. I personally believe that much of this is really better suited to be handled on a case by case basis as it can affect people in drastically different ways, not always negatively.</p>\n<p>With that said, for me personally, after Trump won the elections in both 2016 and 2024, I definitely felt social media became a drain on my mental health. So often it's become doomscrolling, wondering what fresh hell he's caused this time. And if the only people I followed on social media only posted political content, it'd be an easy 'delete my account' decision. But it's not the case.</p>\n<p>One of the things that kept me on Twitter back in the day was the developer community. There was always someone posting about a cool little project they were working on or some cool new trick you could do with CSS. Twitter/X is now a nazi bar, but fortunately the cool kids all migrated to Bluesky and Mastodon.</p>\n<p>This is pretty much the reason I haven't deleted my accounts and why I'm still at least active on the platforms. The developer community is pretty awesome and I love seeing the different things people are working on, or how they're building out their personal sites. I see this a lot more on Mastodon, but the community is there on Bluesky as well.</p>\n<p>I've been trying to limit my screen time lately as well, irregardless of my mental health, I started to notice I was again developing the habit of just mindlessly scrolling on my phone. I deleted Bluesky from my phone, but kept Mastodon. My thought there was that because Mastodon for me is much more dev/tech focused, the mindless scrolling is somewhat more limited as I'm more likely to find something worth clicking into that will provide more depth or value. Part of this is most certainly me making excuses for myself, but I still think there's something to be said about an article on how to better use CSS Grid than random shitposts or however many posts providing detailed points why America has slipped into facism.</p>\n<p>I have in the past pruned who I followed. I think at the very least, I need to do this. On Twitter back in the day, I did a mass purge of who I followed and really got rid of a lot of the newsy-political accounts. Twitter had the ability to add accounts to your lists without actually following them. And in a twist of fate that I discovered while writing this, it appears Bluesky offers that same functionality. Mastodon still does not it would seem. This was nice because it allowed me to unfollow them while also <em>not completely</em> unfollow them when I wanted to delve down the more newsy feed.</p>\n<p>And while I definitely prefer Mastodon over Bluesky, I was listening to <a href=\"https://www.techdirt.com/2025/09/02/techdirt-podcast-episode-429-the-eternal-september/\">Mike Masnick on a podcast</a> the other day talking about Bluesky (disclaimer: he is on Bluesky's board) and was talking about custom feeds and some of the tooling being built around them. I've started following some custom feeds for things like MLB, Star Trek, &amp; Devs. They're actually a pretty cool feature that allows for you to follow custom algorithms to follow certain topics. But one thing Mike mentioned was that some of the tooling is getting more in-depth and could allow for filtering certain content depending on the day or other criteria. It's something I'll have to keep an eye on.</p>\n<p>Still though, I've been trying to find a way to strike the right balance between enjoying Mastodon &amp; Bluesky while also balancing screen time and my mental health. There's probably an argument to be made that if I'm concerned, it might be time to completely disconnect. And while I wouldn't completely dismiss that, I suspect there might still be a balance somewhere.</p>\n<p>Do any of you have any tips, tricks, hacks, or anything that helps you with your social media use?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-04T23:32:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/09/02/august-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/09/02/august-2025-check-in/",
      "title": "August 2025 Check-In",
      "content_html": "\n\t\t<p>It’s been a mostly quiet month.</p>\n<h2>Writing More</h2>\n<p>I’ve been really trying to get myself to write more by trying to set aside 30 minutes a day to write. I don’t necessarily focus on any specific piece. Sometimes it’s a blog post, other times it’s my novel.</p>\n<p>As I wrote at the beginning of the month, I also started <a href=\"https://kpwags.com/posts/2025/08/07/scheduling-some-blog-posts/\">scheduling and planning my blog posts</a> in an attempt to help me both achieve my goal of 100 posts this year as well.</p>\n<p>I know it kind of sounds like I’m really having to force myself, and in some cases it might be true. But really what it also comes down to is just getting myself in the mindset and setting aside time. I want to get better, but like with everything, it means sitting down and actually doing it. So far, so good.</p>\n<h2>Lifting More</h2>\n<p>After reading <a href=\"https://bookshop.org/p/books/the-heavy-lift-how-learning-to-lift-weights-helped-me-build-every-kind-of-strength-casey-johnston/21552643\">A Physical Education: How I Escaped Diet Culture and Gained the Power of Lifting</a> by Casey Johnston, I’ve been motivated to get back into a lifting routine. I lifted more in August than I have any month this year and for a while. I’d been shrugging off lifting days and opting for walks or runs instead. That wasn’t necessarily a bad thing as runs, walks, and hockey gets my heart pumping and is still exercise, but it had made every try to get back into lifting make me feel weak again.</p>\n<p>All the false starts have thus far been in the past as I’ve been doing a good job of lifting every other day with only a blip here and there. Feeling stronger again so I’m planning on keeping up with it. The next challenge will be on days after hockey when the next season starts in a week or so.</p>\n<h2>Screen Time Improvements</h2>\n<p>I’ve been trying to do better with screen time, and I <em>think</em> I’m doing better. I feel better about it anyways. I’ve been focusing more on RSS rather than social. I haven’t abandoned social media, just trying to go through more in-depth pieces rather than Bluesky or Mastodon. I’m still trying to sort out my thoughts on social media. I did kind of enjoy my cleanse at the beginning of the year.</p>\n<h2>Concerts Galore</h2>\n<p>Galore might be a strong word, but I saw Halestorm and Volbeat in the middle of August and Dave Hause twice at the end of the month. The weather was gorgeous so my wife and I ventured into Philly to see Dave put on a free show at the Spruce Street Harbor Park with The Tisburys and then again the next night with John Gallagher Jr. at 118 North in Wayne, PA. Both shows were a lot of fun and were enjoyable evenings. Definitely wants me to play guitar more.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>10</span> runs - <span>37.65</span> miles</li>\n<li><strong>Walking:</strong> <span>27</span> walks - <span>25.60</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>12</span> sessions - <span>180,370</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153\">The Well of Ascension</a> by Brandon Sanderson</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-heavy-lift-how-learning-to-lift-weights-helped-me-build-every-kind-of-strength-casey-johnston/21552643\">A Physical Education: How I Escaped Diet Culture and Gained the Power of Lifting</a> by Casey Johnston</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/zen-mind-beginner-s-mind-50th-anniversary-edition-shunryu-suzuki/10545494\">Zen Mind, Beginner's Mind</a> by Shunryu Suzuki</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153\">The Hero of Ages</a> by Brandon Sanderson</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/play-nice-the-rise-fall-and-future-of-blizzard-entertainment-jason-schreier/21042587\">Play Nice: The Rise, Fall, and Future of Blizzard Entertainment</a> by Jason Schreier</li>\n<li>Started <a href=\"https://bookshop.org/p/books/our-dollar-your-problem-an-insider-s-view-of-seven-turbulent-decades-of-global-finance-and-the-road-ahead/25272efc00984569\">Our Dollar, Your Problem: An Insider's View of Seven Turbulent Decades of Global Finance, and the Road Ahead</a> by Kenneth Rogoff</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/134/\">August 4 (#134)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/135/\">August 11 (#135)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/136/\">August 18 (#136)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/137/\">August 25 (#137)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/61/\">July 27 - August 2 (#61)</a></li>\n<li><a href=\"https://kpwags.com/week-note/62/\">August 3 - 9 (#62)</a></li>\n<li><a href=\"https://kpwags.com/week-note/63/\">August 10 - 16 (#63)</a></li>\n<li><a href=\"https://kpwags.com/week-note/64/\">August 17 - 23 (#64)</a></li>\n<li><a href=\"https://kpwags.com/week-note/65/\">August 24 - 30 (#65)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about the <a href=\"https://kpwags.com/posts/2025/08/01/another-hockey-season-over/\">end of another hockey season</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/07/scheduling-some-blog-posts/\">scheduling some blog posts</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/12/coding-assistants-and-not-feeling-left-behind/\">coding assistants and some fears around them</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/14/ownership/\">owning things</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/19/my-love-for-libraries/\">my love for libraries</a>.</li>\n<li>Mused about <a href=\"https://kpwags.com/posts/2025/08/21/could-i-not-be-the-worst-gm-in-sports/\">whether I might not somehow be the worst possible GM in all of sports</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/22/cruel-hoax-doesnt-even-begin-to-describe-what-happened-at-villanova/\">how awful the 'cruel hoax' at Villanova was</a>.</li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/08/25/calvinball-jurisprudence/\">a rather scathing dissent from Supreme Court Justice Ketanji Brown Jackson</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/26/handling-too-many-news-subscriptions/\">handling so many news subscriptions</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/08/28/insecurity-in-my-writing/\">dealing with insecurity in my writing</a>.</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Started back up <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">World of Warcraft</a> (heaven help me)</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt12327578/\">Star Trek: Strange New Worlds</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt10574236/\">Station Eleven</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt14218830/\">Abbott Elementary</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0247082/\">CSI</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt0458290/\">Star Wars: The Clone Wars</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt1185834/\">Star Wars: The Clone Wars</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0365907/\">A Walk Among the Tombstones</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0121766/\">Star Wars Episode III: Revenge of the Sith</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-02T23:30:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/138/",
      "url": "https://kpwags.com/reading-log/138/",
      "title": "Reading Log - September 1, 2025 (#138)",
      "content_html": "\n\t\t<p>An amazing shot of Earth, a discussion about Bluesky and Blacksky, a tough job market, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.telerik.com/blogs/building-modern-scalable-applications-tanstack-router-react\">Building Modern and Scalable Applications with TanStack Router in React</a> - <em>Christian Nwamba</em></li>\n<li><a href=\"https://adactio.com/journal/22084\">Style your underlines</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://gomakethings.com/the-quest-for-the-perfect-progressively-enhanced-dropdown-menu/\">The quest for the perfect progressively enhanced dropdown menu</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://una.im/5-css-functions/\">5 Useful CSS functions using the new @function rule</a> - <em>Una Kravets</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.jpl.nasa.gov/news/nasas-psyche-captures-images-of-earth-moon/\">NASA’s Psyche Captures Images of Earth, Moon</a> - <em>NASA</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.nytimes.com/2025/08/10/technology/coding-ai-jobs-students.html?unlocked_article_code=1.dk8.xLoS.P-Ia0YhlDIhX&amp;smid=url-share\">Goodbye, $165,000 Tech Jobs. Student Coders Seek Work at Chipotle.</a> - <em>Natasha Singer</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/08/27/techdirt-podcast-episode-428-blacksky-demonstrates-the-promise-of-open-social-media-protocols/\">Techdirt Podcast: Blacksky Demonstrates The Promise Of Open Social Media Protocols</a></li>\n<li><a href=\"https://www.bloomberg.com/news/audio/2025-08-29/bloomberg-masters-in-business-mark-zandi-podcast\">Masters in Business: Mark Zandi</a></li>\n<li><a href=\"https://www.nytimes.com/2025/08/27/opinion/ezra-klein-podcast-radley-balko.html\">The Ezra Klein Podcast: Trump Is Building His Own Paramilitary Force</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2024/10/02/the-disappearing-islands\">How We Survive: The Disappearing Islands</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/story/2025/08/26/can-trump-fire-fed-governor-lisa-cook\">Can Trump fire Fed Governor Lisa Cook?</a> - <em>David Brancaccio &amp; Ariana Rosas</em></li>\n<li><a href=\"https://defector.com/tyranny-is-managed-into-existence\">Tyranny Is Managed Into Existence</a> - <em>Tom Scocca</em></li>\n<li><a href=\"https://www.techdirt.com/2025/08/12/is-it-still-trump-derangement-syndrome-if-all-the-predictions-were-accurate/\">Is It Still ‘Trump Derangement Syndrome’ If All The Predictions Were Accurate?</a> - <em>Mike Brock</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://blogs.newardassociates.com/blog/2025/why-writing-matters.html\">Why Writing Matters (to the Technical Professional)</a> - <em>Ted Neward</em></li>\n<li><a href=\"https://cobb.land/posts/whos-a-blog-for/\">Who's a blog for?</a> - <em>Cobb</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Rise Against - Prizefighter</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/hCfQqrLe5x4\" title=\"Rise Against - Prizefighter\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-09-01T21:47:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/65/",
      "url": "https://kpwags.com/week-note/65/",
      "title": "Week Notes for August 24 - 30 (#65)",
      "content_html": "\n\t\t<p>My week notes for the week of August 24 through August 30.</p>\n<h2>Notes</h2>\n<h3>Gorgeous Weather</h3>\n<p>The weather has dipped back into the 70s this week which gave me the excuse to hang out on the porch in the evening since I didn't feel like dying from sweat.</p>\n<h3>A Blip in My Lifting Routine</h3>\n<p>I had been doing a good job sticking to my lifting schedule. Every other day, like clockwork. This week I pushed it off twice. I was tired one day and opted to take Tess on a long walk and then beautiful weather made me opt for a run outdoors.  Not mad about it, I've been doing a better job of not skipping out and staying on track so I can start seeing progress with my strength again.</p>\n<h3>Free Dave Hause Show in Philly</h3>\n<p>Saturday we ventured into Philly to Spruce Street Harbor Park to see a free <a href=\"https://www.davehause.com/\">Dave Hause</a> concert. The weather was beautiful and we were able to walk around, grab dinner, and see a good show. <a href=\"https://thetisburys.com/\">The Tisburys</a> opened and gave me another band's discography to dig into. I talked with a few of them after at the bar and even bumped into some members of <a href=\"https://crossedkeys.net/\">Crossed Keys</a> who we saw back in December. It was a fun evening.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.jpl.nasa.gov/news/nasas-psyche-captures-images-of-earth-moon/\">NASA’s Psyche Captures Images of Earth, Moon</a></h3>\n\t<div class=\"posted-by\">NASA</div>\n<p>I love seeing pictures of Earth from the reaches of space.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.bloomberg.com/news/audio/2025-08-29/bloomberg-masters-in-business-mark-zandi-podcast\">Masters in Business: Mark Zandi</a></h3>\n\t<div class=\"posted-by\">Masters in Business Podcast</div>\n<p>A fascinating interview with Mark Zandy, Chief Economist at Moody's Analytics.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://cobb.land/posts/whos-a-blog-for/\">Who's a blog for?</a></h3>\n\t<div class=\"posted-by\">Cobb</div>\n<p>A nice essay and some helpful thoughts on why we blog.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-31T18:09:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/28/insecurity-in-my-writing/",
      "url": "https://kpwags.com/posts/2025/08/28/insecurity-in-my-writing/",
      "title": "Insecurity in My Writing",
      "content_html": "\n\t\t<p>One of the things that has sometimes kept me from writing more on my blog has been my own insecurity. I'm not always convinced I have anything worthwhile to say, or am concerned that I'm flat out wrong on something, or will just sound stupid. I don't know how many people actually read what I write, but the introvert in me is concerned with sounding foolish.</p>\n<p>Writing was never my strong suit growing up. I was always much more interested in math, science, and computers. I relied a lot on my mom to help me with my language arts classes. It wasn't that I didn't understand the material or didn't have thoughts. I just often had trouble articulating my thoughts into words with proper grammar, punctuation and the like. I still struggle with it to some extent.</p>\n<p>It still gnaws at me when I sit down to write a post about any subject. Will my writing make me sound foolish or make me seem like I don't know what I'm talking about. And this doesn't even begin to address my worry that something I write will just be flat out wrong, especially when I delve into various development topics.</p>\n<p>I believe I am a competent developer. I have plenty of growing room as does everyone. I've never been the smartest dev in the room, and I'm not sure I'd ever want to be. I'm hungry to learn more and try new things. But I also know I don't know everything, and in some cases I should probably know more than I do. So when I go to write about something I've learned or have figured out, I'm constantly second guessing myself as to whether I understand it correctly or am articulating it properly. Part of it is that I don't want to mislead anyone or send them down the wrong path. But the bigger part is that I don't want to come off as <em>dumb</em> (though it's certainly possible that I might be from time to time).</p>\n<p>All of this is constantly circling around in my head every time I'm beginning to write a post, or as I'm about to click the publish button.</p>\n<p>I know I should ignore my inner critic and keep at it and keep writing. Improving is a journey, not a destination. I'm not going to get there overnight and it will be a lifelong endeavor. I can always go back and make edits to fix my mistakes, or even write follow-up posts correcting myself. It's all well and good to think that, but it can still be quite the challenge to actually go ahead and <em>do</em> it.</p>\n<p>Over the last month, I've been forcing myself to write more. I've been scheduling blog posts every Tuesday and Thursday. These posts are meant to be a little more in-depth than just simple updates. I'm not looking for 2,000+ word manifestos, just something to get my creative juices flowing and share a thought.</p>\n<p>It's been going along with my intentional practice. Almost every day, I've been trying to &quot;force&quot; myself to play guitar for 15 minutes and to write for 30 minutes. I don't always succeed, I'm writing this on a day I opted to skip guitar for writing and some video games. I'm not going to treat it religiously, but by putting it on my daily to-do list, I've been doing a better job at making sure I'm putting in the time for both. I want to get better at guitar, and I want to get better at writing. Can't do either without putting in the work.</p>\n<p>Hopefully by putting in the work, I can start to feel better about the posts I write and the way the words look and sound on my site.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-28T22:55:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/26/handling-too-many-news-subscriptions/",
      "url": "https://kpwags.com/posts/2025/08/26/handling-too-many-news-subscriptions/",
      "title": "Handling Too Many News Subscriptions",
      "content_html": "\n\t\t<p>In today's chaotic world, good journalism is more important than ever. Lately, we've been seeing too many of the biggest news outlets who could be relied upon to report on the news, resort to letting up to maintain access, or readership, or both. For those that continue to report despite an increasingly fascist and authoritarian administration in Washington, it's becoming even more important. I want to support them, but damn, it gets expensive fast.</p>\n<p>There's often the thought when it comes to journalism nowadays that the good sources cost money while the bad sources are free. There are of course exceptions to this, but think of sites like <a href=\"https://www.economist.com/\">The Economist</a> or the <a href=\"https://www.inquirer.com/\">Philadelphia Inquirer</a>. They're both solid journalistic enterprises, but both are behind a paywall unless you buy a subscription. Sites like Fox News, Newsmax, and much of the other right-wing propoganda sites are free for all visitors, no subscription required for most features. For many, why pay for your local paper when you can just read Fox for free.</p>\n<p>And I do want to be clear, journalists should get paid for their work. Their work is important and vital for an informed, democratic society. As one of my favorite journalists has put it, truth matters. At the same time, I, and most others have a limited budget and can't be constantly shelling out cash to every site, even if I believe in their mission and that they do good work.</p>\n<p>Looking at my current subscriptions, I subscribe to:</p>\n<ul>\n<li><a href=\"https://www.npr.org/\">NPR</a> (monthly donation)</li>\n<li><a href=\"https://www.americanpublicmedia.org/\">American Public Media</a> (monthly donation)</li>\n<li><a href=\"https://www.inquirer.com/\">The Philadelphia Inquirer</a></li>\n<li><a href=\"https://www.economist.com/\">The Economist</a></li>\n<li><a href=\"https://www.404media.co/\">404 Media</a></li>\n<li><a href=\"https://defector.com/\">Defector</a></li>\n<li>Molly Wood's <a href=\"https://www.citationneeded.news/\">Citation Needed</a></li>\n<li><a href=\"https://www.fangraphs.com/\">FanGraphs</a></li>\n<li>Phil Plait's <a href=\"https://badastronomy.beehiiv.com/\">Bad Astronomy</a></li>\n</ul>\n<p>Listing them, well, that's a lot. And I'm not trying to say I'm mad that I have to pay or donate for them, I'm not. But when looking at the costs associated with them as a whole, the costs add up. And there's more that I've considered in the past. I want to support them, I want to read their articles, but I have a hard time budgeting the additional money. I already can't keep up with all the news.</p>\n<p>How do you handle all the different sites that require subscriptions?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-26T23:53:54Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/137/",
      "url": "https://kpwags.com/reading-log/137/",
      "title": "Reading Log - August 25, 2025 (#137)",
      "content_html": "\n\t\t<p>A fair amount this week. A deeper dive into the achor element, thoughts on PHP &amp; jQuery, Substack is definitely a Nazi bar now, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://idiallo.com/blog/what-we-lost-with-php-and-jquery\">What We Lost with PHP and jQuery</a> - <em>Ibrahim Diallo</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/sit-on-your-ass-web-dev/\">Sit On Your Ass Web Development</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://www.jonoalderson.com/conjecture/why-semantic-html-still-matters/\">Why semantic HTML still matters</a> - <em>Jono Alderson</em></li>\n<li><a href=\"https://acko.net/blog/html-is-dead-long-live-html/\">HTML is Dead, Long Live HTML</a> - <em>Steven Wittens</em></li>\n<li><a href=\"https://localghost.dev/blog/this-website-is-for-humans/\">This website is for humans</a> - <em>Sophie Koonin</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/href-value-possibilities/\">A Few Things About the Anchor Element’s href You Might Not Have Known</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://evilmartians.com/chronicles/what-we-learned-from-creating-postcss\">What we learned from creating PostCSS</a> - <em>Irina Nazarova</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://alexkondov.com/i-know-when-youre-vibe-coding/\">I Know When You're Vibe Coding</a> - <em>Alex Kondov</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/08/05/take-back-our-digital-infrastructure-to-save-democracy/\">Take Back Our Digital Infrastructure To Save Democracy</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/08/04/substacks-algorithm-accidentally-reveals-what-we-already-knew-its-the-nazi-bar-now/\">Substack’s Algorithm Accidentally Reveals What We Already Knew: It’s The Nazi Bar Now</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/08/04/didnt-take-long-to-reveal-the-uks-online-safety-act-is-exactly-the-privacy-crushing-failure-everyone-warned-about/\">Didn’t Take Long To Reveal The UK’s Online Safety Act Is Exactly The Privacy-Crushing Failure Everyone Warned About</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://rknight.me/blog/perplexity-doesnt-give-a-shit-about-consent/\">Perplexity Doesn’t Give a Shit About Consent</a> - <em>Robb Knight</em></li>\n<li><a href=\"https://www.techdirt.com/2025/08/04/politicos-rushed-adoption-of-half-cooked-ai-continues-to-go-terribly/\">Politico’s Rushed Adoption Of Half-Cooked ‘AI’ Continues To Go Terribly</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/finance-and-economics/2025/08/04/buy-now-pay-later-is-taking-over-the-world-good\">Buy now, pay later is taking over the world. Good</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/real-estate/nyc-new-rochelle-lower-rent-e7695ded?st=pQZJXF&amp;reflink=desktopwebshare_permalink\">How an NYC Suburb Is Actually Managing to Bring Rents Down</a> - <em>Rebecca Picciotto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/episode/2025/08/24/special-coverage-from-marketplace-the-real-costs\">Kai Ryssdal: Special Coverage from &quot;Marketplace&quot;: The Real Costs</a></li>\n<li><a href=\"https://www.npr.org/2025/08/22/nx-s1-5511707/ozempic-zepbound-wegovy-monjauro-knockoff-generics\">Planet Money: Buy discount Ozempic here now click this link</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/08/05/another-horror-story-leaks-out-from-trumps-favorite-deportation-hellhole/\">Another Horror Story Leaks Out From Trump’s Favorite Deportation Hellhole</a> - <em>Tim Cushing</em></li>\n<li><a href=\"https://www.techdirt.com/2025/08/04/president-of-facts-dont-care-about-your-feelings-party-fires-statistician-for-reporting-facts-that-hurt-his-feelings/\">President Of ‘Facts Don’t Care About Your Feelings’ Party Fires Statistician For Reporting Facts That Hurt His Feelings</a> - <em>Tim Cushing</em></li>\n<li><a href=\"https://www.techdirt.com/2025/08/05/trump-fcc-abandons-efforts-to-make-u-s-broadband-fast-and-affordable/\">Trump FCC Abandons Efforts To Make U.S. Broadband Fast And Affordable</a> - <em>Karl Bode</em></li>\n<li><a href=\"https://www.nytimes.com/2025/08/04/opinion/columnists/friedman-trump-labor-firing.html?unlocked_article_code=1.b08.7Bol.piD_QJK536wf\">The America We Knew Is Rapidly Slipping Away</a> - <em>Thomas L. Friedman</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.insidehook.com/mental-health/analog-life-50-ways-unplug-feel-human-again\">The Analog Life: 50 Ways to Unplug and Feel Human Again</a> - <em>Tanner Garrity</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Good Charlotte - I Don't Work Here Anymore</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/X-pqsMVaNjk\" title=\"Good Charlotte - I Don't Work Here Anymore\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-25T20:54:55Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/what-we-lost-with-php-and-jquery/",
      "url": "https://kpwags.com/notes/what-we-lost-with-php-and-jquery/",
      "title": "What We Lost with PHP and jQuery",
      "content_html": "\n\t\t<blockquote>\n<p>There was a time when building a website felt straightforward. You'd write some HTML, add PHP for dynamic content, sprinkle in jQuery for interactions, upload it to your server, and you were done. No package managers, no build processes, no debates about hydration strategies.</p>\n</blockquote>\n<p>My first big personal project was built using both PHP and jQuery. I miss those days. It was easy, write some PHP and JavaScript, copy the files, and refresh the page.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-24T18:31:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/sit-on-your-ass-web-development/",
      "url": "https://kpwags.com/notes/sit-on-your-ass-web-development/",
      "title": "Sit On Your Ass Web Development",
      "content_html": "\n\t\t<blockquote>\n<p>In short: spend less time glueing together tools and frameworks <em>on top of</em> the browser, and more time bridging tools and APIs <em>inside of the browser</em>. Then get out of your own way and go sit on your ass. You might find yourself more productive than ever!</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-24T18:30:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/this-website-is-for-humans/",
      "url": "https://kpwags.com/notes/this-website-is-for-humans/",
      "title": "This Website is for Humans",
      "content_html": "\n\t\t<blockquote>\n<p>Well, I want you to visit my website. I want you to read an article from a search result, and then discover the other things I’ve written, the other people I link to, and explore the weird themes I’ve got. I want some of you to read my article then ask me to speak at your conferences. Many folks rely on ad impressions to support the high-quality content they’re putting out for free.</p>\n<p>I write the content on this website for people, not robots. I’m sharing my opinions and experiences so that you might identify with them and learn from them. I’m writing about things I care about because I like sharing and I like teaching. I spend hours writing these posts and AI spends seconds summarising them.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-24T18:30:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/64/",
      "url": "https://kpwags.com/week-note/64/",
      "title": "Week Notes for August 17 - 23 (#64)",
      "content_html": "\n\t\t<p>My week notes for the week of August 17 through August 23.</p>\n<h2>Notes</h2>\n<h3>Spring-Summer Hockey Seasons Over</h3>\n<p>Monday marked the end of the other hockey league I play in's season. Now, I get a few weeks off before the fall/winter seasons begin.</p>\n<h3>Continuing Strength Training</h3>\n<p>I've been doing a good job sticking with my strength training. It feels like most of the year I've been having starts and stops with it, often substituting walks and runs instead, but this time I've been doing a pretty good job of hitting the gym every other day.</p>\n<h3>Toying with Another Redesign</h3>\n<p>I've been considering adding more themes to my site for the heck of it, but the CSS for my site has become a little convoluted. I'm playing around with some ideas to simplify the styling, 11ty code and a few other items.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.jim-nielsen.com/2025/href-value-possibilities/\">A Few Things About the Anchor Element’s href You Might Not Have Known</a></h3>\n\t<div class=\"posted-by\">Jim Nielsen</div>\n<p>It still kind of amazes me how much one can do in the browser with only HTML and never writing a single line of JavaScript.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.jonoalderson.com/conjecture/why-semantic-html-still-matters/\">Why Semantic HTML Still Matters</a></h3>\n\t<div class=\"posted-by\">Jono Alderson</div>\n<p>There's a reason why there are more HTML elements than just <code>&lt;div&gt;</code> &amp; <code>&lt;span&gt;</code>. Using the right ones helps with accessibility and letting the browser know what parts of websites are meant for.</p>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://alexkondov.com/i-know-when-youre-vibe-coding/\">I Know When You're Vibe Coding</a></h3>\n\t<div class=\"posted-by\">Alex Kondov</div>\n<p>Code quality matters a lot more than you realize.</p>\n</div>\n</div>\n\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-24T18:26:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/why-semantic-html-still-matters/",
      "url": "https://kpwags.com/notes/why-semantic-html-still-matters/",
      "title": "Why Semantic HTML Still Matters",
      "content_html": "\n\t\t<blockquote>\n<p>HTML isn’t just how we place elements on a page. It’s a <em>language</em> – with a vocabulary that expresses meaning</p>\n<p>Tags like <code>&lt;article&gt;</code>, <code>&lt;nav&gt;</code> and <code>&lt;section&gt;</code> aren't <em>decorative</em>. They express <em>intent</em>. They signal <em>hierarchy</em>. They tell machines what your content <em>is</em>, and how it <em>relates</em> to everything else.</p>\n</blockquote>\n<p>I know I could be better about this, and I try to use the right tags to help with accessibility.</p>\n<blockquote>\n<p>If everything is a <code>&lt;div&gt;</code> or a <code>&lt;span&gt;</code>, then nothing is <em>meaningful</em>.</p>\n</blockquote>\n<p>This is why I'm not always a fan of frameworks.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-22T23:01:59Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/22/cruel-hoax-doesnt-even-begin-to-describe-what-happened-at-villanova/",
      "url": "https://kpwags.com/posts/2025/08/22/cruel-hoax-doesnt-even-begin-to-describe-what-happened-at-villanova/",
      "title": "&#39;Cruel Hoax&#39; Doesn&#39;t Even Begin to Describe What Happened at Villanova",
      "content_html": "\n\t\t<p>As the title says, &quot;cruel hoax&quot; doesn't even begin to describe <a href=\"https://www.inquirer.com/crime/villanova-university-radnor-active-shooter-20250821.html\">what happened at Villanova</a>. For those who might not have seen the news, it appears someone swatted the Villanova University campus claiming a shooter was on the loose. Afterwards, all hell broke loose. Thankfully no one was injured or killed.</p>\n<p>My wife and I were transfixed on the local news station trying to figure out what was going on. Villanova isn't terribly far from us, and we both know people, including family who went there. It was just one of those situations where your heart just sunk. I can't even begin to comprehend what might have been going through the students' minds, or their parents' minds.</p>\n<p>Add to that that the freshman class had just started arriving the day before. Just an awful situation sowing fear and terror. The only silver lining was that it was just a hoax and no one was hurt.</p>\n<p>I hope they find the person who did that and they face justice. Just like swatting individuals, the situation could have turned south quickly. It just makes me so angry.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-22T23:01:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/21/could-i-not-be-the-worst-gm-in-sports/",
      "url": "https://kpwags.com/posts/2025/08/21/could-i-not-be-the-worst-gm-in-sports/",
      "title": "Could I Not Be the Worst GM in Sports",
      "content_html": "\n\t\t<p>I want to start by saying that while I very much enjoy sports, I know I'm by no means an expert in them, and definitely nowhere close to being an expert in managing and building teams. It doesn't matter whether it's baseball, (American) football, or hockey, I'd be trounced by just about every other general manager (GM) in the league. But I then read about the <a href=\"https://www.sportingnews.com/us/nfl/news/jerry-jeudy-madden-rating-woody-johnson-jets-trade-2024/957cdf84ae2f85e242127ee3\">NFL's New York Jets owner used Madden ratings to nix a trade</a> and think that <em>maybe</em> I wouldn't be the <em>worst</em> GM in the league. After all, in the NFL, 31 out of 32 isn't last.</p>\n<p>For those that aren't aware, Madden is a football video game released yearly by EA. It features among other things full rosters of the NFL teams. Each player has a rating based on how they play in real life. How fast they are, how good are they at throwing or catching the ball, etc. The higher the rating, the better the player tends to be in the game. There's a catch of course. Past performance does not equal future performance. In real life, players are constantly playing better than their rating would suggest, while others are playing worse than their rating suggests.</p>\n<p>A real NFL owner nixed a trade based off these in some cases arbitrary ratings. I guess technically the GM knew how to make a good deal but was overridden by his boss, but even I'm not so stupid to think that ratings in a video game carry over to how a world class athlete will perform in real life.</p>\n<p>Part of the reason for this post, is what's going on in Dallas. Micah Parsons is one of the best edge rushers in the NFL. He's a player you can build your defense around and is a sack machine. He's currently playing for the Dallas Cowboys and is looking for an extension as his rookie deal expires after this upcoming season.</p>\n<p>The owner of the Dallas Cowboys, Jerry Jones also acts as the team's GM. Re-signing Parsons should be an absolute no-brainer. Lock up your biggest asset on defense. Instead, Jones is dragging things out, trying to talk to Parsons without Parson's agent present, and has already made <a href=\"https://sports.yahoo.com/article/whats-next-micah-parsons-demands-125145776.html\">Parsons want a trade out of Dallas</a>. If this was the first time Jones had done something like this, one might be willing to forgive him or think that maybe the problem lies with Parsons.</p>\n<p>Not to give too much away, but it's not the first time Jones has done this. He did it twice in the last several years with wide receiver CeeDee Lamb and quarterback Dak Prescott. As much as it pains me to say this as a Philly fan...CeeDee Lamb is one of the better receivers in the league and Dak Prescott is a solid QB when healthy. Given what they eventually signed for, it didn't appear either was asking for anything extreme, just what they were worth.</p>\n<p>I see these boneheaded moves and sometimes wonder what these experts are thinking. Even good GMs will make some boneheaded signings, trades, and draft picks, but some GMs seem to excel at these boneheaded moves. I wonder how badly I'd do if given the chance and if just <em>maybe</em>, I might be able to do just a <em>wee bit</em> better than someone like Jones.</p>\n<p>At the end of the day though, GMs are somewhat limited by what the team's owner is willing to do and spend. Your team could have the best GM in the game, but if he or she is being undermined or limited by the owner (who does control the purse strings), then any skill doesn't matter.</p>\n<p>Either way, at the end of the day, I'll leave the managing of teams to the professionals.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-21T22:15:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/19/my-love-for-libraries/",
      "url": "https://kpwags.com/posts/2025/08/19/my-love-for-libraries/",
      "title": "My Love for Libraries",
      "content_html": "\n\t\t<p>Ever since I was a kid I remember loving the library. I only vaguely remember my mom taking me to the one by our old house, but I remember vividly the many visits to the library near the house we moved to before I started Kindergarten. I even volunteered there for a while sometime around when I started high school. While I didn't take advantage of the library for a while after college, my love for them never went away and has only grown as I've really delved into reading more.</p>\n<p>I remember going to the library in awe and amazement at all the books I could choose to read. I remember being so excited when I could finally get <em>my own</em> library card. No more mooching off my parents' cards. From someone who loves books, it was sheer joy.</p>\n<p>The joy extends to today as well, even in adulthood. Since my wife and I have settled into our house, I've taken advantage of my township and county's library system quite a bit. It's awesome, I can use <a href=\"https://libbyapp.com/\">Libby</a> to check out audio books on my phone, and eBooks for my Kindle. I can also use their online portal to request any physical book they have in their system anywhere in the county. If it's not at my township library, they'll ship it from wherever it's at to my local library for pickup. It's convenient and it unlocks access to more books than I ever would have thought possible as a kid.</p>\n<p>Beyond the joy, rewinding a bit back to my middle school and high school years, the library provided the resources for me to do school projects. Their encyclopedias (remember those?) and other reference materials were always available and the librarians were always helpful. In college, I was even able to save some money on some one-off textbooks by just using the library's copy. I could only use it in the library, but it saved me well over a hundred dollars (in early 2000s money) from having to buy the book for a single 10 week class.</p>\n<p>And I'm sure there's more that libraries can do or provide resources for. I know some libraries can help get people connected to the internet, job hunt, I've even heard of some libraries offering the ability to borrow hand tools like drills and whatnot. Their ability to inspire awe in book lovers is only one part of their magic.</p>\n<p>Nowadays, we are unfortunately dealing with threats to these fountains of knowledge. Over the last ten years, we're seeing politicians, primarily on the right attack libraries, institute book bans, and pull funding. I've been fortunate in that it's not affecting me directly (yet), but others aren't so lucky.</p>\n<p>Politicians and parental groups are getting all bent out of shape because kids have access to books they don't like. And instead of simply choosing what their own child reads, they're pushing to ban books and shutter libraries. It's the equivalent of a parent being mad their kid was picked last for soccer, then taking the ball home so that no kid can play soccer.</p>\n<p>Public libraries are a treasure. I'm going to continue to treasure them. In these uncertain times, I hope we can make sure they provide the same magic to the future generations as they did for me.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-19T11:38:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/automated-application-systems-add-insult-to-injury-in-a-tough-job-market/",
      "url": "https://kpwags.com/notes/automated-application-systems-add-insult-to-injury-in-a-tough-job-market/",
      "title": "Automated application systems add insult to injury in a tough job market",
      "content_html": "\n\t\t<blockquote>\n<p>Narayanan suggested if the systems are no better than random number generators, perhaps we should explicitly use random number generators: choose candidates by lottery after they fulfill some minimum requirements.</p>\n</blockquote>\n<p>I almost wonder if this would produce better results sometimes.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-19T11:36:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/136/",
      "url": "https://kpwags.com/reading-log/136/",
      "title": "Reading Log - August 18, 2025 (#136)",
      "content_html": "\n\t\t<p>This week it's a lot more Why Your Team Sucks, thoughts on lifelogging under a fascist authoritarian regime, danger for ESPN and more.</p>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/07/31/credit-card-companies-fielding-a-ton-of-complaints-over-nsfw-games-disappearing-on-platforms/\">Credit Card Companies Fielding A Ton Of Complaints Over NSFW Games Disappearing On Platforms</a> - <em>Timothy Geigner</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/07/31/unsatisfying-answers/\">You can't fight enshittification</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://werd.io/lifelogging-under-fascism/\">Lifelogging under fascism</a> - <em>Ben Werdmuller</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://blog.val.town/vibe-code\">Vibe code is legacy code</a> - <em>Steve Krouse</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-seattle-seahawks\">Why Your Team Sucks 2025: Seattle Seahawks</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://www.sfgate.com/sports/article/destruction-espn-ending-nfl-beginning-20817470.php\">The destruction of ESPN isn't ending with the NFL. It's beginning.</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-tampa-bay-buccaneers\">Why Your Team Sucks 2025: Tampa Bay Buccaneers</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-cincinnati-bengals\">Why Your Team Sucks 2025: Cincinnati Bengals</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-miami-dolphins\">Why Your Team Sucks 2025: Miami Dolphins</a> - <em>Mike Tanier</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-indianapolis-colts\">Why Your Team Sucks 2025: Indianapolis Colts</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-atlanta-falcons\">Why Your Team Sucks 2025: Atlanta Falcons</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-arizona-cardinals\">Why Your Team Sucks 2025: Arizona Cardinals</a> - <em>Sarah York</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-dallas-cowboys\">Why Your Team Sucks 2025: Dallas Cowboys</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/08/13/nx-s1-5500298/why-trumps-spending-bill-could-close-your-grocery-store\">The Indicator: Why Trump's spending bill could close your grocery store</a></li>\n<li><a href=\"https://about.flipboard.com/fediverse/jay-graber/\">Dot Social: How the Open Social Web Will Change Everything, with Bluesky’s Jay Graber</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.thenation.com/article/politics/the-rule-of-law-is-dead-in-the-us/\">The Rule of Law Is Dead in the US</a> - <em>Elie Mystal</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2025/08/the-economy-he-died-five-years-ago/\">The Economy? He died five years ago.</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Halestorm - Darkness Always Wins</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/pBnQw6t12u4\" title=\"Halestorm - Darkness Always Wins\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-18T11:34:35Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/63/",
      "url": "https://kpwags.com/week-note/63/",
      "title": "Week Notes for August 10 - 16 (#63)",
      "content_html": "\n\t\t<p>My week notes for the week of August 10 through August 16.</p>\n<h2>Notes</h2>\n<h3>New Lifting Routine</h3>\n<p>I started my new strength training routine on Sunday and I have to say, this is the most excited I've been about lifting since I was going for the 1,000 lbs. club a couple years ago. I don't really have any set goals this time around other than to get more consistent with my strength training workouts.</p>\n<h3>Halestorm &amp; Volbeat in Concert</h3>\n<p>Saturday I met up with my best friend in Hershey, Pennsylvania to see Halestorm and Volbeat in concert. Prior to the show I stopped by Midstate Distillery and YAH Brewing in downtown Hershey. It's a nice little town. It was good seeing him and the concert was good too.</p>\n<div class=\"dual-image\">\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/aUaHQVlXUm-1447.webp 1447w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/aUaHQVlXUm-1447.gif 1447w\" /><img alt=\"Halestorm playing live in Hershey, PA\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/aUaHQVlXUm-1447.jpeg\" width=\"1447\" height=\"1929\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/aOzv2ZCpNu-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/aOzv2ZCpNu-1440.gif 1440w\" /><img alt=\"Volbeat playing live in Hershey, PA\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/aOzv2ZCpNu-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n</div>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.val.town/vibe-code\">Vibe code is legacy code</a></h3>\n\t<div class=\"posted-by\">Steve Krause</div>\n<p>Good luck maintaining your codebase.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.sfgate.com/sports/article/destruction-espn-ending-nfl-beginning-20817470.php\">The destruction of ESPN isn't ending with the NFL. It's beginning.</a></h3>\n\t<div class=\"posted-by\">Drew Magary</div>\n<p>Drew makes some good points about how this could have some very noticeable negative side effects with regards to ESPN's sports journalism and the NFL.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-17T19:34:37Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/14/ownership/",
      "url": "https://kpwags.com/posts/2025/08/14/ownership/",
      "title": "Ownership",
      "content_html": "\n\t\t<p>The switch to digital has provided us with many benefits. In the palm of my hand, I carry with me a device that can give me access to all the world's information. I can also use it for media. I can read books, listen to music, watch TV and movies on it. It's pretty fucking awesome. The addictive nature of things aside though, this migration to digital everything does have some drawbacks, especially when you think about actually <em><strong>owning</strong></em> things.</p>\n<p>Much like with software, so often now it seems like we’re now only licensing the ability to watch a movie, read a book, or listen to your favorite artist’s latest album. You’re at someone’s mercy, be it Amazon or Apple’s as to whether you can still access anything digital you’ve paid for.</p>\n<p><em>Note: I obviously consider streaming different as I’m paying a fee for access, rather than purchasing.</em></p>\n<p>I think the biggest one for me nowadays is probably books. While there is definitely something nice about a physical book where you can really hold the book in your hands, eBooks are convenient. When I went to Aruba 2 years ago, I read 10 books throughout the trip. Taking 10+ books in my luggage would have been a rather large hassle. A Kindle or other eBook reader is a godsend. On a device only a little larger than my iPhone, I can bring an extraordinarily large number of books and read on a screen that is not at hall hard on the eyes.</p>\n<p>And while I do give up certain abilities with digital books, such as easily flipping between pages or being able to lend them to friends, the convenience can be worth it. The one thing I give up that we often don’t think about is the certainty that Amazon doesn’t decide to steal the book back from me and remove my ability to read it. It might not be the most likely event, but it has <a href=\"https://www.nytimes.com/2009/07/18/technology/companies/18amazon.html\">happened before</a> (<a href=\"https://archive.is/V0XjL\">archive link</a>).</p>\n<p>Amazon sells the majority of their books with DRM.</p>\n<p>For those who don’t remember, most MP3s used to be sold with DRM as well limiting your ability to choose how to listen to the music you purchased. If you were unlucky, <a href=\"https://gizmodo.com/walmart-shutting-down-music-store-drm-servers-umpteent-5055854\">you could through no fault of your own, lose access to your music</a>. Eventually Apple, Amazon and others were able to convince the rights holders that DRM wasn’t worth it. Now I don’t believe any of the major digital music stores sell MP3s with DRM. This makes it so much easier for us consumers to listen to what we purchase in any way we want, using any software we want.</p>\n<p>Books and publishers have not gotten on this train en mass. Amazon apparently does allow authors to now sell books DRM-free, but that hasn’t always been the case. I would wager the overwhelming majority of the books on my Kindle have DRM which means not only that Amazon can strip them away from me, but that I can’t read them anywhere else.</p>\n<p><em>Note: To be fair to authors, I’m sure a lot of this comes from their publishers who can limit their ability to dictate otherwise.</em></p>\n<p>Amazon built their Kindle empire by trapping us consumers in their walled gardens. Any eBook bought on Amazon with DRM can only be read on a Kindle. Want to switch to a Kobo reader or Barnes and Noble’s Nook? Too bad. You’ll have to purchase the book again. Want to strip the DRM so you can transfer it to your new eBook reader? Congratulations, you’ve now committed a felony. Go directly to jail, do not pass go, do not collect $200. It’d be hilarious if it weren’t true.</p>\n<p>I’ve talked a lot about books in this post, mostly because it’s the one digital good that I interact with the most. But this same phenomenon can be seen in both TV and Movies as well. Those who <a href=\"https://www.theverge.com/2022/7/8/23199861/playstation-store-film-tv-show-removed-austria-germany-studiocanal\">bought movies and TV shows on the PlayStation Store saw their purchases disappear</a>. And they bought from Sony, a reputable commercial juggernaut. It wasn’t like they went to bobscheapmovies.com and rolled the dice.</p>\n<p>The digital world has brought us many conveniences and awesome ways to keep ourselves entertained, I just wish us consumers had more options.</p>\n<h2>Action Items I’m Taking</h2>\n<h3>1. My next eBook reader will not be a Kindle.</h3>\n<p>My current plan is to switch to <a href=\"https://www.kobo.com/\">Kobo</a> whenever my Kindle PaperWhite bites the dust. I’m not planning on changing without reason as it currently works well, and will re-visit what’s out there when the time comes, but I do want to leave the Amazon ecosystem.</p>\n<h3>2. Buying eBooks DRM-Free</h3>\n<p>If I’m going to buy an eBook, it will have to be one that does not contain DRM. I’m already going to lose a good chunk of my eBook collection, I don’t want to add to that. I’ll stick with the library or physical books for those I can’t find DRM-free.</p>\n<h3>3. Continue Buying Music</h3>\n<p>I still used Apple Music regularly, but I’ve been buying more and more music both digitally and on vinyl (yes, I love me some vinyl). Thankfully music has generally left the DRM station which means I’m free to listen to the music I purchase at I see fit.</p>\n<p>I’ve been taking advantage of <a href=\"https://daily.bandcamp.com/features/bandcamp-fridays\">Bandcamp Fridays</a> to get some good music and support the artists. I will also use Amazon and other digital stores for those that might not be on Bandcamp. Recommendations on reputable stores to buy digital music are appreciated.</p>\n<h3>4. Buy DVDs and Blu-Rays of my Favorite Shows/Movies</h3>\n<p>I don’t buy nearly as many DVDs and Blu-Rays as I have in the past. Part of that is that I don’t spend as much time watching TV as I have in the past. With the less time focused on the screen, it often feels almost wasteful to go out and buy physical media that will just collect dust. And while that is most certainly  true, I do want to make sure that Paramount, Disney, or whoever else can’t pull the rug out from underneath me and remove my access to the content. Hopefully it might also show the media conglomerates that certain shows are loved and appreciated. I’m still bummed <a href=\"https://www.imdb.com/title/tt9184820/\">Lower Decks</a> was cancelled after only 5 seasons.</p>\n<p>I also have been spending time ripping the DVDs and Blurays to my NAS so I can stream them to my TVs. Best of both worlds.</p>\n<h3>5. Take Advantage of Having the Library</h3>\n<p>Because...duh! Libraries are awesome. This is the one place where not “owning” what you’re consuming doesn’t matter. I would highly suggest taking a look at what your local library has to offer. You might find out they provide a lot more than just the ability to borrow books.</p>\n<hr />\n<p>Cory Doctorow &amp; Rebecca Giblin wrote <a href=\"https://bookshop.org/books/chokepoint-capitalism-how-big-tech-and-big-content-captured-creative-labor-markets-and-how-we-ll-win-them-back/9780807007068\">Chokepoint Capitalism</a> which provides some additional data.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-14T23:25:47Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/12/coding-assistants-and-not-feeling-left-behind/",
      "url": "https://kpwags.com/posts/2025/08/12/coding-assistants-and-not-feeling-left-behind/",
      "title": "Coding Assistants and Not Feeling Left Behind",
      "content_html": "\n\t\t<p>One of the things I've yet to really use for my day-to-day development are tools like GitHub Copilot. I've considered trying them from time to time, but the negatives I feel about them always outweigh any desire to try them. At the same time, there's still that nagging feeling I have that maybe I'm missing out or would get left behind if I ignore them.</p>\n<p>I've often dealt with imposter syndrome in one form or another. Thankfully it's never been something that's completely paralyzed me, but I've sometimes found myself wondering how good of a developer I actually am. It's especially hard sometimes because it's also something I enjoy doing, even in my off time when an idea for a side project or proof of concept comes up. I'm often proud of my work. It feels good to create something. <a href=\"https://seanvoisen.com/blog/programming-is-a-feeling-ai-is-changing-it/\">Sean Voisen</a> talked about it as well.</p>\n<blockquote>\n<p>For those of us who actually enjoy programming, there is a deep satisfaction that comes from solving problems through well-written code, a kind of ineffable joy found in the elegant expression of a system through our favorite syntax. It is akin to the same satisfaction a craftsperson might find at the end of the day after toiling away on well-made piece of furniture, the culmination of small dopamine hits that come from sweating the details on something and getting them just right. Maybe nobody will notice those details, but it doesn't matter. <em>We</em> care, <em>we</em> notice, <em>we</em> get joy from the aesthetics of the craft.</p>\n</blockquote>\n<p>Asking various tools to build me a site through with vibe coding seems novel, might even be kind of cool, but it doesn't have the same feel. I feel like I wouldn't get the same satisfaction I get when I run code for the first time and it works (okay, so sometimes it might be the third or fourth attempt...so what?).</p>\n<p>I also read about <a href=\"https://www.techdirt.com/2025/06/03/how-i-built-a-task-management-tool-for-almost-nothing/\">others who have used these tools with some success</a>. I look at that and I'm not going to say that I'm not impressed. It <em>is</em> cool that someone with limited to no programming knowledge can build a tool that does what they need and/or want it to do. I'm not necessarily against that and I don't want to be the curmudgeon who is constantly yucking someone else's yum.</p>\n<p>But to tie it back to those of us who do this for a living, I don't know how to feel. On one hand, I'm only beginning to imagine how this might impact the job market. In today's society, so much is focused on productivity and getting stuff out the door. So many companies and managers want to see high work ticket throughput and new features released. Will developers who have learned to really use the these vibe coding tools be able to get stuff out the door faster than devs not using these tools? It's something I can't help but be concerned about given the current job market (which can certainly change with time), and the fact that I still have 20+ years before I can think about retirement.</p>\n<p>Now there also is a flip side. Work in the field long enough and you'll no doubt be assigned a rather pernicious bug. Some bugs are easy to fix. Maybe someone just missed or reversed an 'if' statement somewhere. Others can be much more tricky to diagnose.</p>\n<p>Debugging computer code is a skill in and of itself. It's not always easy to figure out why a piece of code might not be working as intended. For someone building out a little tool, maybe it doesn't matter as much. But for those who are looking to get a job as a developer, it matters a great deal. I wish I was able to spend all my time at work building new features, new sites and new applications, but part of the job of every developer is to also track down bugs and fix them. I've never met a developer who releases perfect code without the occasional bug. Because of this, debugging and figuring out why something isn't working might is absolutely essential to the development life cycle.</p>\n<p>Will the more methodical developers get pushed out of jobs in favor of the &quot;faster&quot; devs? Smart managers and good companies will recognize speed isn't all it's cracked up to be. They're wise enough to know that there's a lot to be said for being slower and more methodical to get good software out the door. But for companies who want to move fast and break things, code that might not be of the highest quality could end up getting released with the hidden bombs missed until it's too late.</p>\n<p>I try not to be someone who discounts new technology or new applications. If something new comes out that can make my life better or my job easier, I'm often all for it. With tools like AI and LLMs though, I sometimes wonder if the issues I have with them, valid or not, might not matter in today's society.</p>\n<blockquote>\n<p>Capitalism doesn't care whether you live or die.</p>\n</blockquote>\n<p>I'm not trying to become too political with this, but the above statement, however blunt, isn't far from truth. We're all just trying to get by in the world and the push for &quot;maximizing shareholder value&quot; is strong and the results aren't always fair.</p>\n<p>There's also the energy question. These AI tools and LLMs slurp up a lot of power. The energy draw of these LLMs are even bringing <a href=\"https://www.npr.org/2024/09/20/nx-s1-5120581/three-mile-island-nuclear-power-plant-microsoft-ai\">decommissioned nuclear plants back online</a>. Don't get me wrong, with climate change, I'm all for producing more energy from nuclear and green energy, rather than fossil fuel plants, but I feel like there could be far better uses for the energy generated.</p>\n<p>I believe the strengths of good developers can outperform what the tools can produce. Even still though, I have concerns that companies and others won't necessarily see it the same way. They'll see the “faster” output and mistake that for <em>good</em> output. I'm not planning on jumping on board the AI hype train, but I can't help but feel concerned and worried about being left behind.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-12T22:46:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/135/",
      "url": "https://kpwags.com/reading-log/135/",
      "title": "Reading Log - August 11, 2025 (#135)",
      "content_html": "\n\t\t<p>We say goodbye Jim Lovell, more Why Your Team Sucks, some thoughts on 11ty, AI and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://justinfagnani.com/2025/06/30/what-should-a-dom-templating-api-look-like/\">What should a native DOM templating API look like?</a> - <em>Justin Fagnani</em></li>\n<li><a href=\"https://www.zachleat.com/web/adventures-in-date-parsing/\">Never Write Your Own Date Parsing Library</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://etch.co/blog/we-migrated-our-site-to-eleventy-and-increased-performance-by-24-percent\">We migrated our site to Eleventy and increased performance by 24%</a> - <em>Dan Webb</em></li>\n<li><a href=\"https://colton.dev/blog/tailwind-is-the-worst-of-all-worlds/\">Tailwind is the Worst of All Worlds</a> - <em>Colton Voege</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2025/08/got-99-engineering-problems-but-a-grift-aint-one/\">All the concerns that make you a boring developer</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://blog.pragmaticengineer.com/cursor-makes-developers-less-effective/\">Cursor makes developers less effective?</a> - <em>Gergely Orosz</em></li>\n<li><a href=\"https://chriscoyier.net/2025/07/23/impact-of-ai-on-tech-content-creators/\">Impact of AI on Tech Content Creators</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://tante.cc/2025/07/30/friction-and-not-being-touched/\">Friction and not being touched</a> - <em>Jürgen Geuter</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.noemamag.com/the-unseen-fury-of-solar-storms\">The Unseen Fury Of Solar Storms</a> - <em>Henry Wismayer</em></li>\n<li><a href=\"https://arstechnica.com/space/2025/08/astronaut-james-lovell-famed-apollo-13-commander-dies-at-97/\">James Lovell, the steady astronaut who brought Apollo 13 home safely, has died</a> - <em>Robert Pearlman</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-san-francisco-49ers\">Why Your Team Sucks 2025: San Francisco 49ers</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-new-york-jets\">Why Your Team Sucks 2025: New York Jets</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-carolina-panthers\">Why Your Team Sucks 2025: Carolina Panthers</a> - <em>Tom Ley</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-new-orleans-saints\">Why Your Team Sucks 2025: New Orleans Saints</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-chicago-bears\">Why Your Team Sucks 2025: Chicago Bears</a> - <em>Mike Tanier</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/08/05/1256758542/bls-firing-economic-data-integrity-update\">The Indicator: Can we still trust the monthly jobs report? (Update)</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://timharford.com/2025/07/the-many-tragedies-of-ending-us-aid/\">The many tragedies of ending US aid</a> - <em>Tim Harford</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Look Alive</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/gPyOJ4TmuYE\" title=\"Dave Hause - Look Alive\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-11T16:13:55Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/62/",
      "url": "https://kpwags.com/week-note/62/",
      "title": "Week Notes for August 3 - 9 (#62)",
      "content_html": "\n\t\t<p>My week notes for the week of August 3 through August 9.</p>\n<h2>Notes</h2>\n<h3>Plenty of Time in Net</h3>\n<p>I ended up playing in net 3 days this week. Monday was my usual weekly game and I played like crud. We ended up losing 6-3. I got asked by a teammate to fill in for his C2 game the next night. I play in C4 and I-League. Both are 2+ skill levels lower than I’m used to playing in. It was noticeably faster than I’m used to, but I held my own and we won 6-4, although I’m going to chalk most of that up to the team in front of me. Still though, I kept them in it which is my goal.</p>\n<p>The week of hockey was finished up with 2 straight hours of open hockey. My legs were killing me by the end of the session. It didn’t help that I did deadlifts the day before.</p>\n<h3>Changing Up My Lifting Program</h3>\n<p>I’ve been reading (listening to) <a href=\"https://bookshop.org/p/books/the-heavy-lift-how-learning-to-lift-weights-helped-me-build-every-kind-of-strength-casey-johnston/21552643\">A Physical Education: How I Escaped Diet Culture and Gained the Power of Lifting</a> by Casey Johnston and it’s inspired me to delve back into lifting more. I’ve often skipped out on strength training lately because it’s legs day and I don’t like legs days. I would opt for a run instead. Now I think I’m going to try to keep myself in an every other day rhythm and make sure I get my lifts in.</p>\n<h3>Keeping Screen Time Low</h3>\n<p>I’ve been trying to stay off my phone more for close to 3 weeks now and I feel like I’m generally doing a good job limiting my screen time and endless scrolling. I’m generally hovering around 1.25 hours a day on my phone. I wish I could have a better comparison to where I was prior to my change, but Apple does some weird calculations for screen time where they include time the always-on screen is on, even if all it is doing is displaying the clock.</p>\n<p>Regardless of where I was, I generally feel more focused and in the moment now that I’m generally keeping my phone away from me to help limit the temptation.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://etch.co/blog/we-migrated-our-site-to-eleventy-and-increased-performance-by-24-percent\">We migrated our site to Eleventy and increased performance by 24%</a></h3>\n\t<div class=\"posted-by\">Dan Webb</div>\n<p>I’m amazed at how much faster my site now feels using 11ty having switched from Next.js as well. Nice little write-up here of an even bigger site moving over.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.pragmaticengineer.com/cursor-makes-developers-less-effective/\">Cursor makes developers less effective?</a></h3>\n\t<div class=\"posted-by\">Gergely Orosz</div>\n<p>Interesting results from a study developers and AI tools.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-10T19:01:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/07/scheduling-some-blog-posts/",
      "url": "https://kpwags.com/posts/2025/08/07/scheduling-some-blog-posts/",
      "title": "Scheduling Some Blog Posts",
      "content_html": "\n\t\t<p>One of my goals for 2025 was to write 100 blog posts. I'm currently at 50, so halfway there, but we're now almost 60% of the way through the year, so I'm a little behind. I think I'm going to try to schedule some posts from my backlog of half-written posts and ideas.</p>\n<p>I've started several posts over the course of the year that I've either put off or abandoned for various reasons. Sometimes it's me not sure if the post or my idea is good enough to be worth continuing. Other times I just have forgotten about it or shifted focus.</p>\n<p>I've been making a concerted effort over the last month to write more, dedicating 30 minutes or more to it more nights than not. But my writing focus has also been directed towards finishing my novel, which is a whole thing in and of itself. I haven't spent as much time looking at blog posts or shorter form essays and the like.</p>\n<p>I'm going to try to add some scheduled to dos to get some posts out, hopefully on Tuesdays and Thursdays. I'm hoping that by specifying the post and the date, it will give me the oomph to do it. And if I need more time for the given topic, maybe it'll also give me the motivation to come up with something else to share.</p>\n<p>Here's to hoping I can go through my backlog to get some more posts out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-07T13:40:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/05/july-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/08/05/july-2025-check-in/",
      "title": "July 2025 Check-In",
      "content_html": "\n\t\t<p>Other than the intense heat, July wasn't a bad month.</p>\n<h3>Hockey Tournament</h3>\n<p>In mid-July, the hockey rink I play at puts on a weekend tournament. Every team is guaranteed 4 games, with the possibility of a 5th if you're one of the top 2 teams in your division (by skill-level). 1 game Friday, 2 Saturday, and 1-2 Sunday. It's my third time playing in the tournament and ended up having a lot of fun. We didn't get to the championship, but had a good time playing. By the end, my legs were gassed and it was only made worse by a game Monday and another Tuesday for the leagues I play in. All in all, it was a lot of fun, but I was happy to be off my legs afterwards.</p>\n<h3>Refocusing on Fitness &amp; Screen Time</h3>\n<p>I've realized over the last few months, my diet and my screen time have been on the wrong trajectory than I would like. For the last 2+ weeks I've been trying to do a better job at focusing on snacking less and paying better attention to what I eat. I've had some mixed success here, but I'm feeling a bit better.</p>\n<p>I've also made a concerted effort to get back into strength training and making sure I'm getting some cardio in through runs. The heat has been making the running a little harder, but I've made some progress making sure I'm lifting again. My disdain for legs day has sometimes made me make excuses before, so I'm trying to ignore that voice in my head.</p>\n<p>As for screen time, I have drastically cut my use of the phone down. I wish I could say how much screen time I was using prior to my changes (The newer iPhones with their always on screen inflates screen time even if your phone is just sitting there doing nothing), but I'm hovering around 1 hour now, which is definitively drastically lower than before. I don't really have a set goal per say, I just have been trying to not always reach for it as often as I used to.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>10</span> runs - <span>31.54</span> miles</li>\n<li><strong>Walking:</strong> <span>28</span> walks - <span>18.82</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>6</span> sessions - <span>87,230</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/bad-company-private-equity-and-the-death-of-the-american-dream-megan-greenwell/22086306\">Bad Company: Private Equity and the Death of the American Dream</a> by Megan Greenwell</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/rise-of-the-warrior-cop-the-militarization-of-america-s-police-forces-radley-balko/11487752\">Rise of the Warrior Cop: The Militarization of America's Police Forces</a> by Radley Balko</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/chokepoints-american-power-in-the-age-of-economic-warfare-edward-fishman/21504653\">Chokepoints: American Power in the Age of Economic Warfare</a> by Edward Fishman</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/down-with-the-system-a-memoir-of-sorts-serj-tankian/20696252\">Down with the System: A Memoir (of Sorts)</a> by Serj Tankian</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/mistborn-the-final-empire-brandon-sanderson/15553866\">Mistborn</a> by Brandon Sanderson</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-well-of-ascension-book-two-of-mistborn-brandon-sanderson/15509153?ean=9781250318572\">The Well of Ascension</a> by Brandon Sanderson</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/130/\">July 7 (#130)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/131/\">July 14 (#131)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/132/\">July 21 (#132)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/133/\">July 28 (#133)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/57/\">June 29 - July 5 (#57)</a></li>\n<li><a href=\"https://kpwags.com/week-note/58/\">July 6 - 12 (#58)</a></li>\n<li><a href=\"https://kpwags.com/week-note/59/\">July 13 - 19 (#59)</a></li>\n<li><a href=\"https://kpwags.com/week-note/60/\">July 20 - 26 (#60)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/07/03/using-the-html-template-tag/\">using the HTML template tag</a>.</li>\n<li>Wrote about my thoughts of <a href=\"https://kpwags.com/posts/LINK/\">5 years with a home gym</a>.</li>\n<li>Shared <a href=\"https://kpwags.com/posts/LINK/\">a helpful asnyc Node.js Sqlite helper class</a> I wrote.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/LINK/\">having a dog</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/LINK/\">my health and wellness changes</a>.</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.expedition33.com/\">Clair Obscur: Expedition 33</a></li>\n<li>Continued <a href=\"https://www.ea.com/games/starwars/battlefront/star-wars-battlefront-2\">Star Wars: Battlefront II Multiplayer</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0458290/\">Star Wars: The Clone Wars</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Started Season 3 of <a href=\"https://www.imdb.com/title/tt12327578/\">Star Trek: Strange New Worlds</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-05T19:40:30Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/134/",
      "url": "https://kpwags.com/reading-log/134/",
      "title": "Reading Log - August 4, 2025 (#134)",
      "content_html": "\n\t\t<p>What would happen if an asteroid is indeed hurtling towards Earth, a fantastic TED talk by Scott Hanselman, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2025/07/css-intelligence-speculating-future-smarter-language/\">CSS Intelligence: Speculating On The Future Of A Smarter Language</a> - <em>Gabriel Shoyombo</em></li>\n<li><a href=\"https://css-tricks.com/setting-line-length-in-css-and-fitting-text-to-a-container/\">Setting Line Length in CSS (and Fitting Text to a Container)</a> - <em>Daniel Schwarz</em></li>\n<li><a href=\"https://gomakethings.com/bulletproof-web-component-loading/\">Bulletproof web component loading</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://www.freecodecamp.org/news/the-javascript-error-handling-handbook/\">The JavaScript Error Handling Handbook</a> - <em>Tapas Adhikary</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://architecturalbytes.substack.com/p/why-ownership-is-the-key-to-successful\">Why ownership is the key to successful APIs</a> - <em>Daniel Kocot</em></li>\n<li><a href=\"https://www.everydayunittesting.com/2025/07/code-coverage-and-other-metrics.html\">Code Coverage And Other Metrics</a> - <em>Gil Zilberfeld</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.citationneeded.news/curate-with-rss/\">Curate your own newspaper with RSS</a> - <em>Molly White</em></li>\n<li><a href=\"https://www.wheresyoured.at/never-forgive-them/\">Never Forgive Them</a> - <em>Ed Zitron</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://youtu.be/dVG8W-0p6vg?si=NHQ_r8T0bzMK80yN\">Tech Promised Everything. Did it deliver?</a> - <em>Scott Hanselman</em></li>\n<li><a href=\"https://www.404media.co/the-astronomer-ceos-coldplay-concert-fiasco-is-emblematic-of-our-social-media-surveillance-dystopia/\">The Astronomer CEO's Coldplay Concert Fiasco Is Emblematic of Our Social Media Surveillance Dystopia</a> - <em>Jason Koebler &amp; Matthew Gault</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://on.ft.com/4kQipM6\">What happens once we spot the asteroid that will hit Earth?</a> - <em>Tomas Weber</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-las-vegas-raiders\">Why Your Team Sucks: Las Vegas Raiders</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.economist.com/podcasts/2025/07/31/artificial-intelligentsia-an-interview-with-the-boss-of-anthropic?giftId=c8678d96-4509-4f8e-8d66-d1748982e1a7&amp;utm_campaign=gifted_article\">The Economist: Money Talks Podcast: Artificial intelligentsia: an interview with the boss of Anthropic</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Muse - Resistance</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/TPE9uSFFxrI\" title=\"Muse - Resistance\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-04T23:16:21Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/61/",
      "url": "https://kpwags.com/week-note/61/",
      "title": "Week Notes for July 27 - August 2  (#61)",
      "content_html": "\n\t\t<p>My week notes for the week of July 27 through August 2.</p>\n<h2>Notes</h2>\n<h3>Bombers Season Over</h3>\n<p>The hockey team I captain, the <em>Bombers</em> had their final game of the season this past week. While the season was less that ideal as we finished 4-11-1, we did finish it up with a nice win. Still have a few games left with my other team, and then a bit of a rest before it starts up all over again.</p>\n<h3>Media Repository Improvements</h3>\n<p>I've been on a reading tear this year, already nearing my 2025 book goal. Managing this in my repository has been easy enough, but I wanted to make some of the management easier so I added a quick &quot;Finish Book&quot; button and modal that will allow me quickly mark what I'm currently reading finished. Maybe I'll do something similar for marking a book as started. Small changes, but it makes the little things easier.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.citationneeded.news/curate-with-rss/\">Curate your own newspaper with RSS</a></h3>\n\t<div class=\"posted-by\">Molly White</div>\n<p>RSS for the win.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://youtu.be/dVG8W-0p6vg?si=NHQ_r8T0bzMK80yN\">Tech Promised Everything. Did it deliver?</a></h3>\n\t<div class=\"posted-by\">Scott Hanselman</div>\n<p>This is a fantastic TED Talk by Scott Hanselman. It's about 20 minutes long and well worth a watch.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.wheresyoured.at/never-forgive-them/\">Never Forgive Them</a></h3>\n\t<div class=\"posted-by\">Ed Zitron</div>\n<p>A good read looking at the history of the web and how much the drive towards growth has ruined it.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-03T18:42:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-nuclear-club-might-soon-double/",
      "url": "https://kpwags.com/notes/the-nuclear-club-might-soon-double/",
      "title": "The Nuclear Club Might Soon Double",
      "content_html": "\n\t\t<blockquote>\n<p>We have some muscle memory for how to manage nuclear rivalries among a few great powers, Sullivan told me. But a strategic landscape of 15 or 20 nuclear powers could be risky in ways that we cannot anticipate. The odds of a nuclear exchange occurring would rise. The most potent current warheads are more than 80 times as destructive as the bomb that leveled Hiroshima’s urban core, and they now fly on missiles that can reach their targets in mere minutes. It would take only one of them to all but erase Tokyo, Seoul, Beijing, or New York City. The total damage that even a limited exchange of these more powerful weapons would cause is mercifully unknown to us, but it may be vain to hope for a limited exchange. The most elaborate and significant war game in the literature suggests that the cycle of nuclear vengeance would continue until the arsenals of all involved parties are spent. If a nuclear conflict does someday break out, death and destruction might very quickly unfold on a planetary scale.</p>\n</blockquote>\n<p>Having read <a href=\"https://kpwags.com/books/annie-jacobsen-nuclear-war/\">Nuclear War: A Scenario</a> last year, this is chilling and scary.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-01T13:33:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/react-still-feels-insane-and-no-one-is-talking-about-it/",
      "url": "https://kpwags.com/notes/react-still-feels-insane-and-no-one-is-talking-about-it/",
      "title": "React Still Feels Insane And No One Is Talking About It",
      "content_html": "\n\t\t<blockquote>\n<p>Let's start from the state. If you have a top-down tree of components, it's logical you'd want to pass the state top-down too. But in practice, with components very numerous and small, this is very messy, as you spend a lot of time and code just wiring the various pieces of data to get them where you need them.</p>\n<p>This was solved by &quot;sideloading&quot; state into components using React hooks. I haven't heard anyone complain about this, but are you guys serious? You're saying that any component can use any piece of app state? And even worse, any component can emit a state change, that can then update in any other component.</p>\n<p>How did this ever pass a code review? You are basically using a global variable, just with more elaborate state mutation rules. They're not even rules, but merely a ceremony, because nothing is really preventing you from mutating state from anywhere. People really think if you give something a smart name like a reducer it suddenly becomes Good Architecture™?</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-01T13:31:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/08/01/another-hockey-season-over/",
      "url": "https://kpwags.com/posts/2025/08/01/another-hockey-season-over/",
      "title": "Another Hockey Season Over",
      "content_html": "\n\t\t<p>Last night, the <em>Bombers</em>, the hockey team I captain played their final game of the season. It was an 8-3 win with solid play from everyone. Now I have a little over a month of limited hockey to rest and recharge.</p>\n<p>This past season wasn't one of our strongest as we ended up finishing 4-11-1 and missed the playoffs. While a bit disappointing, it was still a fun season and the games we lost were mostly close games.</p>\n<p>I have 3 weeks and 3 games left in the other league I play in and then I'll have no games until mid-September when the fall/winter <em>Bombers</em> season starts back up. There might be some practices mixed in there, but otherwise I'll be off the ice.</p>\n<p>While I'm going to miss playing, I do appreciate the breaks to allow my body to recharge. I don't play in a checking league so I'm not getting beat up like the pros, we all have work the next day, it's still a demanding physical sport (it's definitely a good cardio workout). Some breaks to rest can be appreciated, especially since this last season seemed somewhat condensed with several weeks containing multiple games. It'll also nice to not have late games regularly mucking up my sleep schedule.</p>\n<p>Time to hit the gym to get ready for next season.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-08-01T13:27:02Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/133/",
      "url": "https://kpwags.com/reading-log/133/",
      "title": "Reading Log - July 28, 2025 (#133)",
      "content_html": "\n\t\t<p>Why Your Team Sucks is back, a bit of history on Reading Rainbow and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://aaronstannard.com/microsoft-delete-nuget-packages/\">So Microsoft Deleted Some of Our Packages From NuGet.org Without Notice</a> - <em>Aaron Stannard</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://queue.acm.org/detail.cfm?id=3746171\">WebAssembly: Yes, but for What?</a> - <em>Andy Wingo</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://martinfowler.com/articles/expert-generalist.html\">Expert Generalists</a> - <em>Unmesh Joshi, Gitanjali Venkatraman &amp; Martin Fowler</em></li>\n<li><a href=\"https://webdesignerdepot.com/the-decline-of-stack-overflow-where-are-developers-headed-next/\">The Decline of Stack Overflow: Where Are Developers Headed Next?</a> - <em>Alex Harper</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://whitep4nth3r.com/blog/why-women-in-tech-isnt-enough/\">Why Women in Tech isn't enough</a> - <em>Salma Alam-Naylor</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://maho.dev/2025/07/fck-yeah-theres-still-a-human-in-the-loop/\">F*ck Yeah, There's Still a Human in the Loop</a> - <em>Maho Pacheco</em></li>\n<li><a href=\"https://www.economist.com/business/2025/07/14/ai-is-killing-the-web-can-anything-save-it?giftId=7c086761-05bf-4eba-aa32-4a238a611c31&amp;utm_campaign=gifted_article\">AI is killing the web. Can anything save it?</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2025/07/despite-chronic-letdowns-nasa-just-cant-quit-boeings-starliner/\">The ISS is nearing retirement, so why is NASA still gung-ho about Starliner?</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-jacksonville-jaguars\">Why Your Team Sucks 2025: Jacksonville Jaguars</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/wnba-players-want-to-share-in-the-leagues-hypergrowth\">WNBA Players Want To Share In The League’s “Hypergrowth”</a> - <em>Maitreyi Anantharaman</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-new-york-giants\">Why Your Team Sucks 2025: New York Giants</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-new-england-patriots\">Why Your Team Sucks 2025: New England Patriots</a> - <em>Samer Kalaf</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-tennessee-titans\">Why Your Team Sucks 2025: Tennessee Titans</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2025-cleveland-browns\">Why Your Team Sucks 2025: Cleveland Browns</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://text.npr.org/nx-s1-5477662\">You can't outrun a bad diet. Food — not lack of exercise — fuels obesity, study finds</a> - <em>Maria Godoy</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.techfreedom.org/episodes/385-ai-snake-oil\">Tech Policy Podcast: AI Snake Oil</a></li>\n<li><a href=\"https://podcast.techfreedom.org/episodes/413-ai-things-are-about-to-get-weird\">Tech Policy Podcast: AI: Things Are About to Get Weird</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.smithsonianmag.com/smithsonian-institution/to-combat-summer-reading-slumps-this-timeless-childrens-television-show-tried-to-bridge-the-literacy-gap-with-the-magic-of-stories-180986984/\">To Combat Summer Reading Slumps, This Timeless Children’s Television Show Tried to Bridge the Literacy Gap With the Magic of Stories</a> - <em>Kayla Randall</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.liberalcurrents.com/marc-andreessen-is-a-traitor/\">Marc Andreessen Is a Traitor</a> - <em>Adam Gurri</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.nasa.gov/image-article/nasas-x-59-quiet-supersonic-aircraft-begins-taxi-tests/\">NASA’s X-59 Quiet Supersonic Aircraft Begins Taxi Tests</a> - <em>Nicolas Cholula</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Caroline's Spine - Sullivan</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ipdPatM07Vo\" title=\"Caroline's Spine - Sullivan\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-28T22:25:19Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/60/",
      "url": "https://kpwags.com/week-note/60/",
      "title": "Week Notes for July 20 - 26 (#60)",
      "content_html": "\n\t\t<p>My week notes for the week of July 20 through July 26.</p>\n<h2>Notes</h2>\n<h3>Checking Out Some Local Breweries</h3>\n<p>On Saturday, my wife and I ended up venturing out to try some new local breweries. We started at <a href=\"https://www.levantebrewing.com/\">Levante</a> which we had been to before, but we also went to <a href=\"https://www.locustlanecraftbrewery.com/home1\">Locust Lane</a> and then <a href=\"https://www.lacabrabrewing.com/\">La Cabra</a>, neither of which we had ever been to. The beer was good as was the food.</p>\n<h3>Lower Screen Time</h3>\n<p>I <a href=\"https://kpwags.com/posts/2025/07/20/health-wellness-changes/\">wrote about wanting to limit my screen time</a> and so far, so good. After tweaking my screen time settings on my iPhone, my screen time this week was:</p>\n<ul>\n<li>Tuesday: 0:12</li>\n<li>Wednesday: 1:06</li>\n<li>Thursday: 1:06</li>\n<li>Friday: 1:09</li>\n<li>Saturday: 1:40</li>\n</ul>\n<h3>Better Diet</h3>\n<p>Along with the screen time, I want to try to get in the habit of better eating. With the exception of yesterday's brewery tour, I've been doing a better job of not snacking and keeping my food intake at a better place. I went on several runs and got some lifting sessions in as well (my legs still aren't happy with me for that).</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://defector.com/wnba-players-want-to-share-in-the-leagues-hypergrowth?giftLink=2f4ae0da62fe184e085a6801382f9274\">WNBA Players Want To Share In The League’s “Hypergrowth”</a></h3>\n\t<div class=\"posted-by\">Maitreyi Anantharaman</div>\n<p>Pay the women!</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-27T18:21:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/132/",
      "url": "https://kpwags.com/reading-log/132/",
      "title": "Reading Log - July 21, 2025 (#132)",
      "content_html": "\n\t\t<p>Some thoughts on React, new C# 14 functionality, thoughts on Firefox and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/exploring-dotnet-10-preview-features-3-csharp-14-extensions-members/\">C# 14 extension members; AKA extension everything</a> - <em>Andrew Lock</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://mbrizic.com/blog/react-is-insane/\">React Still Feels Insane And No One Is Talking About It</a> - <em>Mario Brizić</em></li>\n<li><a href=\"https://allthingssmitty.com/2025/07/14/modern-async-iteration-in-javascript-with-array-fromasync/\">Modern async iteration in JavaScript with Array.fromAsync()</a> - <em>Matt Smith</em></li>\n<li><a href=\"https://una.im/popover-hint/\">What is popover=hint?</a> - <em>Una Kravets</em></li>\n<li><a href=\"https://muan.co/posts/javascript\">JavaScript dos and donts</a> - <em>Mu-An Chiou</em></li>\n<li><a href=\"https://joeldare.com/why-im-writing-pure-html-and-css-in-2025\">Why I’m Writing Pure HTML &amp; CSS in 2025</a> - <em>Joel Dare</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.pietschsoft.com/post/2025/07/01/writing-testable-code-is-more-important-than-unit-tests\">Writing Testable Code is More Important Than Unit Tests</a> - <em>Chris Pietschmann</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/07/17/we-deserve-better-a-new-social-media-bill-of-rights/\">We Deserve Better: A New Social Media Bill of Rights</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theregister.com/2025/07/08/firefox_isnt_dead/\">Firefox is fine. The people running it are not</a> - <em>Liam Proven</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/the-open-source-software-saving-the-internet-from-ai-bot-scrapers/\">The Open-Source Software Saving the Internet From AI Bot Scrapers</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/private-equity-now-owns-more-than-40-minor-league-baseball-teams-and-the-number-keeps-growing\">Private Equity Now Owns More Than 40 Minor League Baseball Teams, And The Number Keeps Growing</a> - <em>Jen Ramos Eisen</em></li>\n<li><a href=\"https://www.espn.com/nba/story/_/id/45747447/joel-embiid-philadelphia-76ers-star-sees-you\">Joel Embiid sees you</a> - <em>Dotun Akintoye</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.economist.com/podcasts/2025/07/17/combat-capitalism-how-ukraine-built-a-war-economy\">The Economist: Money Talks Podcast: Combat capitalism: how Ukraine built a war economy</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/17486857-move-fast-and-mistake-things\">Ctrl-Alt-Speech: Move Fast and Mistake Things</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.publicnotice.co/p/trump-coup-attempt-2028-ice\">The Emerging Coup</a> - <em>David R. Lurie</em></li>\n<li><a href=\"https://www.techdirt.com/2025/07/17/fascism-for-first-time-founders/\">Fascism for First Time Founders</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/07/18/trump-threatens-murdoch-over-epstein-story-using-tactics-his-supporters-used-to-call-a-massive-attack-on-free-speech/\">Trump Threatens, Then Sues Murdoch Over Epstein Story Using Tactics His Supporters Used To Call A ‘Massive Attack on Free Speech’</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.theatlantic.com/magazine/archive/2025/08/nuclear-proliferation-arms-race/683251/?gift=TGgP34XZPBAppowZPOH7pxS6GPgtOIQ6ESYJZ5zNJtg&amp;utm_source=copy-link&amp;utm_medium=social&amp;utm_campaign=share\">The Nuclear Club Might Soon Double</a> - <em>Ross Andersen</em></li>\n<li><a href=\"https://defector.com/calvin-and-hobbess-gruesome-snowmen-were-a-world-all-their-own\">Calvin And Hobbes’s Gruesome Snowmen Were A World All Their Own</a> - <em>Barry Petchesky</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Volbeat - Dagen Før</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Vy1hkuafppQ\" title=\"Volbeat - Dagen Før\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-21T17:20:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/07/20/health-wellness-changes/",
      "url": "https://kpwags.com/posts/2025/07/20/health-wellness-changes/",
      "title": "Health &amp; Wellness Changes",
      "content_html": "\n\t\t<p>Over the last couple months, I've seen my weight and progress tick back up. I was making decent progress earlier in the year, but I seem to have hit a wall and backslid a bit. It's not the end of the world, but I think I want to experiment some over the next month or so to see if I can't turn things around for the better.</p>\n<h2>Screen Time</h2>\n<p>I've gone back to playing around on my phone more than I'd like. I think last week's screen time report was around 5 hours a day. That's far too much. I want to see about drastically cutting down on the time I'm mindlessly on my phone.</p>\n<p>A while back, I moved my phone out of the bedroom and went back to an old fashioned alarm clock to prevent me from putzing around with my phone right before bed or right as I wake up. It's been good. I think I might try to do something similar during the day.</p>\n<h2>More Lifting &amp; Running...Maybe Some Biking Too?</h2>\n<p>It unfortunately is the middle of summer, so outdoor activities aren't exactly always ideal. I don't particularly like the idea of even walking in 90 degree weather, pushing myself harder with runs or bike rides feels is just a bad idea. Regardless of how uncomfortable I would get being soaked with sweat, it's dangerous and ultimately unnecessary. What good is getting more active going to get me if I'm dealing with heat stroke or heat exhaustion.</p>\n<p>But for the days where the weather might be on the &quot;cooler&quot; side, I'm going to push myself to get outside and get some runs in, maybe in the morning before work (although I really like the lunchtime runs to break up the day and put me in a better mood for the afternoon). I might also dust off the bike and see about getting some bike rides in.</p>\n<p>With lifting, I've been trying to get back into the routine, but often failing for one reason or another. In some cases its because it's legs day and I'll do anything to get out of doing legs day, including going for runs in the mid-80s when I would still prefer to be inside. Other times I just don't feel like lifting and do something else instead. That's probably the habit I need to break the most.</p>\n<h2>Better Food Tracking &amp; Less Snacking</h2>\n<p>I've been tracking my food intake for a while now, but the one thing I've been lazy about too often is tracking some of the small snacks I might grab throughout the day. I'll often rationalize it by saying to myself it's just a small bit of cheese or what have you. Once in a while isn't the end of the world, but working from home every day has the one downside that food is always available and it becomes a little too easy to mindlessly grab a small snack here and there. Each one isn't a big deal, but as a whole, they add up. I need to work on my willpower and determination to fight the urges to mindlessly snack.</p>\n<p>To go along with the better tracking, I want to get better at hitting my macronutrient goals. I've been tracking my intake of calories, protein, carbohydrates, fat, fiber, &amp; potassium. I want to start to focus more on getting my diet in check to hit those targets. Life's too short to be so completely strict as to limit any and all culinary enjoyments, but I'm hoping to get better about my food intake in hopes that it will improve things.</p>\n<p>I know this is all a journey and I'm not looking to look like some model...that ship has <em><strong>long</strong></em> since passed, but any little health and mindfulness improvements would be good.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-20T19:03:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/59/",
      "url": "https://kpwags.com/week-note/59/",
      "title": "Week Notes for July 13 - 19 (#59)",
      "content_html": "\n\t\t<p>My week notes for the week of July 13 through July 19.</p>\n<h2>Notes</h2>\n<h3>Tournaments &amp; More Hockey</h3>\n<p>The tournament finished Sunday. We ended up finishing 2-2 and in 3rd place, which was unfortunately not enough to go to the championship game for our division. It was still a lot of fun.</p>\n<p>The 4 games in 3 days was followed by a game Monday and a game Tuesday. I unfortunately pulled my groin making a save Monday, tried to play Tuesday and made it worse. It mostly healed by the weekend, but Wednesday and Thursday were not much fun.</p>\n<h3>Writing More</h3>\n<p>I mentioned before that I'm dedicating 30 minutes a day to writing. Whether it's towards a blog post, my novel, or anything else, I've been doing a good job sitting down and doing just that. I turn on focus mode in Raycast, set the timer for 30-60 minutes, and write. I have a few blog post ideas started out as well as several thousand more words down on my novel.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/the-open-source-software-saving-the-internet-from-ai-bot-scrapers/\">The Open-Source Software Saving the Internet From AI Bot Scrapers</a></h3>\n\t<div class=\"posted-by\">Emanuel Maiberg</div>\n<p>I love this. It would be nice if it could work without JavaScript, but a small price to pay.</p>\n</div>\n<hr />\n<div class=\"shared-link\">\n\t<h3><a href=\"https://mbrizic.com/blog/react-is-insane/\">React Still Feels Insane And No One Is Talking About It</a></h3>\n\t<div class=\"posted-by\">Mario Brizić</div>\n<p>While I'm not necessarily against the use of React, there are probably better options for many new projects. Mario goes through some of the stranger decisions React has made.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-20T15:25:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/07/18/on-having-a-dog/",
      "url": "https://kpwags.com/posts/2025/07/18/on-having-a-dog/",
      "title": "On Having a Dog",
      "content_html": "\n\t\t<p>I recently stumbled upon a <a href=\"https://old.reddit.com/r/AskReddit/comments/1ltrzkl/be_honest_whats_the_real_downside_of_having_a_dog/\">thread on Reddit about dog ownership</a> and its downsides. I have some thoughts to share.</p>\n<p>Six months ago, my wife and I adopted Tess. She is a beautiful girl who is smart, adorable, and a giant ball of energy. But like all pets, there are considerations.</p>\n<h2>You Have to Plan Ahead</h2>\n<p>Having a pet means you have the responsibility for caring for them. It has meant that our ability to be spontaneous about day or weekend trips has for the moment been eliminated. It's not like we go on a lot of trips, but we no longer can even just decide to spend the day away from home. Tess has to be walked and fed. We have family living nearby so in an emergency we'd be okay, but we don't like having to ask them to help out. If we go for any extended period of time, we'd have to either have Tess boarded or have someone come over and dogsit.</p>\n<p>Otto was older and much lower energy than Tess. With him, we could just have whoever was watching him let him out into the backyard to do his business and then come back in. Tess is still a (large) puppy, and is much higher energy. She needs to go for walks and to burn off that puppy energy. It's something we have to take into consideration whenever we choose to go away in that she will require more attention than Otto did. It goes to show that every pet is different, and even the same pet can be wildly different depending on how old they are.</p>\n<h2>They Can Be Expensive</h2>\n<p>Dogs need to see the doctor just like us humans. Hopefully it's far more wellness visits rather than medical issues, but animals can get sick and/or hurt themselves. This requires going to the vet which can get expensive.</p>\n<p>But even ignoring vet visits, owning a pet isn't necessarily cheap. With dogs, that means buying a crate, toys, food, treats, poop bags, leashes, and countless other little things. Not all of them are expensive alone, but as a whole, they can add up, especially when your dog destroys 2 crate pads in a single day (I'm looking at you Tess).</p>\n<p>Tess is a power chewer, which means that we have to be careful what toys we get her as she will go right through them if we're not careful. Tess destroyed the first toy we gave her in less than 5 minutes. We now know that we have to get more durable toys. She'll still eventually destroy them, but it will just take longer, and we have to be more observant to make sure the toys are still safe for her to have. Different dogs treat toys differently, so depending on the dog, you might be able to save some money on toys with a bigger selection available.</p>\n<p>You can certainly shop around and find deals on this stuff, but it's something to consider.</p>\n<h2>Cleaning Up After Them</h2>\n<p>Dogs make messes. With toys around the house, Tess knows the bin we keep them in, and knows she can go pick them out of the bin to play with them. She hasn't mastered cleaning up after herself and putting the toys back when she's done. So we have to be cognizant of them walking around our own house as she'll get bored, leave them, and go get the next toy.</p>\n<p>Cleaning also means cleaning up their poop and puke. Thankfully puking isn't common, though it still happens from time to time. Pooping on the other hand happens regularly. With Tess, she poops on her walks, which means that we have to make sure we have poop bags on the leash and don't forget to replace them if we use the last one on the spool. It's not at all a pleasant experience and the smell can be, well, awful. But you have to do it. Our previous dog, Otto, didn't do well on walks, so we would just let him run around our fenced in yard when he had to do his business. Even though this negated us having to pick up after him immediately as it was in our yard, we still regularly had to go through the fenced in area and bag it up for both sanitary reasons, and so that I could mow the lawn (you really don't want the blades to fling that shit everywhere).</p>\n<h2>Hair. Hair. Everywhere.</h2>\n<p>Most dogs are covered in fur. Most dogs shed. For short haired dogs, it might not be as noticeable. Tess is not a short haired dog. She might not be super floofy, but she's got plenty of fur. Her hair gets everywhere. It could be a full time job just to keep the dog hair in check. We have to vacuum regularly, but even with that, we still see her hair everywhere.</p>\n<h2>Saying Goodbye</h2>\n<p>Losing a pet is devastating. They're part of the family and you love them to death. I've had to say goodbye to three pets in my life and not one of them was easy. I still love all three of them and miss them. I always will. Compared to humans, their lifespans are short, but their ability to cause us to love them is overpowering. You never want to go to the vet's office and find out that the minor symptoms you observed was significantly more serious than you knew. It's absolutely heartbreaking and there's no way around it. You need to know this going into it.</p>\n<h2>Downsides are Outweighed by the Upsides</h2>\n<p>Obviously there are some serious things that need to be considered before getting a dog, and not all of them are plusses. But even with all the negatives, I'm glad we adopted Otto 8 years ago, and that we adopted Tess earlier this year. The love they give, the companionship, and the joy they bring us can't be quantified, but it tilts the scales so much into pet ownership's favor.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-18T13:02:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/131/",
      "url": "https://kpwags.com/reading-log/131/",
      "title": "Reading Log - July 14, 2025 (#131)",
      "content_html": "\n\t\t<p>A little more than usual this week. Some tips for Entity Framework, more reasons to quit Spotify, an American scientific brain drain, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://medium.com/@siddhesh.yellaram07/using-entity-framework-smart-decisions-that-save-you-later-8dd61d02d34f\">Using Entity Framework: Smart Decisions That Save You Later</a> - <em>Siddhesh Y</em></li>\n<li><a href=\"https://www.jimmybogard.com/automapper-and-mediatr-commercial-editions-launch-today/\">AutoMapper and MediatR Commercial Editions Launch Today</a> - <em>Jimmy Bogard</em></li>\n<li><a href=\"https://www.milanjovanovic.tech/blog/testcontainers-best-practices-dotnet-integration-testing\">Testcontainers Best Practices for .NET Integration Testing</a> - <em>Milan Jovanović</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/80a53df4-a867-4202-916c-08e980f02505\">Adding test description for data-driven tests in xUnit</a> - <em>Steven Giesel</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.lorenstew.art/blog/reactive-state-manager-with-proxies\">Building a Lightweight Reactive State Manager with JavaScript Proxies</a> - <em>Loren Stewart</em></li>\n<li><a href=\"https://justinfagnani.com/2025/06/26/the-time-is-right-for-a-dom-templating-api/\">The time is right for a DOM templating API</a> - <em>Justin Fagnani</em></li>\n<li><a href=\"https://gomakethings.com/web-components-dont-need-a-constructor/\">Web components don't need a constructor() </a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://infrequently.org/2025/06/conferences-clarity-and-smokescreens/\">Conferences, Clarity, and Smokescreens</a> - <em>Alex Russell</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://evanhahn.com/how-i-build-software-quickly/\">How I build software quickly</a> - <em>Evan Hahn</em></li>\n<li><a href=\"https://ordep.dev/posts/writing-code-was-never-the-bottleneck\">Writing Code Was Never The Bottleneck</a> - <em>Pedro Tavares</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://buttondown.com/blog/email-tracking-pixels-bugs\">How email tracking works behind the scenes</a> - <em>Justin Duke</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.hearingthings.co/why-we-quit-spotify/\">Why We Quit Spotify</a> - <em>Ryan Dombal</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/06/30/accounting-gimmicks/#artificial-income\">How much (little) are the AI companies making?</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://bigthink.com/starts-with-a-bang/american-science-brain-drain/\">American science to soon face its largest brain drain in history</a> - <em>Ethan Siegel</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/a-colossal-explosion-sent-antimatter-heading-toward-us-at-nearly-the-speed-of-light-d53578a31202831?utm_source=badastronomy.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=a-colossal-explosion-sent-antimatter-heading-toward-us-at-nearly-the-speed-of-light\">A colossal explosion sent antimatter heading toward us at nearly the speed of light</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/finance-and-economics/2025/07/03/vanguard-will-soon-crush-fees-for-even-more-investors\">Vanguard will soon crush fees for even more investors</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.wsj.com/business/energy-oil/trump-nuclear-power-expansion-challenges-bfe386e2\">Trump Wants to Expand Nuclear Power. It Won’t Be Easy.</a> - <em>Josh Ulick &amp; Jennifer Hiller</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.theguardian.com/sport/2025/jul/02/athletics-las-vegas-stadium-john-fisher-mlb-debacle\">Debacle in the desert: will the Athletics’ $1.75bn stadium on the Vegas Strip ever be built?</a> - <em>David Lengel</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/07/09/1255376165/tallying-the-cost-of-hurricane-francine-evacuation-fema-response\">The Indicator: Can you afford to evacuate ahead of a disaster?</a></li>\n<li><a href=\"https://www.marketplace.org/episode/2025/06/26/the-new-era-of-warfare\">Make Me Smart: The New Era of Warfare</a></li>\n<li><a href=\"https://www.techdirt.com/2025/06/17/techdirt-podcast-episode-422-the-political-power-of-mockery/\">Techdirt Podcast: The Political Power Of Mockery</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.nytimes.com/2025/07/07/magazine/always-sunny-in-philadelphia.html\">How a Show About Truly Terrible People Became the Defining American Sitcom</a> - <em>M.H. Miller</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/07/08/who-goes-maga/\">Who Goes MAGA?</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>John Williams - Anakin vs. Obi-Wan</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Tl-dmo9_VCg\" title=\"John Williams - Anakin vs. Obi-Wan\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-14T22:51:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/58/",
      "url": "https://kpwags.com/week-note/58/",
      "title": "Week Notes for July 6 - 12 (#58)",
      "content_html": "\n\t\t<p>My week notes for the week of July 6 through July 12.</p>\n<h2>Notes</h2>\n<h3>Another Short Week</h3>\n<p>I took Monday &amp; Tuesday off from work to give myself a long weekend. It was nice to have a long break. I was able to clean up a backlog of articles I had saved to read, spent time on my media and fitness repositories, and relaxed.</p>\n<h3>Hockey Tournament</h3>\n<p>I've been in a hockey tournament this weekend at my local rink. 4-5 Games over the course of 3 days. I've been having fun through the first 3 games. Another funny thing is that I had a game Wednesday and have a game on Monday &amp; Tuesday which will mean I'll have played 7-8 games in 7 days. My legs will not be happy with me.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://bigthink.com/starts-with-a-bang/american-science-brain-drain/\">American science to soon face its largest brain drain in history</a></h3>\n\t<div class=\"posted-by\">Ethan Siegel</div>\n<p>It's somewhat ironic that one of MAGA's common slogans is &quot;America First&quot;. This will likely cause so much scientific research that would ordinarily be spearheaded in America, to now be spearheaded elsewhere, if at all. I wonder what next breakthrough is going to be found far later than it could have and how many lives will be negatively affected.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://evanhahn.com/how-i-build-software-quickly/\">How I build software quickly</a></h3>\n\t<div class=\"posted-by\">Evan Hahn</div>\n<p>Prototypes, prototypes, prototypes. It's a good way of looking at things. Build quickly to see if what you're thinking can actually work. Then go back and clean up the code to make it clean, testable, and maintainable.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://ordep.dev/posts/writing-code-was-never-the-bottleneck\">Writing Code Was Never The Bottleneck</a></h3>\n\t<div class=\"posted-by\">Pedro Tavares</div>\n<p>Being able to release good software means being able to maintain the codebase and identify and fix the inevitable bugs. Swapping out &quot;slow&quot; human developers for AI tooling isn't really going to get you where you think you're going.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-13T23:37:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/javascript-broke-the-web-and-called-it-progress/",
      "url": "https://kpwags.com/notes/javascript-broke-the-web-and-called-it-progress/",
      "title": "JavaScript Broke the Web (and Called it Progress)",
      "content_html": "\n\t\t<blockquote>\n<p>The tragedy is, none of this is necessary. Once upon a time, we had a fast, stable, resilient web. But we replaced it with a JavaScript cargo cult.</p>\n<p>Now it takes four engineers, three frameworks, and a CI/CD pipeline just to change a heading. It’s inordinately complex to simply <em>publish a webpage</em>.</p>\n<p>This isn’t evolution. It’s self-inflicted complexity. And we’ve normalised it – because somewhere along the way, we started building websites for <em>developers</em>, not for <em>users</em>.</p>\n</blockquote>\n<blockquote>\n<p>At the same time, JavaScript stopped being just a front-end language. With the rise of Node.js, JS moved server-side, and with it came a wave of app developers entering the web ecosystem. These weren’t web designers or content publishers. They were engineers, trained to build applications, not documents. And they brought with them an architecture-first mindset: patterns, state management, dependency injection, abstracted logic. The result? A slow cultural shift from building pages to engineering systems – even when all the user needed was to load an article.</p>\n</blockquote>\n<blockquote>\n<p>We’re burning user attention, developer time, and business resources to simulate interactivity that nobody asked for.</p>\n<p>JavaScript should be the icing. Not the cake. And certainly not the oven, the recipe, and the kitchen sink.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-08T23:43:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/writing-code-was-never-the-bottleneck/",
      "url": "https://kpwags.com/notes/writing-code-was-never-the-bottleneck/",
      "title": "Writing Code Was Never The Bottleneck",
      "content_html": "\n\t\t<blockquote>\n<p>The marginal cost of adding new software is approaching <strong>zero</strong>, especially with LLMs. But what is the price of <em>understanding</em>, <em>testing</em>, and <em>trusting</em> that code? <strong>Higher than ever</strong>.</p>\n</blockquote>\n<blockquote>\n<p>LLMs reduce the time it takes to produce code, but they haven’t changed the amount of effort required to reason about behavior, identify subtle bugs, or ensure long-term maintainability. That work can be even more challenging when reviewers struggle to distinguish between generated and handwritten code or understand why a particular solution was chosen.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-08T23:30:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/07/08/an-async-nodejs-sqlite-helper/",
      "url": "https://kpwags.com/posts/2025/07/08/an-async-nodejs-sqlite-helper/",
      "title": "An Async Node.js Sqlite Helper",
      "content_html": "\n\t\t<p>When I first built my media repository API in Node.js, I ran into callback hell when running queries or commands against the database.</p>\n<p>As an example:</p>\n<pre class=\"language-ts\" tabindex=\"0\"><code class=\"language-ts\"><span class=\"token keyword\">static</span> <span class=\"token keyword\">readonly</span> <span class=\"token function-variable function\">GetAllVideoGameSystems</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token function-variable function\">callback</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>error<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> systems<span class=\"token operator\">:</span> VideoGameSystem<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> db <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">const</span> systems<span class=\"token operator\">:</span> VideoGameSystem<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  db<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span>getAllVideoGameSystems<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>err<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">,</span> rows<span class=\"token operator\">:</span> VideoGameSystemQueryReturn<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    db<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token function\">callback</span><span class=\"token punctuation\">(</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    rows<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>row<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      systems<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        videoGameSystemId<span class=\"token operator\">:</span> row<span class=\"token punctuation\">.</span>VideoGameSystemId<span class=\"token punctuation\">,</span>\n        name<span class=\"token operator\">:</span> row<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n        colorCode<span class=\"token operator\">:</span> row<span class=\"token punctuation\">.</span>ColorCode<span class=\"token punctuation\">,</span>\n        videoGameCount<span class=\"token operator\">:</span> row<span class=\"token punctuation\">.</span>VideoGameCount<span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token function\">callback</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> systems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I recently started work on another tool to manage my fitness data and I decided that this would not be sustainable. So after doing some searching, and thanks to some help from devs on Stack Overflow, I ended up building a new class to do my sqlite database calls. I figured I'd share the code in hopes that maybe it will help you. I loosely modeled it off of Dapper in .NET.</p>\n<p>This does require the <a href=\"https://www.npmjs.com/package/sqlite3\">sqlite3</a> npm package.</p>\n<div class=\"code-block-filename\">db.ts</div>\n<pre class=\"language-ts\" tabindex=\"0\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> sqlite3 <span class=\"token keyword\">from</span> <span class=\"token string\">'sqlite3'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> cleanSqliteError <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>error<span class=\"token operator\">:</span> Error<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">=></span> error<span class=\"token punctuation\">.</span>message<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SQLITE_ERROR: '</span><span class=\"token punctuation\">,</span> <span class=\"token string\">''</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">db</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token function-variable function\">GetDatabase</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">sqlite3</span><span class=\"token punctuation\">.</span><span class=\"token function\">Database</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./path/to/db.db'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token generic-function\"><span class=\"token function\">Query</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span><span class=\"token constant\">T</span><span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span>sql<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span> params<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span><span class=\"token punctuation\">[</span>error<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> data<span class=\"token operator\">:</span> <span class=\"token constant\">T</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token builtin\">Promise</span></span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> reject<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> database <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        database<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span>sql<span class=\"token punctuation\">,</span> params<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>err<span class=\"token operator\">:</span> Error<span class=\"token punctuation\">,</span> rows<span class=\"token operator\">:</span> <span class=\"token constant\">T</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          database<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> rows<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token generic-function\"><span class=\"token function\">QuerySingle</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span><span class=\"token constant\">T</span><span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span>sql<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span> params<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span><span class=\"token punctuation\">[</span>error<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> data<span class=\"token operator\">:</span> <span class=\"token constant\">T</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">]</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token builtin\">Promise</span></span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> reject<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> database <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        database<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>sql<span class=\"token punctuation\">,</span> params<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>err<span class=\"token operator\">:</span> Error<span class=\"token punctuation\">,</span> row<span class=\"token operator\">:</span> <span class=\"token constant\">T</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          database<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>row<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> row<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token function\">Execute</span><span class=\"token punctuation\">(</span>sql<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span> params<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span><span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token builtin\">Promise</span></span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> reject<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> database <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        database<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>sql<span class=\"token punctuation\">,</span> params<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>err<span class=\"token operator\">:</span> Error<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          database<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> db <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Or, alternatively, if you prefer a JS version,</p>\n<div class=\"code-block-filename\">db.js</div>\n<pre class=\"language-js\" tabindex=\"0\"><code class=\"language-js\"><span class=\"token keyword\">import</span> sqlite3 <span class=\"token keyword\">from</span> <span class=\"token string\">'sqlite3'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">cleanSqliteError</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> error<span class=\"token punctuation\">.</span>message<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SQLITE_ERROR: '</span><span class=\"token punctuation\">,</span> <span class=\"token string\">''</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">db</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token function-variable function\">GetDatabase</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">sqlite3<span class=\"token punctuation\">.</span>Database</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./path/to/db.db'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token function\">Query</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sql<span class=\"token punctuation\">,</span> params <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> database <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        database<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span>sql<span class=\"token punctuation\">,</span> params<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">err<span class=\"token punctuation\">,</span> rows</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          database<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> rows<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token function\">QuerySingle</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sql<span class=\"token punctuation\">,</span> params <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> database <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        database<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>sql<span class=\"token punctuation\">,</span> params<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">err<span class=\"token punctuation\">,</span> row</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          database<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>row<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> row<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token function\">Execute</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sql<span class=\"token punctuation\">,</span> params <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> database <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">GetDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        database<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>sql<span class=\"token punctuation\">,</span> params<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">err</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          database<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token function\">cleanSqliteError</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n\n          <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> db <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Hopefully this helps. Here are links to Gists of them.</p>\n<p><a href=\"https://gist.github.com/kpwags/7f966654a47254169bd878df7426337c\">db.ts</a></p>\n<p><a href=\"https://gist.github.com/kpwags/573813e19d27bb4e60a5ead17a5d79c5\">db.js</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-08T23:07:54Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/07/07/5-years-with-a-home-gym/",
      "url": "https://kpwags.com/posts/2025/07/07/5-years-with-a-home-gym/",
      "title": "5 Years with a Home Gym",
      "content_html": "\n\t\t<p>Almost five years ago, during the pandemic, I built myself a home gym to allow me to continue my strength training journey since COVID kept me away from the commercial gyms. I was slightly worried about it being too convenient, but now I can't imagine lifting anywhere else.</p>\n<p>When I slowly built out my gym during the pandemic, the used prices were absolutely through the roof. People were selling their unused gear at insane prices. Others were buying whatever they could get their hands on and then re-selling at a markup. The market was crazy. Fortunately I was able to use the Reddit home gym community to help me find when the various stores got gear in stock and was able to build out a nice little setup for myself. It was just weird buying &quot;new&quot; because used gear was so much more expensive.</p>\n<p>My biggest worry about building a home gym was that it would end up going unused. There's been a finding that for some people, they need to get out and actually <em>go</em> to the gym in order for them to stick to their goals. Oddly enough, having a home gym can be too convenient that they'll just delay each workout until the next day...and then the next...until, well, they just stop. I've been motivated enough that this has not been an issue, but it's something I keep in the back of my mind to remind me. Often when my gym goes through periods of light use, it's more because I'm doing something else more, like running (I'll do anything to avoid legs days sometimes).</p>\n<p>My home gym setup is actually pretty simple.</p>\n<ul>\n<li>Rack</li>\n<li>Barbell</li>\n<li>EZ Curl Barbell</li>\n<li>50 lb. Adjustable Dumbbells</li>\n<li>Flat Bench</li>\n<li>Adjustable Bench</li>\n<li>Various Plates (Bumper and Iron Plates)</li>\n</ul>\n<p>I've been much more into free weights since I started regularly going to the gym, so that's what I focused on picking up. You'd be surprised how many different exercises you can do with a barbell and some plates. You can pretty much hit every muscle group, and do it within a more confined space.</p>\n<p>I think one of my other favorite things about having the home setup is that I never have to wait for machines to be available. The benches and squat racks at the LA Fitness I used to go to were always popular and often always in use. Most people lifting were generally pretty good about not hogging them. They'd go in, do their lifts, and then vacate the machine. Others who needed longer rest periods between sets were generally willing to let you work in with them (despite some horror stories, most of the heavy power lifters I ran into were quite friendly and reasonable). Beginning of the year was always rough as well with all the people trying to stick with their New Year's resolutions. I often got annoyed with the influx of people and the resulting wait times, but I also tried to balance it with wanting to see more people stick with it to improve whatever fitness goals they're hoping to achieve.</p>\n<p>At home, I don't have to wait on anyone, I can do my exercises in the order I want (better to do the more intense lifts earlier in the lifting session as to not drain your energy prior). I can take longer rest periods when needed without having to worry about whether I'm holding someone else up. It's nice and convenient.</p>\n<p>This is not to say there isn't anything I miss from commercial gyms.</p>\n<p>In terms of gear, there are definitely some pieces of gear I miss from commercial gyms, most notably the cable machines. Unfortunately, my basement ceilings aren't high enough to support a full cage, so I can't even get the attachments to support them. At the end of the day though, the simple setup I have provides more than enough for me to get a good workout in, lift heavy, and build and maintain muscle.</p>\n<p>The other thing I miss is the sense of camaraderie. Most people just kept to themselves and did their own thing, but if you needed a spot, many of the lifters were almost always willing to help out and even cheer you on. While there can be the stereotype that these muscled power lifters are &quot;scary&quot;, more often than not, they're pretty friendly, wanting to see you succeed, and more than willing to offer tips, tricks, and other advice (only when asked as there's an unwritten rule of don't offer unsolicited advice).</p>\n<p>Even with all of that, there's something nice about being able to just walk downstairs to my basement to get a workout in. Totally worth it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-07T18:13:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/130/",
      "url": "https://kpwags.com/reading-log/130/",
      "title": "Reading Log - July 7, 2025 (#130)",
      "content_html": "\n\t\t<p>This week it's a dive into height in CSS, colors with <code>oklch()</code>, the WNBA expanding, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/exploring-dotnet-10-preview-features-1-exploring-the-dotnet-run-app.cs/\">Exploring the features of dotnet run app.cs</a> - <em>Andrew Lock</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.joshwcomeau.com/css/height-enigma/\">The Height Enigma</a> - <em>Josh W Comeau</em></li>\n<li><a href=\"https://simplesite.ayra.ch/?ref=sidebar\">A simple website</a> - <em>simplesite.ayra.ch</em></li>\n<li><a href=\"https://gomakethings.com/generating-colors-with-the-css-oklch-function/\">Generating colors with the CSS oklch() function</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://jakearchibald.com/2025/give-footnotes-the-boot/\">Give footnotes the boot</a> - <em>Jake Archibald</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.mattblodgett.com/2025/06/theres-fine-line-between-increasing.html\">There's a Fine Line Between Increasing Productivity and De-skilling</a> - <em>Matt Blodgett</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://bkardell.com/blog/WebBucks.html\">Web Bucks</a> - <em>Brian Kardell</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/the-wnba-and-its-expansion-fees-are-getting-bigger\">The WNBA And Its Expansion Fees Are Getting Bigger</a> - <em>Maitreyi Anantharaman</em></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://defector.com/just-give-me-some-normal-damn-dinosaurs\">Just Give Me Some Normal Damn Dinosaurs</a> - <em>Barry Petchesky</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.msnbc.com/opinion/msnbc-opinion/immigration-alligator-alcatraz-concentration-camp-rcna216874\">Don’t call it ‘Alligator Alcatraz.’ Call it a concentration camp.</a> - <em>Andrea Pitzer</em></li>\n<li><a href=\"https://www.techdirt.com/2025/07/01/trump-launches-americas-first-concentration-camp-complete-with-tacky-merch/\">Trump Launches America’s First Concentration Camp, Complete With Tacky Merch</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jared Hart - Basements (Live at Sing Us Home 2025)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0JzK9SZ6Qu4\" title=\"Jared Hart - Basements (Live at Sing Us Home 2025)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-07T18:10:35Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/57/",
      "url": "https://kpwags.com/week-note/57/",
      "title": "Week Notes for June 29 - July 5  (#57)",
      "content_html": "\n\t\t<p>My week notes for the week of June 29 through July 5.</p>\n<h2>Notes</h2>\n<h3>Short Week at Work</h3>\n<p>With the Independence Day holiday, I took an extra day and had a nice, short 3 day work week. I've been working on teaching myself ElasticSearch for the project I'm working on and was finally making some good headway. Hopefully my long weekend doesn't set me back too much.</p>\n<h3>Running Again</h3>\n<p>The incredibly hot weather has (slightly) broken and I've dared to try some runs this week. It's still been too hot for me to do real distance, but I've hitting runs in the 3-4 mile range which has felt good.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://jakearchibald.com/2025/give-footnotes-the-boot/\">Give Footnotes the Boot</a></h3>\n\t<div class=\"posted-by\">Jake Archibald</div>\n<p>There's gotta be a better way to handle footnotes. They can be frustrating when reading a physical book, they're annoying too in webpages when trying to go back to the line you were at.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-06T16:40:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/07/03/using-the-html-template-tag/",
      "url": "https://kpwags.com/posts/2025/07/03/using-the-html-template-tag/",
      "title": "Using the HTML Template Tag",
      "content_html": "\n\t\t<p>Recently I finally learned about the <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/template\"><code>&lt;template /&gt;</code></a> element in HTML. I'm not sure how long it's been there, but it came at the right time for me and I figured I'd share a quick demo about how I've been using it in the hopes that maybe it'll help you or someone else.</p>\n<p>I've been using a little homemade app I've called &quot;Wags Media Repository&quot; to keep track of my media backlog and to help build the media pages on my site. The web portion is built with HTML, CSS &amp; Vanilla JavaScript. Outside my use of the <a href=\"https://day.js.org/\">dayjs</a> library for dates, I don't use any frameworks or 3rd party libraries. I recently started on a repository for my fitness data.</p>\n<p>Part of what that means is that I don't have React or Vue or Blazor components I would've reached to in other projects. Almost all of the content in my media and fitness repositories is displayed in tables. That means that when I load the data, I am going through each record and building a table row and inserting it into the table using JavaScript. This can get rather verbose in the code.</p>\n<p>Here's an example for my podcasts page.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">loadRowsIntoTable</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> fragment <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createDocumentFragment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  podcasts<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">podcast</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> tr <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'tr'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    tr<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-row'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> nameCell <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> linkAnchor <span class=\"token operator\">=</span> <span class=\"token function\">createLinkElement</span><span class=\"token punctuation\">(</span>podcast<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span> podcast<span class=\"token punctuation\">.</span>link<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    nameCell<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>linkAnchor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>nameCell<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> categoryCell <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    categoryCell<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'center-align'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> categoryTag <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'div'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    categoryTag<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'tag'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    categoryTag<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'style'</span><span class=\"token punctuation\">,</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">background: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>podcast<span class=\"token punctuation\">.</span>category<span class=\"token punctuation\">.</span>colorCode<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">;</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    categoryTag<span class=\"token punctuation\">.</span>textContent <span class=\"token operator\">=</span> podcast<span class=\"token punctuation\">.</span>category<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">;</span>\n\n    categoryCell<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>categoryTag<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>categoryCell<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> actionsCell <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> editButton <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'button'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    editButton<span class=\"token punctuation\">.</span>textContent <span class=\"token operator\">=</span> <span class=\"token string\">'Edit'</span><span class=\"token punctuation\">;</span>\n    editButton<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'btn-link'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    editButton<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">editPodcast</span><span class=\"token punctuation\">(</span>podcast<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> deleteButton <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'button'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    deleteButton<span class=\"token punctuation\">.</span>textContent <span class=\"token operator\">=</span> <span class=\"token string\">'Delete'</span><span class=\"token punctuation\">;</span>\n    deleteButton<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'btn-link'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    deleteButton<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">openDeleteConfirmation</span><span class=\"token punctuation\">(</span>podcast<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    actionsCell<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>editButton<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    actionsCell<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>deleteButton<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>actionsCell<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    fragment<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>tr<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'tr.loading'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">?.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'podcast-table-body'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>fragment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I'm creating a <code>&lt;tr /&gt;</code>, then adding the content for each <code>&lt;td /&gt;</code>, including any buttons and links. Adding that to a fragment, and then finally inserting that into the table once all the rows are parsed. Not ideal, but it gets the job done and I can avoid the overhead of frameworks like React.</p>\n<p>Stumbling upon the <code>&lt;template /&gt;</code> element has been a game changer as I move forward on the fitness repository. While I haven't yet gone back into my media repository to adapt the new method, let's do it for the podcast table right now.</p>\n<p>First, we'll need to add some code to the html page</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>table</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>thead</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tr</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>th</span> <span class=\"token attr-name\">scope</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>column<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>title-col<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Name<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>th</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>th</span> <span class=\"token attr-name\">scope</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>column<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>category-col<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Category<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>th</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>th</span> <span class=\"token attr-name\">scope</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>column<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>actions-col<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Actions<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>th</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tr</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>thead</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tbody</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>podcast-table-body<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tr</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>loading<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>td</span> <span class=\"token attr-name\">colspan</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>loading-spinner</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>loading-spinner</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>td</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tr</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tr</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>no-content hidden<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>td</span> <span class=\"token attr-name\">colspan</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>No Podcasts<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>td</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tr</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tbody</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>table</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token comment\">&lt;!-- additional code --></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>podcast-row<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tr</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>td</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name-col<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">target</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>_blank<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>noreferrer nofollow<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>td</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>td</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>category-col center-align<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>tag<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>td</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>td</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>actions-col<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-link btn-edit<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Edit<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-link btn-delete<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Delete<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>td</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tr</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>The <code>&lt;template /&gt;</code> element and its children will sit in the code, but will not be rendered by the browser. You can view it if you view the source or navigate in the dev tools, but as far as the user is concerned, it doesn't exist. What it does do though is provide me with a template for adding rows to the table.</p>\n<p>Going back to the JavaScript code, we can make some pretty big changes.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">loadRowsIntoTable</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> fragment <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createDocumentFragment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> template <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'template#podcast-row'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  podcasts<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">podcast</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> tr <span class=\"token operator\">=</span> template<span class=\"token punctuation\">.</span>content<span class=\"token punctuation\">.</span><span class=\"token function\">cloneNode</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.name-col a'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>textContent <span class=\"token operator\">=</span> podcast<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">;</span>\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.name-col a'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'href'</span><span class=\"token punctuation\">,</span> podcast<span class=\"token punctuation\">.</span>link<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.category-col .tag'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>textContent <span class=\"token operator\">=</span> podcast<span class=\"token punctuation\">.</span>category<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">;</span>\n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.category-col .tag'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'style'</span><span class=\"token punctuation\">,</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">background: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>podcast<span class=\"token punctuation\">.</span>category<span class=\"token punctuation\">.</span>colorCode<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">;</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.btn-edit'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">editPodcast</span><span class=\"token punctuation\">(</span>podcast<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n    tr<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'.btn-delete'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">openDeleteConfirmation</span><span class=\"token punctuation\">(</span>podcast<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    fragment<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>tr<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'tr.loading'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">?.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'hidden'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'podcast-table-body'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>fragment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>There is now much less code, and it still feels readable. Let's take a deeper dive into what it's doing.</p>\n<p>The first thing that's different is that I'm pulling the template from the HTML in the JavaScript into a variable aptly named <code>template</code>.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> template <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'template#podcast-row'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This gets the DOM element and stores it for use.</p>\n<p>Moving into the loop, I create the table row by cloning the template using the following code:</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> tr <span class=\"token operator\">=</span> template<span class=\"token punctuation\">.</span>content<span class=\"token punctuation\">.</span><span class=\"token function\">cloneNode</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I can then apply the content and attribute adjustments to the cloned node rather than building everything out from scratch. By running the <code>querySelector()</code> call off the <code>tr</code> object, I'm telling the JavaScript to look for the CSS selector within the <code>tr</code> node, and ignore the rest. It's no different than if I were just grabbing another node off the DOM.</p>\n<p>In this case, instead of going through and creating each <code>&lt;tr /&gt;</code>, <code>&lt;td /&gt;</code>, <code>&lt;a /&gt;</code>, etc., I've pre-built them in the HTML template. All I need to do is apply the content, attributes, and event listeners.</p>\n<p>I'm not sure how long this has been available, but it seems like it's been around for a while now. If nothing else, it shows how much stuff there always is to learn about web development, and that the native platform can do <em>so</em> much all on its own without the need for external libraries.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-03T11:46:14Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/07/02/june-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/07/02/june-2025-check-in/",
      "title": "June 2025 Check-In",
      "content_html": "\n\t\t<p>Whelp, the first half of the year has come and gone. The country is heading to authoritarianism, but I'm still kicking.</p>\n<h2>Another Lap Around the Sun</h2>\n<p>I made it another orbit of the sun and am now a year older, and maybe wiser...maybe. I don't really care all that much about my birthday anymore. I'm not sure what it is about it. I don't dread them, I recognize getting older is a fact of life, and the alternative is worse. I'm just generally &quot;meh&quot;.</p>\n<p>My wife and I took off some extra days to celebrate and made a long weekend out of it. We spent some time at a coffee shop/craft distillery, went to some independent book shops, and spent time together. It really was a nice way to spend one's birthday.</p>\n<h2>Too Damned Hot Too Damned Early</h2>\n<p>It's not even the dog days of summer and we're already hitting nearly triple digits on the thermometer. I don't do well with the heat. I like it cool. The 50s and 60s are my jam. Having temperatures reaching 95+ is, well, absolutely awful. It's hot, it's humid, it's miserable. I take a step outside and it feels like someone dumped a bucket of water on me.</p>\n<p>Thankfully Tess is adaptable. We had been taking her on 3 walks a day. One in the morning right after we get up, once over lunch, and then after work. With her fur coat and the hot pavement, we've given up the mid-day walk and have stuck to before and after work, with the one after work sometimes being pushed to after dinner. I want to make sure she survives the inferno with the rest of us.</p>\n<h2>Ubuntu as a Daily Driver</h2>\n<p>After MacOS Tahoe was announced, I decided to finally upgrade my MacBook to MacOS Sequoia. That was a mistake. It's performance since upgrading has been atrocious. It's been constantly locking up and freezing. Oddly, it seems to handle better when undocked. Either way, I haven't felt like trying to troubleshoot it yet. I need to at some point, but in the mean time, I've generally been using my Ubuntu desktop as my primary machine. It's been working well. I've been a fan of Linux since college, but haven't used it extensively for a while. There are still some rough edges compared with MacOS, but none of them are dealbreakers. I've been able to do just about everything I need to with Ubuntu.</p>\n<p>Right now, the only thing I can't get working is EntityFramework and the Microsoft SQL Server docker image. Once that is taken care of, I should be in good shape.</p>\n<h2>&quot;Forcing&quot; Habits</h2>\n<p>I've recently gotten off the writing and guitar train. Towards the beginning of the year I was writing and playing the guitar more. Over the last week or so, I've set reminders to play the guitar for 15 minutes a day, and to write 30 minutes. I'm hoping this helps prod me to continuing the habits. It can be too easy to fall off the habit, so maybe a todo item in Things might help. So far, so good.</p>\n<h2>Back in Net in Hockey</h2>\n<p>The lower league I play goalie in started back up this month. Three games in, we're a respectable 1-1-1 (yes there are ties, yes I'm fine with that). We got some new players and are starting to gel as a team. I recorded my first shutout the other night in a while. I'd say that I was standing on my head all night in net, but I really wasn't. I made some key saves, but the defense in front of me made my job easy.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>5</span> runs - <span>21.74</span> miles</li>\n<li><strong>Walking:</strong> <span>29</span> walks - <span>29.49</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>5</span> sessions - <span>76,338</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/homo-deus-a-brief-history-of-tomorrow-yuval-noah-harari/55711\">Homo Deus: A Brief History of Tomorrow</a> by Yuval Noah Harari</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/where-nobody-knows-your-name-life-in-the-minor-leagues-of-baseball-john-feinstein/9801945\">Where Nobody Knows Your Name: Life in the Minor Leagues of Baseball</a> by John Feinstein</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-alignment-problem-machine-learning-and-human-values-brian-christian/16099409\">The Alignment Problem: Machine Learning and Human Values</a> by Brian Christian</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-wrong-stuff-how-the-soviet-space-program-crashed-and-burned-john-strausbaugh/20664627\">The Wrong Stuff: How the Soviet Space Program Crashed and Burned</a> by John Strausbaugh</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/when-the-moon-hits-your-eye-john-scalzi/21424940\">When the Moon Hits Your Eye</a> by John Scalzi</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-exvangelicals-loving-living-and-leaving-the-white-evangelical-church-sarah-mccammon/19995483?ean=9781250284471\">The Exvangelicals: Loving, Living, and Leaving the White Evangelical Church</a> by Sarah McCammon</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/under-alien-skies-a-sightseer-s-guide-to-the-universe-phil-plait/18507009\">Under Alien Skies: A Sightseer's Guide to the Universe</a> by Philip Plait</li>\n<li>Started <a href=\"https://bookshop.org/p/books/bad-company-private-equity-and-the-death-of-the-american-dream-megan-greenwell/22086306\">Bad Company: Private Equity and the Death of the American Dream</a> by Megan Greenwell</li>\n<li>Started <a href=\"https://bookshop.org/p/books/rise-of-the-warrior-cop-the-militarization-of-america-s-police-forces-radley-balko/11487752\">Rise of the Warrior Cop: The Militarization of America's Police Forces</a> by Radley Balko</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/125/\">June 2 (#125)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/126/\">June 9 (#126)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/127/\">June 16 (#127)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/128/\">June 23 (#128)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/129/\">June 30 (#129)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/week-note/53/\">June 1 - 7 (#53)</a></li>\n<li><a href=\"https://kpwags.com/week-note/54/\">June 8 - 14 (#54)</a></li>\n<li><a href=\"https://kpwags.com/week-note/55/\">June 15 - 21 (#55)</a></li>\n<li><a href=\"https://kpwags.com/week-note/56/\">June 22 - 28 (#56)</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/06/03/404-medias-reporting-on-teachers-and-ai-is-a-must-read/\">404 Media's reporting on teachers and AI</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/06/08/i-updated-my-week-notes/\">updating my week notes</a></li>\n<li>Shared an essay <a href=\"https://kpwags.com/posts/2025/06/24/to-the-people-i-know-who-voted-for-him/\">about those who voted for Trump</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.expedition33.com/\">Clair Obscur: Expedition 33</a></li>\n<li>Picked Back Up <a href=\"https://www.ea.com/games/starwars/battlefront/star-wars-battlefront-2\">Star Wars: Battlefront II</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0092455/\">Star Trek: The Next Generation</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt10574236/\">Station Eleven</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0458290/\">Star Wars: The Clone Wars</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt9253284/\">Andor</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt3748528/\">Rogue One: A Star Wars Story</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0120915/\">Star Wars Episode I: The Phantom Menace</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0121765/\">Star Wars Episode II: Attack of the Clones</a></li>\n<li><a href=\"https://www.imdb.com/title/tt30253473/\">Materialists</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-07-02T12:53:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/129/",
      "url": "https://kpwags.com/reading-log/129/",
      "title": "Reading Log - June 30, 2025 (#129)",
      "content_html": "\n\t\t<p>Some good thoughts on design and quality, tips on how to keep up with the latest CSS features, API design, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://medium.com/@orbens/the-5-pillars-of-great-api-design-build-interfaces-that-last-d2d2b650433d\">The 5 Pillars of Great API Design: Build Interfaces That Last</a> - <em>Or Ben Shmueli</em></li>\n<li><a href=\"https://medium.com/@sweetondonie/what-happens-when-you-write-throw-ex-vs-throw-in-a-catch-block-672a880800c5\">What Happens When You Write throw ex vs throw in a Catch Block</a> - <em>Donie Sweeton</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/how-to-keep-up-with-new-css-features/\">How to Keep Up With New CSS Features</a> - <em>Sacha Greif</em></li>\n<li><a href=\"https://www.jonoalderson.com/conjecture/javascript-broke-the-web-and-called-it-progress/\">JavaScript broke the web (and called it progress)</a> - <em>Jono Alderson</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://charity.wtf/2025/06/19/in-praise-of-normal-engineers/\">In Praise of “Normal” Engineers</a> - <em>Charity Majors</em></li>\n<li><a href=\"https://overreacted.io/suppressions-of-suppressions/\">Suppressions of Suppressions</a> - <em>Dan Abramov</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://ericwbailey.website/published/quality-is-a-trap/\">Quality is a trap</a> - <em>Eric Bailey</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/06/25/eurostack/#viktor-orbans-isp\">What's a &quot;public internet?&quot;</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.economist.com/finance-and-economics/2025/06/16/why-todays-graduates-are-screwed\">Why today’s graduates are screwed</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://matthewpennell.com/blog/the-shape-of-the-habit\">The Shape of the Habit</a> - <em>Matthew Pennell</em></li>\n<li><a href=\"https://www.propublica.org/article/pig-butchering-scam-cybercrime-us-banks-money-laundering\">How Foreign Scammers Use U.S. Banks to Fleece Americans</a> - <em>Cezary Podkul</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Breaking Benjamin - Dear Agony (Aurora Version)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/x9hZFyoqp7Q\" title=\"Breaking Benjamin - Dear Agony (Aurora Version)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-30T23:04:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/56/",
      "url": "https://kpwags.com/week-note/56/",
      "title": "Week Notes for June 22 - 28 (#56)",
      "content_html": "\n\t\t<p>My week notes for the week of June 22 through June 28.</p>\n<h2>Notes</h2>\n<h3>Learning About ElasticSearch</h3>\n<p>I've been digging into using ElasticSearch with .NET at work. The next big project I've been assigned requires it's use. It's new to me, but I'm hoping to pick it up fast enough to be dangerous.</p>\n<h3>Revisiting My Photography Site</h3>\n<p>When I switched from Next.js to 11ty, one of the things that bit the dust was my photography pages. Several months ago, I started rebuilding it as a standalone site (in 11ty of course). That didn't end up going very far, but I've decided to revisit it. I upgraded to the lastest version of 11ty and have started to lay out the pages. I'm going to have to see if I can find the images I had used so long ago, but I'll get there.</p>\n<h3>MacOS Sequoia Issues</h3>\n<p>I updated my MacBook Pro to run the latest (stable) version of MacOS, MacOS Sequoia. Needless to say, that was a mistake. My MacBook is consistently crashing and locking up when I have it docked. I've been running primarily off my Ubuntu desktop.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://ericwbailey.website/published/quality-is-a-trap/\">Quality is a Trap</a></h3>\n\t<div class=\"posted-by\">Eric Bailey</div>\n<p>A good post talking about how to best approach quality and good design.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-29T17:26:45Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-recurring-cycle-of-developer-replacement-hype/",
      "url": "https://kpwags.com/notes/the-recurring-cycle-of-developer-replacement-hype/",
      "title": "The Recurring Cycle of &#39;Developer Replacement&#39; Hype",
      "content_html": "\n\t\t<blockquote>\n<p>What actually happens isn't replacement, it's transformation. Technologies that promised to eliminate the need for technical expertise end up creating entirely new specializations, often at higher salary points than before. The NoCode movement didn't eliminate developers; it created NoCode specialists and backend integrators. The cloud didn't eliminate system administrators; it transformed them into DevOps engineers at double the salary.</p>\n</blockquote>\n<p>It's also worth thinking about the security implications of code generated. It takes a lot to make sure key systems are secure, vulnerabilities fixed, and threat vectors analyzed and defended against. AI can't do that for you.</p>\n<blockquote>\n<p>Here's what the &quot;AI will replace developers&quot; crowd fundamentally misunderstands: <strong>code is not an asset—it's a liability.</strong> Every line must be maintained, debugged, secured, and eventually replaced. The real asset is the business capability that code enables.</p>\n<p>If AI makes writing code faster and cheaper, it's really making it easier to create liability. When you can generate liability at unprecedented speed, the ability to manage and minimize that liability strategically becomes exponentially more valuable.</p>\n</blockquote>\n<p>And now the million dollar quote.</p>\n<blockquote>\n<p>But there's something deeper happening with this particular transformation. Unlike previous technological shifts that primarily changed how we implement solutions, AI-assisted development is highlighting a fundamental truth about software engineering that has always existed but is now impossible to ignore:</p>\n<p><strong>The most valuable skill in software isn't writing code, it's architecting systems.</strong></p>\n<p>And as we'll see, that's the one skill AI isn't close to replacing.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-24T23:50:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/128/",
      "url": "https://kpwags.com/reading-log/128/",
      "title": "Reading Log - June 23, 2025 (#128)",
      "content_html": "\n\t\t<p>This week it's a line number web component, thoughts on the AI hype train, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.syncfusion.com/blogs/post/underrated-csharp-12-and-13-features\">7 Underrated C# 12 and C# 13 Features Every Developer Should Know!</a> - <em>Saravanan Madheswaran</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.zachleat.com/web/line-numbers/\"><line-numbers> Web Component</line-numbers></a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://simonwillison.net/2025/May/31/no-build/\">No Build Web Development</a> - <em>Simon Willison</em></li>\n<li><a href=\"https://developer.chrome.com/blog/gap-decorations\">A new way to style gaps in CSS</a> - <em>Sam Davis Omekara &amp; Patrick Brosset</em></li>\n<li><a href=\"https://frontendmasters.com/blog/the-simplest-way-to-deploy/\">The Simplest Way to Deploy Your Own Updatable Portfolio Site</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://alonso.network/the-recurring-cycle-of-developer-replacement-hype/\">The Recurring Cycle of 'Developer Replacement' Hype</a> - <em>Danilo Alonso</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/06/20/1254460243/foreign-corrupt-practices-act-bribery-glencore-sudan-oil\">Planet Money: The U.S. is the world's bribery cop. Is that about to change?</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/06/17/how-the-republican-party-became-a-party-that-believes-the-constitution-only-applies-to-its-enemies/\">How The Republican Party Became A Party That Believes The Constitution Only Applies To Its Enemies</a> - <em>Mike Brock</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Horrible Crowes - Sugar (Live at The Troubadour)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/CxlEDG4o2GQ\" title=\"The Horrible Crowes - Sugar (Live at The Troubadour)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-23T19:05:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/55/",
      "url": "https://kpwags.com/week-note/55/",
      "title": "Week Notes for June 15 - 21 (#55)",
      "content_html": "\n\t\t<p>My week notes for the week of June 15 through June 21.</p>\n<h3>Temperatures Rising</h3>\n<p>It feels too early for this. We're starting to see temperatures increasing to high-80s and low-90s. I got a run in Saturday morning since I'm not sure how much running I'll be able to get in this upcoming week. Running in the 90s is not fun. I miss spring.</p>\n<h3>Birthday Week</h3>\n<p>I've completed another orbit around the sun. I don't feel any older...or wiser. Maybe a little more crotchety though. My wife and I took the second half of the week off to spend some time together to celebrate. It was fun, we checked out a coffeehouse distillery we'd been meaning to go to, wandered around a local town visiting some distilleries and breweries. It was a good birthday week and weekend.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.zachleat.com/web/line-numbers/\"><line-numbers> Web Component</line-numbers></a></h3>\n\t<div class=\"posted-by\">Zach Leatherman</div>\n<p>This is a cool little web component for rendering code blocks on websites.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://alonso.network/the-recurring-cycle-of-developer-replacement-hype/\">The Recurring Cycle of 'Developer Replacement' Hype</a></h3>\n\t<div class=\"posted-by\">Danilo Alonso</div>\n<p>We've seen this before with other technology or thought processes. Keep building great systems, AI isn't the answer.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-22T15:56:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/127/",
      "url": "https://kpwags.com/reading-log/127/",
      "title": "Reading Log - June 16, 2025 (#127)",
      "content_html": "\n\t\t<p>Some links about the anti-ICE protests, browser defaults, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.telerik.com/blogs/blazor-basics-dependency-injection-best-practices-use-cases\">Blazor Basics: Dependency Injection Best Practices and Use Cases</a> - <em>Claudio Bernasconi</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://stephaniewalter.design/blog/how-to-convince-people-to-care-and-invest-in-accessibility/\">How to Convince People to Care and Invest in Accessibility</a> - <em>Stéphanie Walter</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/better-platform-defaults-color-picker/\">Webkit’s New Color Picker as an Example of Good Platform Defaults</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/the-magic-developer-wand.../\">The magic developer wand...</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://techcrunch.com/2025/06/12/bluesky-backlash-misses-the-point/\">Bluesky backlash misses the point</a> - <em>Sarah Perez</em></li>\n<li><a href=\"https://www.anildash.com/2025/05/27/2025-05-27-internet-of-consent/\">The Internet of Consent</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/web-as-urls-not-documents/\">The Web as URLs, Not Documents</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://nealstephenson.substack.com/p/remarks-on-ai-from-nz\">Remarks on AI from NZ</a> - <em>Neal Stephenson</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/did-our-local-supermassive-black-hole-recently-eat-its-little-sibling-479f\">Did our local supermassive black hole recently eat its little sibling?</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1916\">.NET Rocks: How Simple is as Simple as Possible with Mark Rendle</a></li>\n<li><a href=\"https://changelog.com/podcast/608\">Building customizable ergonomic keyboards</a> - <em>Changelog Podcast</em></li>\n<li><a href=\"https://www.marketplace.org/episode/2024/09/19/the-things-we-leave-behind\">This is Uncomfortable: The things we leave behind</a></li>\n<li><a href=\"https://www.techdirt.com/2025/06/10/techdirt-podcast-episode-421-the-fracturing-internet/\">Techdirt Podcast: The Fracturing Internet</a></li>\n<li><a href=\"https://changelog.com/news/the-best-worst-codebase-9nPJ\">Changelog Podcast: The best, worst codebase</a></li>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/articles/lessons-from-hungarys-democratic-backsliding-plus-what-makes-a-resistance-movement-successful\">On the Media: Lessons From Hungary’s Democratic Backsliding. Plus, What Makes a Resistance Movement Successful?</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/05/21/et-tu-sloppy-steve/\">Strange Bedfellows and Long Knives</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.theguardian.com/us-news/ng-interactive/2025/apr/24/american-refugees-escape\">Meet the new American refugees fleeing across state lines for safety</a> - <em>Ed Pilkington</em></li>\n<li><a href=\"https://www.techdirt.com/2025/06/12/a-manufactured-crisis-how-a-few-hooligans-in-la-became-the-pretext-for-military-rule/\">A Manufactured Crisis: How A Few Hooligans In LA Became The Pretext For Military Rule</a> - <em>Mike Brock</em></li>\n<li><a href=\"https://www.citationneeded.news/it-matters-i-care/\">It matters. I care.</a> - <em>Molly White</em></li>\n<li><a href=\"https://www.techdirt.com/2025/06/11/lets-be-clear-the-rioting-in-la-is-by-the-cops-not-the-protestors/\">Let’s Be Clear: The Rioting In LA Is By The Cops, Not The Protestors</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/06/09/trump-ice-have-earned-every-bit-of-the-hatred-theyre-now-facing/\">Trump, ICE Have Earned Every Bit Of The Hatred They’re Now Facing</a> - <em>Tim Cushing</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - For Broken Ears</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bZ1eRu92kC4\" title=\"Chuck Ragan - For Broken Ears\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-16T17:01:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/54/",
      "url": "https://kpwags.com/week-note/54/",
      "title": "Week Notes for June 8 - 14 (#54)",
      "content_html": "\n\t\t<p>My week notes for the week of June 8 through June 14.</p>\n<h2>Notes</h2>\n<h3>Garden Work</h3>\n<p>After finding Habanadas at the local farmer’s market last year, I wanted to try planting a garden this year. I’m not sure if I’m late to the party, but I got some raised garden beds and planted some squash and peppers. I hope it’s not too late in the season, but we shall see. I put them in the fenced in area hoping that might stop the wandering deer in our area.</p>\n<h3>Re-Organizing Week Notes</h3>\n<p>As I mentioned, I decided to do a little re-organizing on my site, making week notes their own 11ty collection like my notes &amp; reading logs. I’m hoping it will make things a little easier for me organization-wise moving forward.</p>\n<h3>Lots of Hockey</h3>\n<p>I had games Monday and Wednesday this week. It’s unusual to have games so close together. We’re also dealing with a lot of players traveling, so playing short-handed is never fun. Both were tight games. We tied 2-2 on Monday and lost 4-2 on Wednesday, but we played hard despite the short bench.</p>\n<h3>On a Little Bit of a Star Wars Kick</h3>\n<p>After watching <em>Andor</em>, I'm a little bit on a Star Wars kick. I'm finally sitting down to watch <em>The Clone Wars</em> animated series, which led to my wife and I deciding to re-watch Episodes 1 and 2. So much Star Wars content. I remember growing up and only having the original trilogy. It felt awesome to get the prequel trilogy. Now we have the sequel trilogy, some one-off movies, and countless TV series.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://stephaniewalter.design/blog/how-to-convince-people-to-care-and-invest-in-accessibility/\">How to Convince People to Care and Invest in Accessibility</a></h3>\n\t<div class=\"posted-by\">Stéphanie Walter</div>\n<p>A good talk about the importance of accessibility in web design.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.jim-nielsen.com/2025/better-platform-defaults-color-picker/\">Webkit’s New Color Picker as an Example of Good Platform Defaults</a></h3>\n\t<div class=\"posted-by\">Jim Nielsen</div>\n<p>A nice reminder of how powerful the default controls browsers and operating systems can provide.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.techdirt.com/2025/06/12/a-manufactured-crisis-how-a-few-hooligans-in-la-became-the-pretext-for-military-rule/\">A Manufactured Crisis: How A Few Hooligans In LA Became The Pretext For Military Rule</a></h3>\n\t<div class=\"posted-by\">Mike Brock</div>\n<p>What's going on in LA might only be the start. Context is important.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.citationneeded.news/it-matters-i-care/\">It matters. I care.</a></h3>\n\t<div class=\"posted-by\">Molly White</div>\n<p>It can be easy to just throw your hands up in despair given everything going on around you. Giving in is what the authoritarian fascist shitheads want you to do. It's nice to be reminded that people do care and pushing back against the lies and deception is important. Don't give in. Don't give up.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-15T16:32:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/126/",
      "url": "https://kpwags.com/reading-log/126/",
      "title": "Reading Log - June 9, 2025 (#126)",
      "content_html": "\n\t\t<p>Blazor is getting Microsoft's focus for Web UI, teachers are struggling with AI, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://jeremydmiller.com/2025/05/15/wolverine-4-is-bringing-multi-tenancy-to-ef-core/\">Wolverine 4 is Bringing Multi-Tenancy to EF Core</a> - <em>Jeremy Miller</em></li>\n<li><a href=\"https://devclass.com/2025/05/29/microsoft-designates-blazor-as-its-main-future-investment-in-web-ui-for-net/\">Microsoft designates Blazor as its main future investment in Web UI for .NET</a> - <em>Tim Anderson</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/you-can-style-alt-text-like-any-other-text/\">You can style alt text like any other text</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://gomakethings.com/is-vs.-where/\">:is() vs. :where() </a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://adactio.com/journal/21896\">CSS snippets</a> - <em>Jeremy Keith</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.mrlacey.com/2025/05/my-second-rule-of-testing.html\">My second rule of testing</a> - <em>Matt Lacey</em></li>\n<li><a href=\"https://robbowen.digital/wrote-about/looking-elsewhere/\">Looking elsewhere</a> - <em>Robb Owen</em></li>\n<li><a href=\"https://heather-buchel.com/blog/2025/06/on-fire/\">The trash pile is on fire</a> - <em>Heather Buchel</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/teachers-are-not-ok-ai-chatgpt/\">Teachers Are Not OK</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://www.404media.co/american-schools-were-deeply-unprepared-for-chatgpt-public-records-show/\">American Schools Were Deeply Unprepared for ChatGPT, Public Records Show</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/trump-threatens-to-eviscerate-nasa-cb96\">Trump threatens to eviscerate NASA</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.searchengine.show/can-i-microdose-veganism/\">Search Engine: Can I microdose veganism?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://theoatmeal.com/comics/creativity_erasers\">Erasers are Wonderful</a> - <em>The Oatmeal</em></li>\n<li><a href=\"https://slate.com/life/2025/04/casino-gambling-las-vegas-blackjack-card-counter.html\">What It’s Like to Be a Professional Card Counter</a> - <em>Luke Winkie</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Funeral For A Friend - Into Oblivion</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Td64jjOCqd4\" title=\"Funeral For A Friend - Into Oblivion\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-09T18:27:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/06/08/i-updated-my-week-notes/",
      "url": "https://kpwags.com/posts/2025/06/08/i-updated-my-week-notes/",
      "title": "I Updated My Week Notes",
      "content_html": "\n\t\t<p>I decided to move my week notes into their own collection in my 11ty setup. Because of that, there might be some flukiness with my RSS feeds. Sorry about that!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-08T21:53:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/53/",
      "url": "https://kpwags.com/week-note/53/",
      "title": "Week Notes for June 1 - 7 (#53)",
      "content_html": "\n\t\t<p>My week notes for the week of June 1 through June 7.</p>\n<h2>Notes</h2>\n<h3>Kubernetes</h3>\n<p>At work, I've been working on getting some of the projects I've been working on migrated to Kubernetes. It was my first time working with Kubernetes and I'm still not sure what it really gets us, but we cutover the projects early in the week with minimal interruptions, so I'll call it a success. I have a few more I'll be working on and will have to dig in a bit once I get some time to learn more.</p>\n<h3>The Return of the Heat</h3>\n<p>I knew it would come eventually, but I was hoping for some more time. The temperatures got back into the mid-to-high 80s this week and I'm not a fan.</p>\n<h3>TopGolf</h3>\n<p><a href=\"https://topgolf.com/\">TopGolf</a> was offering a summer pass offering unlimited daily 2 hour slots (with some caveats) so I decided to pick it up. I suck at golf but generally enjoy being out on the course. I'm hoping to get out more this summer and work on my swing to maybe not be quite as much of an embarrassment as I am right now.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://theoatmeal.com/comics/creativity_erasers\">Erasers are Wonderful</a></h3>\n\t<div class=\"posted-by\">The Oatmeal</div>\n<p>I just love the analogy of this and how true it is in so many fields.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://piccalil.li/blog/you-can-style-alt-text-like-any-other-text/\">You can style alt text like any other text</a></h3>\n\t<div class=\"posted-by\">Andy Bell</div>\n<p>It's amazing how much one can still learn in web development and how much customization browsers and CSS support.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-08T19:28:47Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/06/06/may-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/06/06/may-2025-check-in/",
      "title": "May 2025 Check-In",
      "content_html": "\n\t\t<p>The older I get, the faster it feels the world is going. I’m not sure what to make of that, but alas, it’s happening and there’s not much I can do about it. May wasn’t a particularly noteworthy month, it just sort of was.</p>\n<h2>Hip Pain &amp; Lack of Exercise</h2>\n<p>May was frustrating from a fitness point of view. I tweaked my hip playing hockey. It really limited what I could do. There were even some days where walking was uncomfortable. As I've gotten more into staying active, I get a little punchy not being able to go out and be active be it for walks, runs, or really anything.</p>\n<p>I finally started feeling better towards the end of the month and was able to slowly get back into things. It's part of the curse of getting older, you recover slower...though it beats the alternative.</p>\n<h2>Beautiful Weather Out on the Porch</h2>\n<p>May was full of gorgeous weather that allowed me to be out on the porch. I love being able to be out there and there's often only a small window where the weather isn't unbearably hot and the mosquitoes aren't super bitey. I took advantage of it to work on my side projects, write, and go through my RSS feeds. As I write this, the temperature is in the high 80s, so hopefully the temperature drops a tad and I can get a few more days before the dog days of summer.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>5</span> runs - <span>21.74</span> miles</li>\n<li><strong>Walking:</strong> <span>26</span> walks - <span>32.07</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>7</span> sessions - <span>92,300</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://kpwags.com/posts/2025/06/06/may-2025-check-in/LINK\">Dark Wire: The Incredible True Story of the Largest Sting Operation Ever</a> by Joseph Cox</li>\n<li>Finished <a href=\"https://kpwags.com/posts/2025/06/06/may-2025-check-in/LINK\">More Money than God: Hedge Funds and the Making of a New Elite</a> by Sebastian Mallaby</li>\n<li>Finished <a href=\"https://kpwags.com/posts/2025/06/06/may-2025-check-in/LINK\">Doom Guy: Life in the First Person</a> by John Romero</li>\n<li>Finished <a href=\"https://kpwags.com/posts/2025/06/06/may-2025-check-in/LINK\">Ancillary Mercy</a> by Ann Leckie</li>\n<li>Finished <a href=\"https://kpwags.com/posts/2025/06/06/may-2025-check-in/LINK\">The Staircase in the Woods</a> by Chuck Wendig</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-alignment-problem-machine-learning-and-human-values-brian-christian/16099409\">The Alignment Problem: Machine Learning and Human Values</a> by Brian Christian</li>\n<li>Started <a href=\"https://bookshop.org/p/books/homo-deus-a-brief-history-of-tomorrow-yuval-noah-harari/55711\">Homo Deus: A Brief History of Tomorrow</a> by Yuval Noah Harari</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/121/\">May 5 (#121)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/122/\">May 12 (#122)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/123/\">May 19 (#123)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/124/\">May 26 (#124)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/posts/2025/05/04/week-notes/\">April 27 - May 3</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/05/11/week-notes/\">May 4 - 10</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/05/18/week-notes/\">May 11 - 17</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/05/25/week-notes/\">May 18 - 24</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/05/02/losing-polygon-sucks/\">losing Polygon</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/05/28/koji-kobura-goldeneye-007-n64-pause-music/\">a cool video of Koji Kobura recreating GoldenEye pause music</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/05/29/dotnet-run-app-cs/\">a cool new feature in .NET 10</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Started <a href=\"https://www.expedition33.com/\">Clair Obsur: Expedition 33</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0092455/\">Star Trek: The Next Generation</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt9253284/\">Andor</a></li>\n<li>Finished Season 2 of <a href=\"https://www.imdb.com/title/tt3581920/\">The Last of Us</a></li>\n<li>Finished Season 2 of <a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt36415832/\">Oklahoma City Bombing: One Day in America</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-06T11:50:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/06/03/404-medias-reporting-on-teachers-and-ai-is-a-must-read/",
      "url": "https://kpwags.com/posts/2025/06/03/404-medias-reporting-on-teachers-and-ai-is-a-must-read/",
      "title": "404 Media&#39;s Reporting on Teachers and AI is a Must Read",
      "content_html": "\n\t\t<p>I recently read an <a href=\"https://www.404media.co/american-schools-were-deeply-unprepared-for-chatgpt-public-records-show/\">article from 404 Media</a> about how schools were not at all ready for the onslaught of questions of how teachers and students should or should not use AI tools like ChatGPT.</p>\n<p>I'm pretty much against it's use for a variety of reasons, namely its massive energy footprint and that it's fed by stealing other people's work.</p>\n<p>404 Media then followed up with another <a href=\"https://www.404media.co/teachers-are-not-ok-ai-chatgpt/\">article relaying the feedback</a> they got from teachers. I'm the son of a 3rd grade teacher. My mom poured her heart out teaching and helping every student that passed through her classroom. I might very well be biased, but teachers already have it hard with everything they have to deal with. Now dealing with the different AI tools and how to best handle them is only making it worse.</p>\n<p>One quote from the responses stood out to me.</p>\n<p><quote-link-block source=\"Nathan Schmidt, University Lecturer, managing editor at Gamers With Glasses\" href=\"https://www.gamerswithglasses.com/\">Read\nChatGPT isn't its own, unique problem. <em>It's a symptom of a totalizing cultural paradigm in which passive consumption and regurgitation of content becomes the status quo.</em> It's a symptom of the world of TikTok and Instagram and perfecting your algorithm, in which some people are professionally deemed the 'content creators,' casting everyone else into the creatively bereft role of the content “consumer.&quot; And if that paradigm wins, as it certainly appears to be doing, pretty much everything that has been meaningful about human culture will be undone, in relatively short order.\n</quote-link-block></p>\n<p>I would encourage you to read the article and the responses as they provide a lot of good thoughts on where things currently stand in today's classrooms and universities.</p>\n<p>One final thought I'll leave you with. I'd like to say that I wouldn't have used AI in school growing up. In high school, with my parents' help, that would probably be true. In college, I really can't say I would've held the same convictions I hold today. There would probably have been times where I would likely have pushed to try to get away with it. Having matured, I can see why that's bad and the value one gets from actually putting in the work. But as teens and young adults, I can understand the push towards &quot;just let the computer do it&quot;.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-03T15:05:12Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-promise-that-wasnt-kept/",
      "url": "https://kpwags.com/notes/the-promise-that-wasnt-kept/",
      "title": "The Promise That Wasn’t Kept",
      "content_html": "\n\t\t<blockquote>\n<p>Valuable work and meaning is not derived from what AI makes us (apparently) faster at: generating code. Meaning and value in software development is actually created through the impact of building things that makes human lives <strong>better</strong>, or <strong>easier</strong>, or <strong>slightly less bad</strong>.</p>\n</blockquote>\n<blockquote>\n<p>What’s becoming clear is that the mass adoption of AI is shifting the focus away from human-centered software solutions that provide meaningful value, and is reducing the entire industry to just the tools at its disposal. <strong>Just generate the code, bro. Just ship one more app, bro.</strong></p>\n</blockquote>\n<p>I take pride in my work and try to create the best product for my users. I'd be lying if I said I always succeeded, but I'm always striving to do better. How many of the vibe coded apps will just be cookie cutter bland apps that might do the job, but feel more like some boring utility. Boring can be good, but sometimes some nicer touches can provide real value.</p>\n<blockquote>\n<p>There’s nothing wrong with being inexperienced; we all have to start from somewhere. But we can’t rely on tools as a shortcut to <strong>gain</strong> valuable experience. Experience takes time to develop, and your tools are only as good as your fundamental knowledge and skills. If you skip the knowledge and skills part, and if you fail to <strong>learn</strong>about what you’re doing and the implications of <strong>how you’re doing it</strong> and the human value you have the potential to deliver, then you have little hope of building human value into your software.</p>\n</blockquote>\n<p>I sometimes wonder what junior developers are going to lose by not starting with the basics and just getting AI to build things. It might be all fine and dandy when the generated code works, but what happens when users inevitably find weird edge cases? Or what if there's a bug? From my own personal experience, I've gained plenty of experience and knowledge from debugging and figuring out where code goes awry. I'm not saying that every developer needs to follow my path or not use any new tooling, but I wonder how much learning is done when you enter some commands into a prompt and code is spit out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-02T23:58:55Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/125/",
      "url": "https://kpwags.com/reading-log/125/",
      "title": "Reading Log - June 2, 2025 (#125)",
      "content_html": "\n\t\t<p>.NET 10 comes with a cool new feature, North Korea is up to no good, some thoughts on AI and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/\">Announcing dotnet run app.cs – A simpler way to start with C# and .NET 10</a> - <em>Damian Edwards</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://overreacted.io/jsx-over-the-wire/\">JSX Over The Wire</a> - <em>Dan Abramov</em></li>\n<li><a href=\"https://gomakethings.com/an-aspect-ratio-css-utility-class/\">An aspect ratio CSS utility class</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://webkit.org/blog/16831/line-height-units/\">Polishing your typography with line height units</a> - <em>Jen Simmons</em></li>\n<li><a href=\"https://css-tricks.com/toe-dipping-into-view-transitions/\">Toe Dipping Into View Transitions</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://leanrada.com/notes/css-only-lqip/\">Minimal CSS-only blurry image placeholders</a> - <em>Lean Rada</em></li>\n<li><a href=\"https://www.matuzo.at/blog/2025/is-the-button-focusable\">Is the button focusable?</a> - <em>Manuel Matuzović</em></li>\n<li><a href=\"https://gomakethings.com/shifting-focus-on-route-change-with-react-router/\">Shifting focus on route change with React Router</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/news/674366/nick-clegg-uk-ai-artists-policy-letter\">Nick Clegg says asking artists for use permission would ‘kill’ the AI industry</a> - <em>Mia Sato</em></li>\n<li><a href=\"https://www.wired.com/story/police-records-car-subscription-features-surveillance/\">Car Subscription Features Raise Your Risk of Government Surveillance, Police Records Show</a> - <em>Dell Cameron</em></li>\n<li><a href=\"https://www.anildash.com/2025/05/01/what-would-good-ai-look-like/\">What Would “Good” AI Look Like?</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>Cybersecurity</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/north-korea-stole-your-tech-job-ai-interviews/\">North Korea Stole Your Job</a> - <em>Bobbie Johnson</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://whitep4nth3r.com/blog/the-promise-that-wasnt-kept/\">The promise that wasn’t kept</a> - <em>Salma Alam-Naylor</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://world.hey.com/dhh/don-t-make-google-sell-chrome-93cefbc6\">Don't make Google sell Chrome</a> - <em>David Heinemeier Hansson</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://therationalleague.substack.com/p/maga-is-gaslighting-you-the-cost\">MAGA Is Gaslighting You: The Cost of Waking Up in an Authoritarian America</a> - <em>The Rational League</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.joanwestenberg.com/bet-on-systems-not-sparks/\">Bet on Systems, Not Sparks</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>John Williams - Across the Stars</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/7wMiMDBHnJ0\" title=\"John Williams - Across the Stars\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-02T23:58:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/52/",
      "url": "https://kpwags.com/week-note/52/",
      "title": "Week Notes for May 25 - 31 (#52)",
      "content_html": "\n\t\t<p>My week notes for the week of May 25 through May 31.</p>\n<h2>Notes</h2>\n<h3>Hip Mostly Better</h3>\n<p>I've gotten to the point where I really don't like going so many days without getting some real exercise in. My hip issues have been hampering me, but I'm slowly getting some light lifting and running in now that it's mostly feeling better.</p>\n<h3>Writing</h3>\n<p>I've been able to enjoy the nicer evenings out on the porch and have spent a fair amount of it writing. I want to finish the story I wanted to finish last year. It started out as a short story and it's only grown. I'm making progress though.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.wired.com/story/north-korea-stole-your-tech-job-ai-interviews/\">North Korea Stole Your Job</a></h3>\n\t<div class=\"posted-by\">Bobbie Johnson</div>\n<p>As if hiring wasn't hard enough, now you have to be aware of North Koreans applying as well. On a side note, I was asked to be a U.S. contact for a developer who claimed they were in South Korea. Wonder if this was a front for North Korea. (I marked it as spam and deleted it)</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.theverge.com/news/674366/nick-clegg-uk-ai-artists-policy-letter\">Nick Clegg says asking artists for use permission would ‘kill’ the AI industry</a></h3>\n\t<div class=\"posted-by\">Mia Sato</div>\n<p>It might be funny if this was satire, but sadly it's not. Maybe the AI industry deserves to die.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://whitep4nth3r.com/blog/the-promise-that-wasnt-kept/\">The promise that wasn’t kept</a></h3>\n\t<div class=\"posted-by\">Salma Alam-Naylor</div>\n<p>This is a great post about the rise of AI code generation tooling that articulates well about so many of the downsides and what we as developers lose with all the new LLMs that write code for us.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-06-01T18:51:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/05/29/dotnet-run-app-cs/",
      "url": "https://kpwags.com/posts/2025/05/29/dotnet-run-app-cs/",
      "title": "dotnet run app.cs",
      "content_html": "\n\t\t<p>So this is kind of cool. In .NET 10 due out later this year, <a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/\">Microsoft has announced the ability to run code right from the .NET CLI</a> rather than having to scaffold an entire project.</p>\n<p>Over the last several .NET versions, they've been making it easier and easier to get started with building apps. In .NET 6, they announced <a href=\"https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/top-level-statements\">top-level statements</a> which allowed developers to bypass having to specify the class and <code>Main</code> statements. You still needed the app within a C# project, but it removed a lot of the boiler plate code. In .NET 10, it looks like they're taking it a bit further.</p>\n<p>This probably puts it a little more on par with Node.js where you could just run <code>node index.js</code> to run a node script. Now you can run a single C# file in much the same way.</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$<span class=\"token operator\">></span> dotnet run app.cs</code></pre>\n<p>The link provides more details as well about including 3rd party packages and more. Should be a pretty cool addition to the .NET ecosystem.</p>\n<div class=\"view-link\"><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/\">Read More</a></div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-29T22:52:38Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/05/28/koji-kobura-goldeneye-007-n64-pause-music/",
      "url": "https://kpwags.com/posts/2025/05/28/koji-kobura-goldeneye-007-n64-pause-music/",
      "title": "Koji Kobura Re-Creates GoldenEye 007 N64 Pause Music",
      "content_html": "\n\t\t<p>I spent hours as a kid playing GoldenEye on the Nintendo 64. The game was fun and the music was amazing. Koji Kobura does an awesome job of re-creating the pause music.</p>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/FB-C-eSa9N8\" title=\"GoldenEye 007 N64 'Pause Music'\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-28T15:10:30Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/what-would-good-ai-look-like/",
      "url": "https://kpwags.com/notes/what-would-good-ai-look-like/",
      "title": "What Would “Good” AI Look Like?",
      "content_html": "\n\t\t<blockquote>\n<p>We simply need to start thinking through the implications of a fundamentally better approach to AI, and to understand that all of these things are extremely possible. Consumer-grade AI tools that are actually good do not have to be a hallucination.</p>\n</blockquote>\n<p>This was a good list looking at how we might see better AI.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-28T15:10:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/programming-is-a-feeling-and-ai-is-changing-it/",
      "url": "https://kpwags.com/notes/programming-is-a-feeling-and-ai-is-changing-it/",
      "title": "Programming is a Feeling, and AI is Changing It",
      "content_html": "\n\t\t<blockquote>\n<p><strong>Programming is an activity, but it’s also a feeling.</strong> For those of us who actually enjoy programming, there is a deep satisfaction that comes from solving problems through well-written code, a kind of ineffable joy found in the elegant expression of a system through our favorite syntax. It is akin to the same satisfaction a craftsperson might find at the end of the day after toiling away on well-made piece of furniture, the culmination of small dopamine hits that come from sweating the details on something and getting them just right. Maybe nobody will notice those details, but it doesn’t matter. <em>We</em> care, <em>we</em> notice, <em>we</em> get joy from the aesthetics of the craft.</p>\n</blockquote>\n<p>There really is something to be said about seeing the output of the code you write. Being able to see your code transform into a website or application is amazing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-28T15:09:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/car-subscription-features-raise-your-risk-of-government-surveillance-police-records-show/",
      "url": "https://kpwags.com/notes/car-subscription-features-raise-your-risk-of-government-surveillance-police-records-show/",
      "title": "Car Subscription Features Raise Your Risk of Government Surveillance, Police Records Show",
      "content_html": "\n\t\t<blockquote>\n<p>Nearly all subscription-based car features rely on devices that come preinstalled in a vehicle, with a cellular connection necessary only to enable the automaker's recurring-revenue scheme. The ability of car companies to charge users to activate some features is effectively the only reason the car’s systems need to communicate with cell towers. The police documents note that companies often hook customers into adopting the services through free trial offers, and in some cases the devices are communicating with cell towers even when users decline to subscribe.</p>\n<p>In an August 2022 email, one detective noted: “In some vehicles, again [it] depends on manufacturer, the vehicle is still doing this despite the lack of an active subscription, and just sending the data back to the mother ship. This could be due to collecting user data for what the manufacturer sells it for, to providing this data to try to sell you on renewing your [subscription] package that lapsed.”</p>\n</blockquote>\n<p>I'm not looking forward to getting my next car...I like my dumb car. I don't need my car constantly sending data to Honda or who knows who else.</p>\n<blockquote>\n<p>“Location data is some of the most sensitive, revealing information that is generated by our devices, including our cars,” the EFF’s Crocker says. “It's extremely revealing of obviously where you go and where you've been, but also all the people you associate with and all the things you're doing. You can paint a very clear picture of someone's life with just a list of all the places they've been in their car. The Supreme Court has made that very clear.”</p>\n</blockquote>\n<p>You'd be surprised how much can be determined about you based on looking at where you go.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-28T15:07:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/bet-on-systems-not-sparks/",
      "url": "https://kpwags.com/notes/bet-on-systems-not-sparks/",
      "title": "Bet on Systems, Not Sparks",
      "content_html": "\n\t\t<blockquote>\n<p>A well-built system doesn't need to be brilliant today. It just needs to keep working. It doesn’t need your best day ever; it needs your average day, consistently delivered. You don’t win by doing something heroic once. You win by making it unnecessary.</p>\n</blockquote>\n<p>Slow and steady wins the race.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-28T15:07:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/124/",
      "url": "https://kpwags.com/reading-log/124/",
      "title": "Reading Log - May 26, 2025 (#124)",
      "content_html": "\n\t\t<p>Some good writeups on CSS <code>@layer</code>, <code>this</code> in JavaScript, Mozilla sunsetting Pocket, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/the-css-layer-at-rule/\">The CSS @layer at-rule</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://piccalil.li/blog/javascript-when-is-this/\">JavaScript, when is this?</a> - <em>Mat “Wilto” Marquis</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://seanvoisen.com/blog/programming-is-a-feeling-ai-is-changing-it/\">Programming is a feeling, and AI is changing it</a> - <em>Sean Voisen</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/craft-and-satisfaction/\">Craft and Satisfaction</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://daringfireball.net/2025/04/is_chrome_even_a_sellable_asset\">Is Chrome Even a Sellable Asset?</a> - <em>John Gruber</em></li>\n<li><a href=\"https://blog.pragmaticengineer.com/stack-overflow-is-almost-dead/\">Stack overflow is almost dead</a> - <em>Gergely Orosz</em></li>\n<li><a href=\"https://support.mozilla.org/en-US/kb/future-of-pocket\">Pocket is Saying Goodbye: What You Need to Know</a> - <em>Mozilla</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/05/19/nintendo-updates-console-eula-well-brick-your-shit-if-we-dont-like-what-you-do-with-it/\">Nintendo Updates Console EULA: We’ll Brick Your Shit If We Don’t Like What You Do With It</a> - <em>Timothy Geigner</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/05/13/techdirt-podcast-episode-418-the-elonification-of-government/\">Techdirt Podcast: The Elonification Of Government</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/05/23/kids-dont-have-ids-and-age-estimation-tech-is-frequently-very-wrong/\">Kids Don’t Have IDs And Age-Estimation Tech Is Frequently Very Wrong</a> - <em>Shoshana Weissmann</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://seanvoisen.com/stream/2025-05-23-stop-doing-list/\">My &quot;stop doing list&quot;</a> - <em>Sean Voisen</em></li>\n<li><a href=\"https://www.marketplace.org/story/2025/05/20/sip-and-sonder-centers-black-community-in-its-coffee-shops\">This company centers Black community in its coffee shops</a> - <em>Kai Ryssdal &amp; Sean McHenry</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Danish National Symphony Orchestra - Duel of the Fates</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/97-0ghnBMcs\" title=\"The Danish National Symphony Orchestra - Duel of the Fates\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-26T17:22:02Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/51/",
      "url": "https://kpwags.com/week-note/51/",
      "title": "Week Notes for May 18 - 24 (#51)",
      "content_html": "\n\t\t<p>My week notes for the week of May 18 through May 24.</p>\n<h2>Notes</h2>\n<h3>Hip Bothering Me</h3>\n<p>Sunday night's hockey game was an embarrassing loss, but I came out of it with some hip discomfort. It's happened before, though never quite like this. Normally I feel it when I tweak it, but I was fine after the game. It wasn't until Monday morning that it started bothering me. Needless to say, it's bothered me most of the week and has limited my exercise. I haven't been able to run, though with all the rain, I probably wouldn't have run much anyway. It's limited the lengths of my walks with Tess, and I've been hesitant to do my next legs day at the gym. Hopefully some more rest helps it.</p>\n<h3>Working on My Fitness Repository</h3>\n<p>I've been making good progress on my fitness repository. Like my media repository, it's going to be a small Node API with an HTML/CSS/Vanilla JS frontend. I'm hoping it could replace my spreadsheets.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://seanvoisen.com/stream/2025-05-23-stop-doing-list/\">My 'stop doing list'</a></h3>\n\t<div class=\"posted-by\">Sean Voisen</div>\n<p>I like this idea. There's always so many things we try to say we'll start doing. Focusing on what we want to <em>stop</em> doing could prove helpful.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://support.mozilla.org/en-US/kb/future-of-pocket\">Pocket is saying goodbye - What you need to know</a></h3>\n\t<div class=\"posted-by\">Mozilla</div>\n<p>Pocket was the first &quot;read it later&quot; service I used. It was good with what it did. I've switched to Instapaper a little while back, but for the life of me, I forget why. It's sad to see this shutdown. It'd be nice if they turned their focus to Firefox, but I'm not holding my breath.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-25T18:39:09Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/john-romero-doom-guy/",
      "url": "https://kpwags.com/books/john-romero-doom-guy/",
      "title": "Book Notes for Doom Guy: Life in the First Person",
      "content_html": "\n\t\t<p>I'm not one who generally likes memoirs, but this was an incredible listen about John Romero's life, growing up and gaining a legacy of one of the DOOM creators.</p>\n<p>I remember getting DOOM and playing it and thought it was amazing. Listening to the history of how John Romero got into game development, programming in assembly, and how he, John Carmack, and the rest of Id got together to make one of the most iconic games ever was fascinating.</p>\n<p>I'd highly recommend this for anyone who grew up playing DOOM or Quake. Or for anyone who is interested in an icon of the game industry.</p>\n<p>I'd be lying if I said it wasn't inspiring to give me a little kick in the ass to do my own development, even if it's not necessarily games.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/123/",
      "url": "https://kpwags.com/reading-log/123/",
      "title": "Reading Log - May 19, 2025 (#123)",
      "content_html": "\n\t\t<p>Firefox brings Temporal to the browser, someone turns a Nintendo Wii into a web server, AI enshittifying the job search further, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://allthingssmitty.com/2025/04/21/when-to-use-map-vs-foreach/\">When to use map() vs. forEach()</a> - <em>Matt Smith</em></li>\n<li><a href=\"https://ohhelloana.blog/in-defense-of-unpolished-websites/\">In defense of unpolished personal websites</a> - <em>Ana Rodrigues</em></li>\n<li><a href=\"https://spidermonkey.dev/blog/2025/04/11/shipping-temporal.html\">Shipping Temporal</a> - <em>Daniel Minor</em></li>\n<li><a href=\"https://blog.infected.systems/posts/2025-04-21-this-blog-is-hosted-on-a-nintendo-wii/\">This blog is hosted on a Nintendo Wii</a> - <em>Alex Haydock</em></li>\n<li><a href=\"https://css-irl.info/creating-css-variables-from-a-js-file/\">Creating CSS Theme Variables from a JS file</a> - <em>Michelle Barker</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2025/04/what-mean-site-be-keyboard-navigable/\">What Does It Really Mean For A Site To Be Keyboard Navigable</a> - <em>Eleanor Hecks</em></li>\n<li><a href=\"https://dev.to/madsstoumann/guitar-chords-in-css-3hk8\">Guitar Chords in CSS</a> - <em>Mads Stoumann</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.joshwcomeau.com/blog/the-post-developer-era/\">The Post-Developer Era</a> - <em>Josh W. Comeau</em></li>\n<li><a href=\"https://cekrem.github.io/posts/coding-as-craft-going-back-to-the-old-gym/\">Coding as Craft: Going Back to the Old Gym</a> - <em>Christian Ekrem</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/ai-recruiter-apriora-tiktok/\">Watch an AI-Generated Recruiter Make a Job Interview Even Worse</a> - <em>Samantha Cole</em></li>\n<li><a href=\"https://www.404media.co/license-plate-reader-company-flock-is-building-a-massive-people-lookup-tool-leak-shows/\">License Plate Reader Company Flock Is Building a Massive People Lookup Tool, Leak Shows</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://pluralistic.net/2025/04/24/hermit-kingdom/#simpler-times\">Every complex ecosystem has parasites</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2025/05/if-congress-actually-cancels-the-sls-rocket-what-happens-next/#\">If Congress actually cancels the SLS rocket, what happens next?</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://defector.com/clair-obscur-expedition-33-makes-your-wandering-worth-it\">‘Clair Obscur: Expedition 33’ Makes Your Wandering Worth It</a> - <em>Luis Paez-Pumar</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.404media.co/the-simulation-says-the-orioles-should-be-good/\">The Simulation Says the Orioles Should Be Good</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://blogs.fangraphs.com/when-should-you-intentionally-walk-aaron-judge/\">When Should You Intentionally Walk Aaron Judge?</a> - <em>Ben Clemens</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://defector.com/swole-woman-casey-johnston-has-written-a-swole-book\">Swole Woman Casey Johnston Has Written A Swole Book</a> - <em>Kelsey McKinney</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Horrible Crowes - Sugar (Live at The Troubadour)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/CxlEDG4o2GQ\" title=\"The Horrible Crowes - Sugar (Live at The Troubadour)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-19T16:12:02Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/license-plate-reader-company-flock-is-building-a-massive-people-lookup-tool-leak-shows/",
      "url": "https://kpwags.com/notes/license-plate-reader-company-flock-is-building-a-massive-people-lookup-tool-leak-shows/",
      "title": "License Plate Reader Company Flock Is Building a Massive People Lookup Tool, Leak Shows",
      "content_html": "\n\t\t<blockquote>\n<p>Inside Flock, employees have voiced concern about the Nova product, according to the Slack messages. One pointed to the use of hacked data like the Park Mobile Breach. “I was pretty horrified to hear we use stolen data in our system. In addition to being attained illegally, it seems like that could create really perverse incentives for more data to be leaked and stolen,” they wrote. “What if data was stolen from Flock? Should that then become standard data in everyone else’s system?”</p>\n</blockquote>\n<p>Privacy nightmares feel like they're like a snowball rolling downhill.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-19T16:11:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/in-defense-of-unpolished-personal-websites/",
      "url": "https://kpwags.com/notes/in-defense-of-unpolished-personal-websites/",
      "title": "In Defense of Unpolished Personal Websites",
      "content_html": "\n\t\t<blockquote>\n<p>But deep down, all I want for my personal website is to give back to the web. I want anyone, regardless of skill level, to inspect elements, understand the structure, and learn from readable code. And I am fully aware my code isn’t perfect. It’s old and there’s a lot of room for improvement.</p>\n<p>For now, I am happy to carry on with this approach. My imperfect and unpolished code on my personal website isn't the full reflection on my technical abilities or knowledge of web development standards. It’s a constant draft where my handwriting is legible and where I want optimization takes a backseat. It’s where I use the little free time I have to actually write on it and prioritise the experiments I want.</p>\n</blockquote>\n<p>Ana articulates well how I feel. Learning website development back when I first started, being able to view the source was a great crutch to see how to do things. I experiment with my site, it doesn't have to be perfect, just mine.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-19T16:09:22Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/50/",
      "url": "https://kpwags.com/week-note/50/",
      "title": "Week Notes for May 11 - 17 (#50)",
      "content_html": "\n\t\t<p>My week notes for the week of May 11 through May 17, 2025.</p>\n<h2>Notes</h2>\n<h3>Strength Training</h3>\n<p>I lifted a lot more this week than I have the past month or two. It was sort of necessary as we got a lot of rain which made walking and running not a very good option. Needless to say, my muscles hate me right now, especially my legs.</p>\n<h3>DOOM Guy</h3>\n<p>I've been listening to the audiobook of John Romero's <a href=\"https://bookshop.org/p/books/doom-guy-life-in-first-person-john-romero/18230638\">Doom Guy</a> and have been amazed at listening to some of the things he and John Carmack were able to do with the early video games like DOOM and Quake. It's been a good listen/read so far and I'd recommend it. It's inspired me to get back more into developing my side projects.</p>\n<h3>Ubuntu</h3>\n<p>I recently decided to get Linux running on my desktop as a dual boot option with Windows. I started with Fedora and was running into some stability issues. It's been a little while since I've really used Linux so I'm not sure if there was an easy fix I wasn't aware of. I opted to go back to my Linux distro of choice back in the day and so far things are running well. I'm still getting it up and running, but it's been stable.</p>\n<h3>Clair Obscur: Expedition 33</h3>\n<p>I started playing <a href=\"https://www.expedition33.com/\">Clair Obscur: Expedition 33</a> as I heard good things about it and found that it was available with Game Pass on my Xbox. It's been starting out slow, but I've enjoyed the little bit I've been playing it. It reminds me of Super Mario RPG with some elements from Elden Ring.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.infected.systems/posts/2025-04-21-this-blog-is-hosted-on-a-nintendo-wii/\">This blog is hosted on a Nintendo Wii</a></h3>\n\t<div class=\"posted-by\">Alex Haydock</div>\n<p>It's always cool to see people hacking technology to do other things.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/license-plate-reader-company-flock-is-building-a-massive-people-lookup-tool-leak-shows/\">License Plate Reader Company Flock Is Building a Massive People Lookup Tool, Leak Shows</a></h3>\n\t<div class=\"posted-by\">Joseph Cox</div>\n<p>Our privacy nightmare continues.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://ohhelloana.blog/in-defense-of-unpolished-websites/\">In defense of unpolished personal websites</a></h3>\n\t<div class=\"posted-by\">Ana Rodrigues</div>\n<p>Ana articulates a lot of how I feel about how I play around and work on my site.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-18T15:54:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/122/",
      "url": "https://kpwags.com/reading-log/122/",
      "title": "Reading Log - May 12, 2025 (#122)",
      "content_html": "\n\t\t<p>A thoughtful quote on HTML, the Trump Administration's neverending quest to use the least secure unapproved communication platform, thoughts on strength training and general health, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://robbowen.digital/wrote-about/html-is-like-a-camera/\">HTML is Like a Camera</a> - <em>Robb Owen</em></li>\n<li><a href=\"https://frontendmasters.com/blog/seeking-an-answer-why-cant-html-alone-do-includes/\">Seeking an Answer: Why can’t HTML alone do includes?</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/the-signal-clone-the-trump-admin-uses-was-hacked/\">The Signal Clone the Trump Admin Uses Was Hacked</a> - <em>Joseph Cox &amp; Micah Lee</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/05/08/nx-s1-5377615/weight-lifting-women-strength-training-running\">How one writer quit dieting and discovered her strength through weightlifting</a> - <em>Mara Gordon</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.economist.com/podcasts/2025/05/08/will-the-reign-of-the-dollar-come-to-an-end\">The Economist Money Talks: Will the reign of the dollar come to an end?</a></li>\n<li><a href=\"https://unhandledexceptionpodcast.com/posts/0070-namingthingsishard/\">Unhandled Exception Podcast: Naming things is hard! With Nick Cosentino</a></li>\n<li><a href=\"https://changelog.com/jsparty/336\">JS Party Podcast: When 3rd party JavaScript attacks</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Volbeat - Still Counting</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/aXhjp85UNJI\" title=\"Volbeat - Still Counting\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-12T22:31:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/28-slightly-rude-notes-on-writing/",
      "url": "https://kpwags.com/notes/28-slightly-rude-notes-on-writing/",
      "title": "28 Slightly Rude Notes on Writing",
      "content_html": "\n\t\t<blockquote>\n<p>I worked in the Writing Center in college, and whenever a student came in with an essay, we were supposed to make sure it had two things: an argument (“thesis”) and a reason to make that argument (“motive”). Everybody understood what a “thesis” is, whether or not they actually had one. But nobody understood “motive”. If I asked a student why they wrote the essay in front of them, they’d look at me funny. “Because I had to,” they’d say.</p>\n<p>Most writing is bad because it’s missing a motive. It feels dead because it hasn’t found its reason to live. You can’t accomplish a goal without having one in the first place—writing without a motive is like declaring war on no one in particular.</p>\n</blockquote>\n<blockquote>\n<p>This is why it’s very difficult to teach people how to write, because first you have to teach them how to care. Or, really, you have to show them how to <em>channel</em> their caring, because they already care a lot, but they don’t know how to turn that into words, or they don’t see why they should.</p>\n<p>Instead, we rob students of their reason for writing by <em>giving</em> it to them. “Write 500 words about the causes of the Civil War, because I said so.” It’s like forcing someone to do a bunch of jumping jacks in the hopes that they’ll develop an intrinsic desire to do more jumping jacks. But that’s not what will happen. They’ll simply learn that jumping jacks are a punishment, and they’ll try to avoid them in the future.</p>\n</blockquote>\n<p>I wonder how much better writers some might be if they had chances to write more about something they want to. I don't remember many chances in school for open writing. Being able to write well is an important skill even for non-writing professions.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-11T15:37:08Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/49/",
      "url": "https://kpwags.com/week-note/49/",
      "title": "Week Notes for May 4 - 10 (#49)",
      "content_html": "\n\t\t<p>My week notes for the week of May 4 through May 10.</p>\n<h2>Notes</h2>\n<h3>Chuck Wendig and Clay McLeod Chapman</h3>\n<p>On Wednesday night, I went to the <a href=\"https://doylestownbookshop.com/\">Doylestown Bookshop</a> for an event with Chuck Wendig &amp; Clay McLeod Chapman for Chuck's new book <a href=\"https://doylestownbookshop.com/book/9780593156568\">The Staircase in the Woods</a>. It was an interesting event and the two authors were funny and insightful. I walked out with signed books from both.</p>\n<h3>Weird Week for Exercise</h3>\n<p>I struggled to really get my normal exercise in this week. It was just a weird week with hockey 3 nights, the book signing, and an oddly timed haircut. I've been trying to get into a rhythm with lifting and running, and currently failing.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://robbowen.digital/wrote-about/html-is-like-a-camera/\">HTML Is Like A Camera</a></h3>\n\t<div class=\"posted-by\">Robb Owen</div>\n<p>An relevant quote for web development.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-11T15:29:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/joseph-cox-dark-wire/",
      "url": "https://kpwags.com/books/joseph-cox-dark-wire/",
      "title": "Book Notes for Dark Wire: The Incredible True Story of the Largest Sting Operation Ever",
      "content_html": "\n\t\t<p>This was a fantastic dive into the history of the encrypted phone market. The book goes through the history of the previous encrypted phones like Phantom Secure, EncroChat, and SkyPhones and how those companies got charged, often with their founders facing criminal charges for intentionally supporting organized crime.</p>\n<p>This all led to the creation of the primary focus of the book and the events that culminated in the creation of ANOM, the encrypted phone provider that was actually run by the FBI.</p>\n<p>Joseph Cox does a good job digging into the characters involved on both sides of the phones; the criminals running their drug and organized crime empires, and the police organizations trying to shut them down. The way he tells the story is captivating and informative and in many cases feels like an old war movie with spies spying on spies. In reality, it kind of was.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/121/",
      "url": "https://kpwags.com/reading-log/121/",
      "title": "Reading Log - May 5, 2025 (#121)",
      "content_html": "\n\t\t<p>Skipped last week due to little content. This week, 2 good presentations, news from Bethesda and Skyblivion and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.frontendjoy.com/p/how-i-reduced-my-react-bundle-size-by-30-with-real-examples\">How I Reduced My React Bundle Size by 30%</a> - <em>Ndeye Fatou Diop</em></li>\n<li><a href=\"https://ishadeed.com/article/css-grid-area/\">CSS Grid Areas</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/backwards-compat-in-web-but-not-its-tools/\">Backwards Compatibility in the Web, but Not Its Tools</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://chriscoyier.net/2024/11/30/designing-dx-keynote-20-min/\">Designing DX Keynote</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://youtube.com/watch?v=EZ05e7EMOLM\">TDD, Where Did it All Go Wrong</a> - <em>Ian Cooper</em></li>\n<li><a href=\"https://blog.pragmaticengineer.com/tech-hiring-is-this-an-inflection-point/\">Tech hiring: is this an inflection point?</a> - <em>Gergely Orosz</em></li>\n<li><a href=\"https://philiplaine.com/posts/getting-forked-by-microsoft/\">Getting Forked by Microsoft</a> - <em>Philip Laine</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://idiallo.com/blog/zipbomb-protection\">I use Zip Bombs to Protect my Server</a> - <em>Ibrahim Diallo</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/army-will-seek-right-to-repair-clauses-in-all-its-contracts/\">Army Will Seek Right to Repair Clauses in All Its Contracts</a> - <em>Matthew Gault</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/05/02/even-better-bethesda-gives-full-throat-endorsement-of-skyblivion/\">Even Better: Bethesda Gives Full Throat Endorsement Of ‘Skyblivion’</a> - <em>Timothy Geigner</em></li>\n<li><a href=\"https://arstechnica.com/gaming/2025/04/you-can-play-the-unreal-powered-the-elder-scrolls-iv-oblivion-remaster-today/\">You can play the Unreal-powered The Elder Scrolls IV: Oblivion remaster today</a> - <em>Samuel Axon</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.techfreedom.org/episodes/404-the-worst-possible-moment-to-break-encryption\">TechFreedom Tech Policy Podcast: The Worst Possible Moment to Break Encryption</a></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.404media.co/how-404-media-is-navigating-economic-headwinds/\">How 404 Media Is Navigating 'Economic Headwinds'</a> - <em>404 Media</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/05/02/texas-bookstores-push-back-against-bill-that-would-allow-them-to-be-sued-over-harmful-content/\">Texas Bookstores Push Back Against Bill That Would Allow Them To Be Sued Over ‘Harmful’ Content</a> - <em>Tim Cushing</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.experimental-history.com/p/28-slightly-rude-notes-on-writing\">28 slightly rude notes on writing</a> - <em>Adam Mastroianni</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - Running in the Roar of the Wind</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/RqfkmvzS2lw\" title=\"The Menzingers - Running in the Roar of the Wind\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-05T22:17:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/05/04/april-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/05/04/april-2025-check-in/",
      "title": "April 2025 Check-In",
      "content_html": "\n\t\t<p>Whelp, we're now 1/3 of the way through the year, with the fascist asshole running the country into the ground, I'm surprised it's going as fast as it has been.</p>\n<div class=\"centered\">\n<picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/PSSW5HmjVd-600.webp 600w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/PSSW5HmjVd-600.gif 600w\" /><img alt=\"The cover of the April 26th edition of The Economist showing an injured eagle with the text 'Only 1,361 days to go'\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/PSSW5HmjVd-600.jpeg\" width=\"600\" height=\"801\" /></picture>\n</div>\n<div class=\"image-credit\">Credit <a href=\"https://theeconomist.com/\">The Economist</a></div>\n<p>The Economist's cover is apt.</p>\n<h2>Running Distance Increasing</h2>\n<p>As I've mentioned, one of the things I want to do is run longer distances. This past month, the distance of my average run was almost 5 miles (it had been hanging out between 3-3.5 miles). I was able to hit 9 miles on one run. My only blocker lately has been the weather. The spring rain has not made running particularly appealing.</p>\n<h2>Enjoying Our Front Porch</h2>\n<p>The weather has been nice enough temperature to be able to enjoy our front porch. I took advantage plenty, sitting outside with a glass of whiskey writing and/or reading is a great way to unwind in the evenings.</p>\n<h2>Digging Back Into Blazor</h2>\n<p>Over the last year or two I worked in Blazor both at home and for work. I have a side project I've been slacking off on that I dug back out. I think I'm gonna continue to delve into it and see if I can't increase my knowledge of the platform, particularly the WASM side of things as I've primarily worked with Blazor Server.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>10</span> runs - <span>50.58</span> miles</li>\n<li><strong>Walking:</strong> <span>28</span> walks - <span>35.04</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>2</span> sessions - <span>40,557</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/operation-paperclip-the-secret-intelligence-program-that-brought-nazi-scientists-to-america-annie-jacobsen/16438943\">Operation Paperclip</a> by Annie Jacobsen</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/ancillary-justice-ann-leckie/110863?ean=9780316565172\">Ancillary Justice</a> by Anne Leckie</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/where-the-axe-is-buried-ray-nayler/21424983\">Where the Axe is Buried</a> by Ray Nayler</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/thinking-in-systems-international-bestseller-donella-meadows/8755142\">Thinking in Systems</a> by Donella Meadows</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/winning-fixes-everything-how-baseball-s-brightest-minds-created-sports-biggest-mess-evan-drellich/16712231\">Winning Fixes Everything: How Baseball's Brightest Minds Created Sports' Biggest Mess</a> by Evan Drellich</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/murder-the-truth-threats-intimidation-and-a-secret-campaign-to-protect-the-powerful-david-enrich/21543213?ean=9780063372900&amp;next=t\">Murder the Truth: Fear, the First Amendment, and a Secret Campaign to Protect the Powerful</a> by David Enrich</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-sirens-call-how-attention-became-the-world-s-most-endangered-resource-chris-hayes/21744711\">The Sirens' Call: How Attention Became the World's Most Endangered Resource</a> by Chris Hayes</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/ancillary-sword-ann-leckie/110869?ean=9780316565196\">Ancillary Sword</a> by Ann Leckie</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/fahrenheit-182-a-memoir-dan-ozzi/21810473\">Farenheit 182: A Memoir</a> by Mark Hoppus &amp; Dan Ozzi</li>\n<li>Started <a href=\"https://bookshop.org/p/books/dark-wire-the-incredible-true-story-of-the-largest-sting-operation-in-history-joseph-cox/20664624\">Dark Wire: The Incredible True Story of the Largest Sting Operation Ever</a> by Joseph Cox</li>\n<li>Started <a href=\"https://bookshop.org/p/books/more-money-than-god-hedge-funds-and-the-making-of-a-new-elite-sebastian-mallaby/11728548\">More Money Than God: Hedge Funds and the Making of a New Elite</a> by Sebastian Mallaby</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/118/\">April 7 (#118)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/119/\">April 14 (#119)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/120/\">April 21 (#120)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/posts/2025/04/06/week-notes/\">March 30 - April 5</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/04/13/week-notes/\">April 6 - 12</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/04/20/week-notes/\">April 13 - 19</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/04/27/week-notes/\">April 20 - 26</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/04/05/on-tanking/\">tanking in sports</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/04/15/hockey-shootouts/\">hockey shootouts</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/04/15/fandom/\">sports fandom</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/04/24/writing-a-novel-is-hard/\">how hard it is to finish a novel</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">WoW: Classic</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0092455/\">Star Trek: The Next Generation</a></li>\n<li>Started Season 2 of <a href=\"https://m.imdb.com/title/tt3581920/\">The Last of Us</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt9253284/\">Andor</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt36415832/\">Oklahoma City Bombing: One Day in America</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt20215234/\">Conclave</a></li>\n<li><a href=\"https://www.imdb.com/title/tt6710474/\">Everything Everywhere All At Once</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-04T23:41:37Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/48/",
      "url": "https://kpwags.com/week-note/48/",
      "title": "Week Notes for April 27 - May 3 (#48)",
      "content_html": "\n\t\t<p>My week notes for the week of April 27 through May 3.</p>\n<h2>Notes</h2>\n<h3>Spring Cleaning, Outdoor Edition</h3>\n<p>Every spring since my wife and I bought our house there are various tasks that need doing outside. Some I do every year like spreading mulch around our little flower gardens. Others I mean and want to do, but never get around to it. This week I've started some of the tasks. It definitely makes the house looks nicer from the curb, but my allergies aren't happy with me.</p>\n<h3>Too Early to Be this Hot</h3>\n<p>Friday &amp; Saturday had temperatures in the 80s. It's barely May so I'm not ready for this. I want my springtime weather, allergies and all.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.techdirt.com/2025/05/02/even-better-bethesda-gives-full-throat-endorsement-of-skyblivion/\">Even Better: Bethesda Gives Full Throat Endorsement Of ‘Skyblivion’</a></h3>\n\t<div class=\"posted-by\">Timothy Geigner</div>\n<p>I appreciate when companies support this kind of development. Fans clearly love their games enough to pour the effort into them, It's nice to see companies support that rather than tie up the courts.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://ishadeed.com/article/css-grid-area/\">CSS Grid Areas</a></h3>\n\t<div class=\"posted-by\">Ahmad Shadeed</div>\n<p>A great write-up and tutorial for using CSS grid areas.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-04T19:51:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/05/02/losing-polygon-sucks/",
      "url": "https://kpwags.com/posts/2025/05/02/losing-polygon-sucks/",
      "title": "Losing Polygon Sucks",
      "content_html": "\n\t\t<p>The other day it was announced that the popular gaming and entertainment site <a href=\"https://www.theverge.com/news/659575/polygon-vox-media-sold-valnet-gamerant\">Polygon was sold off</a> and that many of the site's writers were laid off. It was one of my go-to sites for video game news and I suspect that given the loss of staff, will not be the same.</p>\n<p>This <a href=\"https://haunts.neocities.org/polygon\">site</a> looks to be spun up to show some alternatives. Might have to give them a look-see. I don't game as much as I used to, but I still like seeing what's coming out and what's going on in the gaming community.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-05-02T22:50:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/47/",
      "url": "https://kpwags.com/week-note/47/",
      "title": "Week Notes for April 20 - 26 (#47)",
      "content_html": "\n\t\t<p>My week notes for the week of April 20 through April 26.</p>\n<h2>Notes</h2>\n<h3>Oblivion Remastered</h3>\n<p>This week Bethesda announced, and then released a remaster of The Elder Scrolls IV: Oblivion. I didn't play this nearly as much as Skyrim, but figured I'd been considering a play through of Skyrim so I'd start with Oblivion. Sadly, my video card seems to be struggling to play it. I'm going to have to start looking into a replacement it seems as to be fair, my video card is 5+ years old (probably closer to 7-8). I'm looking for a solid card, but not top of the line. Suggestions are welcome.</p>\n<h3>Seasonal Allergy Hell</h3>\n<p>I have seasonal allergies, and right now it's prime allergy season. I'm not a fan. Pollen, pollen everywhere. It's also been made less pleasant by the fact that it's now lawn mowing season. I had to mow the lawn on Wednesday which kicked up even more pollen. It just sucks because I love being outside in weather like we've been having.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://podcasts.apple.com/us/podcast/otherwise-objectionable/id1798723661\">Otherwise Objectionable Podcast</a></h3>\n\t<div class=\"posted-by\">Mike Masnick</div>\n<p>An interesting podcast series about the history of Section 230 and why it's so important for the internet.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-27T19:55:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/04/24/writing-a-novel-is-hard/",
      "url": "https://kpwags.com/posts/2025/04/24/writing-a-novel-is-hard/",
      "title": "Writing a Novel is Hard",
      "content_html": "\n\t\t<p>Last year, one of my goals or aspirations was to finish the novel I had started. Needless to say, while I most certainly made progress on it, I didn’t even finish a first draft. To state something that should be beyond obvious, writing a book is hard!</p>\n<p>I’m around 70,000 words into what was originally going to be a short story, but has since morphed into a novel. My issue is that I’m not sure where I want to go with it. I had a general outline of the story, but it’s since been tweaked and adjusted as I‘ve written and developed more of the plot. But now I’m questioning if my original ideas are believable and how to get the reader to them.</p>\n<p>It’s kind of a modern science fiction story so I guess it doesn’t have to be completely in line with belief, but I’m struggling to figure out how I want things to go.</p>\n<p>Maybe I just need to stop overthinking it and just go with it and write the progression no matter how unbelievable it feels. Words to paper is often what I hear. Maybe that's just what I need to do. Finish the story, and revisit it if it feels to &quot;crazy&quot;.</p>\n<p>Writing is hard.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-24T23:46:55Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/120/",
      "url": "https://kpwags.com/reading-log/120/",
      "title": "Reading Log - April 21, 2025 (#120)",
      "content_html": "\n\t\t<p>Another light week, but Safari now supports <code>text-wrap: pretty</code>, some thoughts about dark mode and accessibility, and a good discussion on <em>The Anxious Generation</em> by the <em>If Books Could Kill</em> podcast.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.planetgeek.ch/2025/04/09/tests-are-documentation-or-are-they/\">Tests are Documentation, or Are They?</a> - <em>Urs Enzler</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://thirty-five.com/overengineered-anchoring\">Overengineered Anchor Links</a> - <em>Mats Erdkamp</em></li>\n<li><a href=\"https://webkit.org/blog/16547/better-typography-with-text-wrap-pretty/\">Better typography with text-wrap pretty</a> - <em>Jen Simmons</em></li>\n<li><a href=\"https://css-tricks.com/next-level-css-styling-for-cursors/\">Next Level CSS Styling for Cursors</a> - <em>Declan Chidlow</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://endler.dev/2025/best-programmers/\">The Best Programmers I Know</a> - <em>Matthias Endler</em></li>\n<li><a href=\"https://piccalil.li/blog/how-to-write-error-messages-that-actually-help-users-rather-than-frustrate-them/\">How to write error messages that actually help users rather than frustrate them</a> - <em>Amy Hupe</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2025/04/inclusive-dark-mode-designing-accessible-dark-themes/\">Inclusive Dark Mode: Designing Accessible Dark Themes For All Users</a> - <em>Alex Williams</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcasts.apple.com/us/podcast/the-anxious-generation/id1651876897?i=1000664706439\">If Books Could Kill: The Anxious Generation</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Sum 41 - There's No Solution</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/RoUQofCeSTo\" title=\"There's No Solution\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-21T21:06:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-blissful-zen-of-a-good-side-project/",
      "url": "https://kpwags.com/notes/the-blissful-zen-of-a-good-side-project/",
      "title": "The Blissful Zen of a Good Side Project",
      "content_html": "\n\t\t<blockquote>\n<p><strong>I think we exist to bring new things into existence</strong>. If you ask me, to the extent there <em>is</em> a meaning of life, that’s it. We exist to create. It lights us up in a way nothing else does, putting something new into our world—and in doing so, fundamentally changing it, in whatever way, however big or small.</p>\n<p><em>What</em> you create, and <em>how</em> you do it, is entirely up to you. That’s the beauty of it.</p>\n</blockquote>\n<p>I love side projects as a tool to help improve my skills, learn something new, and build a tool that might help me solve a problem I'm having. Even if no fully fleshed product ultimately comes out in the end, the creating and learning is fulfilling.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-20T17:45:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/46/",
      "url": "https://kpwags.com/week-note/46/",
      "title": "Week Notes for April 13 - 19 (#46)",
      "content_html": "\n\t\t<p>My week notes for the week of April 13 through April 19.</p>\n<h2>Notes</h2>\n<h3>Revisiting the 2017 Houston Astros Cheating Scandal</h3>\n<p>Over the last week, I’ve been listening to the audiobook of <a href=\"https://bookshop.org/p/books/winning-fixes-everything-how-baseball-s-brightest-minds-created-sports-biggest-mess-evan-drellich/16712231\">Winning Fixes Everything</a> by Evan Drellich.</p>\n<p>As a baseball fan, it’s been an interesting listen as it goes over the different analytical methods the Astros used to try to improve their team. This wouldn’t have been all that newsworthy, except they took it a step further and cheated in 2017 by using a TV in the dugout hallway and a trash can to steal signs and alert batters what pitch was coming in real time.</p>\n<p>The book has been interesting by filling in the gaps of my knowledge of what all went down and the fallout from the scandal.</p>\n<h3>Beer League Playoffs</h3>\n<p>The hockey team I play in net on made the playoffs and we won the semi-finals game 3-2 <a href=\"https://kpwags.com/posts/2025/04/15/hockey-shootouts/\">in the shootout</a>. It was a little nerve-wracking but also exciting. We have the finals Monday.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://endler.dev/2025/best-programmers/\">The Best Programmers I Know</a></h3>\n\t<div class=\"posted-by\">Matthias Endler</div>\n<p>A good write-up of things that you can do as a developer to improve. Some good advice and thoughts on what makes good developers regardless of tech stack used.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-20T17:43:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/david-enrich-murder-the-truth/",
      "url": "https://kpwags.com/books/david-enrich-murder-the-truth/",
      "title": "Book Notes for Murder the Truth: Fear, the First Amendment, and the Secret Campaign to Protect the Powerful",
      "content_html": "\n\t\t<p>I found out about this book from an episode of the <a href=\"https://www.techdirt.com/2025/03/11/techdirt-podcast-episode-410-murder-the-truth/\">Techdirt Podcast</a>. I had heard about <a href=\"https://en.wikipedia.org/wiki/New_York_Times_Co._v._Sullivan\">NYT v Sullivan</a> and knew it was important with regards to free speech and journalism. This book does a good job talking about why the Sullivan decision is so important to the freedoms we enjoy in America, especially the freedom of the press.</p>\n<p>The book goes on to describe the different attacks the rich and powerful are waging in the court systems to try to get Sullivan either overturned or weakened. From Donald Trump to rich and powerful coal executives, they don't like the fact that journalists and news outlets can dig up dirt and investigate what they're up to.</p>\n<p>This should not be a partisan issue either as it protects both right and left-leaning journalists investigating those on either side of the political spectrum. It's an interesting and informative read about what's at stake with regards to holding the rich and powerful to account.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/evan-drellich-winning-fixes-everything/",
      "url": "https://kpwags.com/books/evan-drellich-winning-fixes-everything/",
      "title": "Book Notes for Winning Fixes Everything: How Baseball&#39;s Brightest Minds Created Sports&#39; Biggest Mess",
      "content_html": "\n\t\t<p>I remember when I first heard about the Astros cheating scheme. As a baseball fan, I was surprised at how brazen it was. I knew teams would often straddle the line and skirt the rules any way they could to gain an advantage, but didn't expect something so bold and blatantly illegal.</p>\n<p>As much as I borrowed this book thinking it would be focused on the cheating scandal, the scandal itself was not a major feature. It was not a disappointment though. The book goes through the early history of Jim Crane’s purchase of the Astros and Jeff Luhnow’s never-ending dive into numbers and analytics building the team and how it rubbed a lot of people around baseball the wrong way sometimes.</p>\n<p>The book did a good job going into the conflicts and cut throat culture Jim Crane and Jeff Luhnow cultivated in the Astros organization, all in the name of winning. The culture even went beyond 2017, after they had won the (now tainted) World Series.</p>\n<p>This book provided an interesting look inside an MLB club and how a team on the cutting edge of technology and stats tried to find every edge they could think of to win.</p>\n<p>It's still disappointing though how many of the organization, both players, management and ownership don't feel like they did anything wrong or that they're &quot;not guilty&quot;. I'm sure other teams have crossed lines, and if/when they're caught, they should face punishment as well. But justifying cheating by saying &quot;others do it too!&quot; feels like a cop-out, and it definitely sends the wrong message.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-problem-with-vibe-coding/",
      "url": "https://kpwags.com/notes/the-problem-with-vibe-coding/",
      "title": "The Problem with “Vibe Coding”",
      "content_html": "\n\t\t<blockquote>\n<p>Probably the single most important lesson I’ve learned in my career, the thing that I would argue is the hallmark of “experience”, is understanding just how much work it takes to turn a working <em>program</em> into a viable <em>product</em>. It’s why developer estimates are so notoriously optimistic - and why experienced developers are so notoriously cynical.</p>\n</blockquote>\n<p>Experience teaches so much.</p>\n<blockquote>\n<p>One of the genuinely positive things about tools like Copilot and ChatGPT is that they empower people with minimal development experience to create their own programs. Little programs that do useful things - and that’s awesome. More power to the users.</p>\n<p>But that’s not product development, it’s programming. They aren’t the same thing. Not even close.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-16T21:44:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/04/15/fandom/",
      "url": "https://kpwags.com/posts/2025/04/15/fandom/",
      "title": "Fandom",
      "content_html": "\n\t\t<p>I'm a huge Philadelphia Phillies fan and a baseball fan. Over the years I've collected a collection of Phillies fitted caps of various different styles. One of the caps I bought was a modern replica of a 1929 Philadelphia Athletics hat complete with World Series patch on the side of it. It got me thinking a bit about how we choose what team to follow and become a fan of.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/HaPfKanAT--1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/HaPfKanAT--1440.gif 1440w\" /><img alt=\"Me wearing a gray Philadelphia Athletics cap with a blue patch on the side\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/HaPfKanAT--1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p>I'm a Philadelphia sports fan because I grew up just outside Philadelphia. For me and many others around the world, we often become fans of the hometown team, or the team in closest proximity. For me, that was Philadelphia. Others have different reasons for who they root for.</p>\n<p>Until 1954, Philadelphia supported 2 Major League Baseball teams. The Phillies formed in 1883, the Athletics formed in 1901. In 1954, the Athletics moved to Kansas City, and eventually ended up in Oakland, and now Sacramento. By the time I was born and started getting into sports, Philadelphia only had 1 baseball team, so it was obvious who I was going to root for. But if the Athletics were still in Philly, would I be a Phillies fan...or would I have latched on to the A's.</p>\n<p>I'll never know the answer, nor does it really matter at the end of the day. The hat just made me think about the what-ifs.</p>\n<p>For fans with multiple teams in a city, like the Yankees/Mets, White Sox/Cubs, NY Jets/NY Giants...what made you choose the specific team in your city? There aren't really wrong answers, I'm just kind of curious.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-15T23:57:32Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/04/15/hockey-shootouts/",
      "url": "https://kpwags.com/posts/2025/04/15/hockey-shootouts/",
      "title": "Hockey Shootouts",
      "content_html": "\n\t\t<p>In the NHL, in the regular season, if a game is still tied after the end of the overtime period, the game is decided by a best of 3 shootout where a skater gets a free shot on the goalie. It then moves to a sudden death shootout. I’m not a fan of them. It feels gimmicky and removes the team aspect of the game. In my beer league, slightly different story.</p>\n<p>Last night was round one of the playoffs for the league I play goalie in. My team played well, but ended the game tied 2-2. In the regular season, this would have been the end of the game. We’d finish with a tie and would each receive a point in the league standings. With the playoffs, someone <em>has</em> to win.</p>\n<p>In the NHL in the playoffs, there’s no shootout. It’s replaced by 20 minute sudden death overtime periods until a team scores a goal. This, in my opinion, is some of the best and most fun hockey to watch.</p>\n<p>Unlike the NHL, the rink I play at is constrained by time and the schedule. The staff at the rink can’t stay forever, and there could be games on the rink after our game. Our game has to end relatively quickly. This means that the games that can’t end in ties, move to the shootout.</p>\n<p>As a goalie, shootouts are nerve-wracking. It’s a one-on-one matchup between myself and the shooter. He gets to skate up the ice undefended to make whatever move they want to try to put the puck past me and into the net. You don’t want to bite too early, but you can’t wait too long to react either.</p>\n<p>Our league goes with a best of 5 shootout format and despite the heart-pounding pressure, I faced 4 shooters, and saved all 4 shots (we scored twice, so their 5th shot never happened). We walked away with a win in what was a fun, evenly-matched game.</p>\n<p>So while I still think the shootout is a gimmick and removes the team aspect to the game, I can't deny that they can most definitely be exciting when you're the one on the ice.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-15T23:57:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/119/",
      "url": "https://kpwags.com/reading-log/119/",
      "title": "Reading Log - April 14, 2025 (#119)",
      "content_html": "\n\t\t<p>Very light this week. Some thoughts on the tariffs, some popular .NET packages going commercial, and web resilience.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.milanjovanovic.tech/blog/mediatr-and-masstransit-going-commercial-what-this-means-for-you\">MediatR and MassTransit Going Commercial: What This Means For You</a> - <em>Milan Jovanović</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2025/ductility/\">Ductility on the Web</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/story/2025/04/09/trumps-tariffs-wont-reshore-all-manufacturing\">Despite reshoring goals, much of manufacturing would be unmoved by tariffs</a> - <em>Sabri Ben-Achour</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Here You Are (Acoustic)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Ye9JeAjB6XM\" title=\"Spanish Love Songs - Here You Are (Acoustic)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-14T22:16:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/45/",
      "url": "https://kpwags.com/week-note/45/",
      "title": "Week Notes for April 6 - 12 (#45)",
      "content_html": "\n\t\t<p>My week notes for the week of April 6 through April 12.</p>\n<h2>Notes</h2>\n<h3>Site Design Tweaks</h3>\n<p>I’ve been tinkering with the design of my site over the last few weeks. Nothing major, but I was able to finish up and get it out the door. I doubt it will be the last time I tweak things.</p>\n<h3>Back on Bluesky and Mastodon</h3>\n<p>I’m back on Bluesky &amp; Mastodon. I’ve set time limits on my phone to keep me honest, so I’m not sure how active I’ll be, but I’m back I guess.</p>\n<h3>My Poor Legs</h3>\n<p>With all the running I’ve been doing, I’ve been neglecting strength training. On Tuesday I did my first strength training session in over a month, and it was a legs day. I was feeling fine the next day so I went for a 5 mile run. Thursday and Friday however, my legs caught up with me and are none too happy. I’ll have to make sure to keep mixing in some strength training to limit the DOMS.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.milanjovanovic.tech/blog/mediatr-and-masstransit-going-commercial-what-this-means-for-you\">MediatR and MassTransit Going Commercial: What This Means For You</a></h3>\n\t<div class=\"posted-by\">Milan Jovanović</div>\n<p>Maintaining open source libraries and tools is a hard and thankless job. It’s important to remember that there are people behind them putting their time and effort into maintaining and supporting them.\nI can’t really be all that mad about them wanting to be compensated for their hard work. <a href=\"https://github.com/jbogard/MediatR\">MediatR</a>, <a href=\"https://github.com/AutoMapper/AutoMapper\">AutoMapper</a>, &amp;\n<a href=\"https://github.com/MassTransit/MassTransit\">MassTransit</a> are huge .NET libraries. It’s only fair businesses chip in.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.jim-nielsen.com/2025/ductility/\">Ductility on the Web</a></h3>\n\t<div class=\"posted-by\">Jim Nielsen</div>\n<p>A good little post about resiliency in software development.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-13T16:56:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/04/08/march-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/04/08/march-2025-check-in/",
      "title": "March 2025 Check-In",
      "content_html": "\n\t\t<p>March was a mostly quiet month.</p>\n<h2>Cory Doctorow</h2>\n<p>I read a lot of Cory Doctorow. Both his <a href=\"https://craphound.com/shop/\">books</a> and his <a href=\"https://pluralistic.net/\">blog</a>. I appreciate his writing and was able to catch him when he stopped by <a href=\"https://doylestownbookshop.com/\">The Doylestown Bookshop</a>. It was an interesting event to hear his thoughts on the current political climate and antitrust, as well as the Internet Archive and Wikipedia.</p>\n<h2>Tess in a Routine</h2>\n<p>We’ve had <a href=\"https://kpwags.com/posts/2025/01/19/week-notes/\">Tess now for two and a half months</a>. We’re getting her into a good routine and she seems to be better adjusting to her new home. It’s caused me to be walking a lot more as we’ve been trying to get her out on 3 walks a day. They’re not always long, but we’re trying to help her burn off some of that puppy energy. She’s walking a lot better now too.</p>\n<h2>Writing More</h2>\n<p>The weather has been turning to spring lately and I’ve been taking advantage of that by sitting out on the porch in the evenings. I’ve been spending that time writing more and have made some more progress on my novel as well as some blog posts.</p>\n<h2>Running</h2>\n<p>For the last several years, I’ve been trying and failing to start running distance again. I’ve been taking advantage of the nice weather to hopefully start running more and work up to longer runs. I was able to hit a little over 8 miles at the end of the month so hopefully I can keep it up and the weather will cooperate.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>15</span> runs - <span>64.04</span> miles</li>\n<li><strong>Walking:</strong> <span>30</span> walks - <span>51.73</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>4</span> sessions - <span>87,484</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-splendid-and-the-vile-a-saga-of-churchill-family-and-defiance-during-the-blitz-erik-larson/8630726?ean=9780385348737\">The Splending and the Vile</a> by Erik Larson</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/when-mckinsey-comes-to-town-the-hidden-influence-of-the-world-s-most-powerful-consulting-firm-michael-forsythe/18369941\">When McKinsey Comes to Town </a> by Walt Bogdanich &amp; Michael Forsythe</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/picks-and-shovels-a-martin-hench-novel-cory-doctorow/21413549\">Picks and Shovels</a> by Cory Doctorow</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/madoff-the-final-word-richard-behar/20807026\">Madoff</a> by Richard Behar</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/autocracy-inc-the-dictators-who-want-to-run-the-world-anne-applebaum/21057810\">Autocracy, Inc.</a> by Anne Applebaum</li>\n<li>Finished <a href=\"https://www.penguinrandomhouse.com/books/737290/character-limit-by-kate-conger-and-ryan-mac/\">Character Limit</a> by Kate Conger &amp; Ryan Mac</li>\n<li>Started <a href=\"https://bookshop.org/p/books/operation-paperclip-the-secret-intelligence-program-that-brought-nazi-scientists-to-america-annie-jacobsen/16438943\">Operation Paperclip</a> by Annie Jacobsen</li>\n<li>Started <a href=\"https://bookshop.org/p/books/ancillary-justice-ann-leckie/110863?ean=9780316565172\">Ancillary Justice</a> by Anne Leckie</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/113/\">March 3 (#113)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/114/\">March 10 (#114)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/115/\">March 17 (#115)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/116/\">March 24 (#116)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/117/\">March 31 (#117)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/posts/2025/03/02/week-notes/\">February 23 - March 1</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/03/09/week-notes/\">March 2 - 8</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/03/16/week-notes/\">March 9 - 15</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/03/23/week-notes/\">March 16 - 22</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/03/30/week-notes/\">March 23 - 29</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/03/03/thinking-about-tv-and-movie-adaptations/\">movie and TV adaptations of books and video games</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/03/07/fantastic-piece-by-ethan-marcotte-on-18f-and-holding-strong-to-principles/\">Ethan Marcotte's decision to leave 18F</a></li>\n<li>Shared <a href=\"https://kpwags.com/posts/2025/03/07/custom-css-functions/\">a new proposal for custom CSS functions</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/03/17/still-off-social-media/\">my still off social media</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/03/19/the-pandemic-5-years-later/\">the five years since the start of the pandemic</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/03/27/data-models-and-tech-debt/\">data models and tech debt</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/03/28/tackling-home-projects-is-so-fulfilling/\">the satisfaction of completing home projects</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/03/30/hope-springs-eternal-mlb-opening-day-edition/\">always hoping for a good baseball season from the Phillies</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Playing <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">WoW: Classic</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-08T16:30:19Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/118/",
      "url": "https://kpwags.com/reading-log/118/",
      "title": "Reading Log - April 7, 2025 (#118)",
      "content_html": "\n\t\t<p>Some scary moments revealed about the Boeing Starliner flight, fluid CSS, a history of markdown and more.</p>\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://chenhuijing.com/blog/the-case-for-old-school-css/#%F0%9F%8E%99\">The case for “old school” CSS</a> - <em>Chen Hui Jing</em></li>\n<li><a href=\"https://beeps.website/blog/2025-03-29-browser-choice-is-an-accessibility-consideration/\">Browser choice is an accessibility consideration</a> - <em>Beeps</em></li>\n<li><a href=\"https://webkit.org/blog/16587/item-flow-part-1-a-new-unified-concept-for-layout/\">Item Flow, Part 1: A new unified concept for layout</a> - <em>Jen Simmons, Saron Yitbarek, Elika Etemad &amp; Brandon Stewart</em></li>\n<li><a href=\"https://willybrauner.com/journal/a-fluid-css-methodology?ref=web-design-weekly.com\">A fluid CSS methodology</a> - <em>Willy Brauner</em></li>\n<li><a href=\"https://developer.chrome.com/blog/a-customizable-select\">The &lt;select&gt; element can now be customized with CSS</a> - <em>Adam Argyle</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/04/04/how-18f-transformed-government-technology-%e2%88%92-and-why-its-elimination-matters/\">How 18F Transformed Government Technology − And Why Its Elimination Matters</a> - <em>Kayla Schwoerer</em></li>\n<li><a href=\"https://heydonworks.com/article/poisoning-well/\">Poisoning Well</a> - <em>Heydon Pickering</em></li>\n<li><a href=\"https://www.theverge.com/news/642228/thunderbird-pro-thundermail-email-service\">Thunderbird email is going pro to better compete with Gmail</a> - <em>Umar Shakir</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2025/04/the-harrowing-story-of-what-flying-starliner-was-like-when-its-thrusters-failed/\">Starliner’s flight to the space station was far wilder than most of us thought</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.noahpinion.blog/p/trade-deficits-do-not-make-a-country\">Trade deficits do not make a country poorer</a> - <em>Noah Smith</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/04/02/1242229718/ai-mississippi-jobs-data-centers-virginia\">The Indicator: What $10 billion in data centers actually gets you</a></li>\n<li><a href=\"https://www.dancarlin.com/product/ep-30-so-you-say-you-want-a-revolution/\">Hardcore History Addendum: So, you say you want a revolution?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://ia.net/topics/markdown-and-the-slow-fade-of-the-formatting-fetish\">Markdown and the Slow Fade of the Formatting Fetish</a> - <em>The iA Team</em></li>\n<li><a href=\"https://nothingoriginalhere.com/posts/personal-blogs-are-the-best-i-love-yours-and-ill-try-and-tell-you-why\">Personal blogs are the best, I love yours and I’ll try and tell you why</a> - <em>Peter W</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Mercy Union - Layovers</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/yziB8YfoxS8\" title=\"Mercy Union - Layovers\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-07T19:02:21Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/44/",
      "url": "https://kpwags.com/week-note/44/",
      "title": "Week Notes for March 30 - April 5 (#44)",
      "content_html": "\n\t\t<p>My week notes for the week of March 30 through April 5.</p>\n<h2>Notes</h2>\n<p>It was a relatively quiet week for me.</p>\n<h2>Lots of Hockey</h2>\n<p>A couple weeks ago, the rink I play at lost power and our games were postponed. Well, this week they got rescheduled for Wednesday which meant that we had our normal Monday game, and then on Wednesday, our make-up game. The challenge presented to many though was that all of our games are (almost) always on Mondays. Wednesday many teams were short players, and of course goalies. That meant I had to play a double-header. I do it often enough not to mind as I enjoy playing, but was playing with shorter benches than normal. Either way, it was fun.</p>\n<h2>Enjoying the Nice Weather and Writing</h2>\n<p>The last week, despite some rain, had some nice temperatures. I took advantage of it and sat out on the porch and wrote. I wrote about <a href=\"https://kpwags.com/posts/2025/04/05/on-tanking/\">tanking and sports</a> as well as on my novel. I figure it’s only a matter of time until the weather becomes unbearable, so I’m going to enjoy our porch as much as possible.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://ia.net/topics/markdown-and-the-slow-fade-of-the-formatting-fetish\">Markdown and the Slow Fade of the Formatting Fetish</a></h3>\n\t<div class=\"posted-by\">The iA Team</div>\n<p>An interesting look back at the history of Microsoft Word and the rise of Markdown.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://webkit.org/blog/16587/item-flow-part-1-a-new-unified-concept-for-layout/\">Item Flow, Part 1: A new unified concept for layout</a></h3>\n\t<div class=\"posted-by\">Jen Simmons, Saron Yitbarek, Elika Etemad & Brandon Stewart</div>\n<p>A good write-up of what the WebKit team is working on with CSS Grid &amp; Masonry.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-06T15:55:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/04/05/on-tanking/",
      "url": "https://kpwags.com/posts/2025/04/05/on-tanking/",
      "title": "On Tanking",
      "content_html": "\n\t\t<p>I'm a Philadelphia sports fan. Through the good seasons, and the bad, I'm always cheering on the Philly teams. For the Phillies and Eagles, times have been great. Phillies are competitive and are playoff contenders. The Eagles just won the Super Bowl. For the Flyers and 76ers on the other hand...</p>\n<p>For the 4 major US sports, there's a draft every year with the worst teams drafting first (or near first). The NFL and MLB both have the draft order set with the team with the worst record the season before drafting first, and the champion drafting last. The NHL and NBA on the other hand hold a draft lottery where the worse your record, the better the chance of getting the first overall pick. Finishing in last place in the NHL or NBA doesn't guarantee you the top pick, but gives you the best chance of landing it. Either way though, you're getting a high draft pick.</p>\n<p>This leaves teams in a rather strange predicament. For some teams, finishing with the worst record possible is a viable strategy. The 76ers for example did it for several seasons during the whole <em>Trust the Process</em> phase several years ago and came away with 2 top picks in Ben Simmons and Joel Embiid (you can clearly make the argument that it didn't matter much as they still haven't even made it to the Eastern Conference Finals). Losing more games than you win can help teams get the higher draft picks that will hopefully help catapult them up the standings in future seasons.</p>\n<p>As a fan, I really don't know how to feel. On one hand, I hate to &quot;cheer&quot; for my team to lose. On the other hand, I want to see my teams go out and compete, be competitive, and win. Part of it all of course comes down to how general managers manage teams. But in many cases, the real game changers, the top stars of the sports end up signing contract extensions with their teams, leaving the other teams unable to sign the big names in free agency. That leaves the draft.</p>\n<p>The hope is always that your team is going to be able to land and use the draft pick to get the next Bryce Harper, Aaron Judge, Connor McDavid or Sydney Crosby. But in order to get the &quot;sure things&quot;, you need the top draft picks. That means you have the perverse incentive to lose.</p>\n<p>I look a my Philadelphia Flyers. They've missed the playoffs for the last several seasons. From competitive perspective, they're in the worst possible situation. They've generally played just well enough to be in the playoff hunt, but not good enough to actually <em>make</em> the playoffs. This means that they aren't in position to win the draft lottery, which means they're going to get a middle draft pick. The players available here are often very often future NHLers, but more often than not they're not the game changers needed to build a true Stanley Cup contender. Part of this is also the Flyers past management giving out some bad contracts that have challenged their ability to build the team within the salary cap, but not all of it.</p>\n<p>I don't really think it's in the different leagues' best interest to have team management decide to field teams that couldn't win a high school game. I don't think that's right. Sports are most fun to watch when you have two teams of similar capabilities facing off against each other.</p>\n<p>To be clear, all the players are athletes and I'm sure they're all out there doing their best to win and play at the top of their game. But when the team's general manager doesn't try to field a competitive team, individual players can only do so much.</p>\n<p>I muse about this because right now, the Flyers and 76ers are both putting some sad teams out there, losing far more than they are winning. The 76ers can chalk <em>some</em> of it to injury, but both teams are basically sucking it up on a nightly basis. I want to see them get better and improve. I want to enjoy watching their games again. I also want to see them legitimately become consistent playoff contenders, which might require their outlook to become darker before it gets brighter.</p>\n<p>I can't root for the Philly teams' opponents, but is hoping for losses to help get them in better position to improve future seasons rooting against them?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-04-05T00:01:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/117/",
      "url": "https://kpwags.com/reading-log/117/",
      "title": "Reading Log - March 31, 2025 (#117)",
      "content_html": "\n\t\t<p>A look at how to best structure CSS layouts, NASA moving forward with Artemis II, and more.</p>\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://ishadeed.com/article/css-relative-colors/\">CSS Relative Colors</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://developer.chrome.com/blog/carousels-with-css\">Carousels with CSS</a> - <em>Adam Argyle</em></li>\n<li><a href=\"https://alex.party/posts/2025-03-23-grid-first-flex-third/\">Grid First, Flex Third</a> - <em>Alex Riviere</em></li>\n<li><a href=\"https://piccalil.li/blog/if-it-works-its-right/\">If it works, it's right</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://8thlight.com/insights/getting-started-tdd-practical-guide\">Getting Started with TDD: A Practical Guide to Beginning a Lasting Practice</a> - <em>Tony Distinti</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://stephaniewalter.design/blog/tips-create-accessible-color-palette/\">Tips to Create an Accessible and Contrasted Color Palette</a> - <em>Stephanie Walter</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/oldnewthing/20250325-00/?p=110993\">A note on the USB-to-PS/2 mouse adapter that came with Microsoft mouse devices</a> - <em>Raymond Chen</em></li>\n<li><a href=\"https://www.404media.co/mozilla-foundation-calls-on-tech-industry-to-block-ice-contractor/\">Mozilla Foundation Calls on Tech Industry to Block ICE Contractor</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2025/03/as-preps-continue-its-looking-more-likely-nasa-will-fly-the-artemis-ii-mission/\">As preps continue, it’s looking more likely NASA will fly the Artemis II mission</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.404media.co/dna-of-15-million-people-for-sale-in-23andme-bankruptcy/\">DNA of 15 Million People for Sale in 23andMe Bankruptcy</a> - <em>Jason Koehler</em></li>\n<li><a href=\"https://werd.io/2025/forcing-people-back-to-the-office-was-a-choice-im\">Forcing People Back to the Office was a Choice. I’m Making Mine.</a> - <em>Ben Werdmuller</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2025/03/24/baltimore-key-bridge-rebuild-100-year-life-span/\">In Baltimore, bridge builders must be economic futurists</a> - <em>Stephanie Hughes</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-morning-report/as-trump-disbands-economic-advisory-committees-experts-raise-independence-concerns/\">Marketplace Morning Report: As Trump disbands economic advisory committees, experts raise concerns</a></li>\n<li><a href=\"https://podcast.techfreedom.org/episodes/401-everything-netchoice\">Tech Policy Podcast: Everything NetChoice</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/03/28/what-is-it-exactly-that-being-an-american-means-to-you/\">What Is It, Exactly, That Being An American Means to You?</a> - <em>Mike Brock</em></li>\n<li><a href=\"https://www.techdirt.com/2025/03/27/trumps-secret-police-are-now-disappearing-students-for-their-op-eds/\">Trump’s Secret Police Are Now Disappearing Students For Their Op-Eds</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://ctrlaltclub.beehiiv.com/p/work-life-balance-isn-t-for-you\">Work-life balance isn't for you...</a> - <em>Julie Chabin</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - Came Out Swinging</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/OiCit3G4YRU\" title=\"The Wonder Years - Came Out Swinging\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-31T14:21:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/43/",
      "url": "https://kpwags.com/week-note/43/",
      "title": "Week Notes for March 23 - 29 (#43)",
      "content_html": "\n\t\t<p>My week notes for the week of March 23 through March 29.</p>\n<h2>Notes</h2>\n<h3>Always Something Breaking</h3>\n<p>Our dryer finally bit the dust. Thankfully we were able to find a new washer/dryer set at a good price and fast delivery. Spent my Friday evening <a href=\"https://kpwags.com/posts/2025/03/28/tackling-home-projects-is-so-fulfilling/\">installing the new machines</a>.</p>\n<h3>⚾️ MLB Opening Day</h3>\n<p>The 2025 MLB season has begun! The Phillies won their first two games. Their first win wasn’t pretty, but a win is a win. Let’s go Phillies!</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n  <h3><a href=\"https://piccalil.li/blog/if-it-works-its-right/\">If it works, it's right</a> / <a href=\"https://alex.party/posts/2025-03-23-grid-first-flex-third/\">Grid First, Flex Third</a></h3>\n  <div class=\"posted-by\">Posted by <span>Andy Bell / Alex Riviere</span></div>\n  <p>This is a good read and comparison between 2 approaches to CSS layouts.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/dna-of-15-million-people-for-sale-in-23andme-bankruptcy/\">DNA of 15 Million People for Sale in 23andMe Bankruptcy</a></h3>\n\t<div class=\"posted-by\">Jason Koehler</div>\n<p>Definitely glad I avoided these services. I’d highly recommend you delete your data if you did.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-30T15:54:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/30/hope-springs-eternal-mlb-opening-day-edition/",
      "url": "https://kpwags.com/posts/2025/03/30/hope-springs-eternal-mlb-opening-day-edition/",
      "title": "Hope Springs Eternal: MLB Opening Day Edition",
      "content_html": "\n\t\t<p>Baseball season has begun and hope springs eternal.</p>\n<p>There’s a line from the song <a href=\"https://www.youtube.com/watch?v=PAtNg8hl4Eo\">“Roman Candles” by Aaron West and the Roaring Twenties</a> that comes to mind.</p>\n<blockquote>\nAin't that the thing about hope?<br />\nAin't that the thing about hope?<br />\nEach Spring the Mets will win the pennant<br />\nand your grass is gonna grow<br />\nain’t that the fucked up thing about hope?\n</blockquote>\n<p>I’m obviously a Phillies fan and am not a fan of the Mets, but like Mets fans, Philly fans are often very optimistic about seasons at the very beginning.</p>\n<p>For Philly fans, it’s actually not a bad time. Eagles just won the Super Bowl and look to continue to be competitive. The Phillies are playoff contenders with a star-studded roster. The Flyers and Sixers...well, two out of four ain’t bad.</p>\n<p>Let’s Go Phillies!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-30T15:26:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/28/tackling-home-projects-is-so-fulfilling/",
      "url": "https://kpwags.com/posts/2025/03/28/tackling-home-projects-is-so-fulfilling/",
      "title": "Tackling Home Projects is So Fulfilling",
      "content_html": "\n\t\t<p>This past week our dryer stopped working. Our dryer came with our house and is easily 30 years old, thought probably older. We had repaired it before, but this time around, my father in-law, my wife and I could not salvage it. We might have been able to jury rig something, but it probably wouldn’t hold for that long. It was time to replace the dryer.</p>\n<p>We found a basic washer and dryer set at Lowe’s and were able to get next-day delivery at no extra cost which was nice. The delivery crew was even awesome enough to bring them down into our basement saving my father in-law and me the hassle. Yes we did tip them, I appreciated not having to figure out how to get them down the stairs without hurting ourselves, especially after the adventure it was to get our old ones up those same stairs.</p>\n<p>But that was only the start of the task, both the washer and dryer had to be hooked up. This was the fulfilling part. The plumbing around the washer has been lousy since we bought the house, but it’s worked so we haven’t touched it. Messing with it wasn’t on my list of things I really wanted to do, but since I was already going to have to get in there, seemed as good a time as any.</p>\n<p>I didn’t go so far as to re-pipe the entire segment, although I would still love to at some point in time, but I replaced some old gate or globe valves (I’m not sure which one they were, but I don’t like either) with some easier ball valves, and shortened the length of hanging pipes.</p>\n<p>I then wired up the dryer. It was my first time working with a 220V line, but thankfully it was relatively simple and straightforward.</p>\n<p>I turned the breaker back on, re-opened up the water valves and checked to see what happened. The dryer ran, the breaker didn’t flip, so all looked good there. The water started flowing again and no leaks or drips reared their heads so it looked good for the washer as well. Looking at it, I felt good about the time spent.</p>\n<p>I’m not sure if this is something that other homeowners feel, but it felt good after doing all the work and admiring my handiwork. There’s a sense of accomplishment I feel when being able to do these tasks around the house myself.</p>\n<p>Much of this stems from the help I’ve received from my Dad, my father in-law and a few others. They’ve taught me quite a bit about the basics of plumbing, electrical work, and other maintenance tasks. For all of that I’m eternally grateful. It’s saved my wife and I a fair amount of money to not have to always call a professional when we can fix or install things ourselves. The proud sense of accomplishment is just a nice bonus.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-28T23:40:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/27/data-models-and-tech-debt/",
      "url": "https://kpwags.com/posts/2025/03/27/data-models-and-tech-debt/",
      "title": "Data Models &amp; Tech Debt",
      "content_html": "\n\t\t<p>This past week at work we ran into a weird bug. It was one of those bugs where everyone’s trying to replicate it with mixed success. Most of the time it works just fine, but every so often it fails with no clear indication as to what’s different about the failure case. It took a while, but we were finally able to identify the cause and it presented us with a slight headache.</p>\n<p>The cause of the headache was how our data model was created and set up at the very beginning of the project almost 5 years ago. We were doing a much needed rewrite of some 10+ year old software. We had to deal with transferring over and converting hundreds of thousands of existing records and were trying to keep the data model simple and clean, but also do it in a manner that kept it close enough to the existing data model to make the transfer easier. This was probably our first mistake. But even with that, we also had some constraints from the business that limited our ability to venture too far from what currently existed. Knowing now what we do, we probably could’ve successfully pushed back some and gotten the concessions we would’ve asked for, but like so many things in life, hindsight is 20/20.</p>\n<p>Tech debt is frequently experienced in the development world. Hopefully, if you’re lucky, it’s minor and can be fixed as you go easily enough when you touch the affected areas. But in other cases it can feel like a snowball rolling down a hill, growing larger by the foot. We can’t always do everything we want as business needs and deadlines have to be taken into account as well, so it accumulates.</p>\n<p>I mention my current predicament because when it comes to things like data models and databases, tech debt can be especially gnarly. Quick and dirty code can always be cleaned up and refactored. Problematic data models, the countless stored procedures that reference the specific columns, as well as all the code that relates to them are a lot harder to untangle.</p>\n<p>Looking at the bug, I’m actually a little surprised it took us this long to find. The issue, while an edge case, isn’t something I would expect to not have happen for the 4 or so years the project’s been live. It’s certainly possible of course that it happened and was never reported to us to investigate, but it manifested in such a way that made it pretty obvious something went wrong.</p>\n<p>We’re still working with the business to find the best way to handle this. There are several solutions, each with their own drawbacks. I’m still musing about it and the lessons learned to hopefully not have it happen again, or limit the scope if it does.</p>\n<p>Consider this a cautionary tale. Tech debt is often inevitable in some shape or form. Every little bit you can do now to think about how the code and functionality might grow, could save you a headache later.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-27T21:24:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/116/",
      "url": "https://kpwags.com/reading-log/116/",
      "title": "Reading Log - March 24, 2025 (#116)",
      "content_html": "\n\t\t<p>High school sports can be so important, good API design, how HTTP requests work, and more.</p>\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://woodruff.dev/breaking-down-http-what-really-happens-in-a-request-and-response/\">Breaking Down HTTP: What Really Happens in a Request and Response</a> - <em>Chris Woodruff</em></li>\n<li><a href=\"https://woodruff.dev/decoding-http-response-codes-what-your-browser-isnt-telling-you/\">Decoding HTTP Response Codes: What Your Browser Isn’t Telling You</a> - <em>Chris Woodruff</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.macchaffee.com/blog/2025/deno/\">Deno shows us there's a better way</a> - <em>Mac Chaffee</em></li>\n<li><a href=\"https://woodruff.dev/restful-api-design-why-simplicity-wins/\">RESTful API Design: Why Simplicity Wins</a> - <em>Chris Woodruff</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://www.chrbutler.com/simplification-takes-courage\">Simplification Takes Courage</a> - <em>Christopher Butler</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2025/03/19/supreme-court-federal-reserve-fed-agencies-independence-monetary-policy-constitutional/\">The economy’s stability also depends on the rule of law</a> - <em>Kai Ryssdal &amp; Sean McHenry</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theconversation.com/high-school-sports-are-losing-athletes-to-private-clubs-but-schools-can-keep-them-by-focusing-on-character-development-236367\">High school sports are losing athletes to private clubs, but schools can keep them by focusing on character development</a> - <em>Mark Rerick</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/07/23/1197972813/autocracy-anne-applebaum-dictators\">Fresh Air: The Dictator Playbook</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/a-river-runs-through-los-angeles/\">99% Invisible: A River Runs Through Los Angeles</a></li>\n<li><a href=\"https://www.npr.org/2024/07/17/1197972749/two-american-families\">Fresh Air: The Impossible American Dream</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Rise Against - Architects</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/NR3xVQy8ccM\" title=\"Rise Against - Architects\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-24T22:04:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/richard-behar-madoff-the-final-word/",
      "url": "https://kpwags.com/books/richard-behar-madoff-the-final-word/",
      "title": "Book Notes for Madoff: The Final Word",
      "content_html": "\n\t\t<p>I had heard a <a href=\"https://www.npr.org/2024/07/10/1197972617/richard-behar-madoff\">Fresh Air interview with Richard Behar</a> about the largest Ponzi scheme in American history. I of course had heard about Bernie Madoff and knew the basics, but this book provided more details and insight into it.</p>\n<p>I found the audiobook on Libby and decided to give it a listen. I mention that because the audiobook contains recorded phone calls between Richard and Bernie. Richard interviewed and communicated with Bernie while Bernie was still alive and in prison.</p>\n<p>The book goes into detail on who the different people were who were involved in running the scheme as well as how Bernie L. Madoff Investment Securities (BLMIS) was setup and how it managed to avoid scrutiny for so long.</p>\n<p>Despite the sheer magnitude of the losses, I still have a hard time feeling sorry for some (not all) of the victims as some seemed smart enough to have known something was up. The book talks about this, as well as why it was difficult for a undermanned SEC to learn about this and take action.</p>\n<p>As someone who is interested in the inner workings of Wall Street and finance, this was a particularly interesting look into one of the more notorious crimes in Wall Street history.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/a-few-thoughts-on-customizable-form-controls/",
      "url": "https://kpwags.com/notes/a-few-thoughts-on-customizable-form-controls/",
      "title": "A Few Thoughts on Customizable Form Controls",
      "content_html": "\n\t\t<blockquote>\n<p>But there’s a user-centric point to be made here too: when you re-invent the look, appearance, and functionality of basic form inputs for every website you’re in charge of, that means every user is forced to encounter inconsistent form controls across the plethora of websites they visit.</p>\n</blockquote>\n<p>This is one of the many reasons it is useful to stick with more standard controls. Between accessibility and everything else, knowing and recognizing standard controls can make it easier for users everywhere to fill out forms.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-23T18:51:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/simplification-takes-courage/",
      "url": "https://kpwags.com/notes/simplification-takes-courage/",
      "title": "Simplification Takes Courage",
      "content_html": "\n\t\t<blockquote>\n<p>Even the most motivated person engaging with an interface is more distracted than they realize and has less cognitive bandwidth available than they’re aware of. We’re designing for humans who are juggling multiple tabs, notifications, and interruptions — even while actively trying to focus on our application.</p>\n</blockquote>\n<p>I like to think I normally do a good job focusing on what I’m working on, but we  all get distracted or pulled away by some random thought or tangent. Simplifying controls and user experience, while not always easy, can be so beneficial to us all.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-23T18:45:47Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/42/",
      "url": "https://kpwags.com/week-note/42/",
      "title": "Week Notes for March 16 - 22 (#42)",
      "content_html": "\n\t\t<p>My week notes for the week of March 16 through March 22.</p>\n<h2>Notes</h2>\n<h3>Enjoying Our Porch</h3>\n<p>One of my favorite features of our house is our little porch. We have some nice wicker rocker chairs and it’s nice to just sit out there with my feet up and write or read. With the nice spring weather, I’ve been taking advantage of it before the weather gets to be too brutal to be out there.</p>\n<h3>Running More</h3>\n<p>The beautiful weather has also inspired me to run more. This week I ran almost 25 miles including a 6.42 mile run on Tuesday. I’ve been wanting to increase the distance and I think I’m going to try to start putting in some long runs on Saturdays throughout the spring and early summer. I’m not sure if anything will come of it, but I was able in the past to comfortably run 10-12 miles and would love to get to that point or more again.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.chrbutler.com/simplification-takes-courage\">Simplification Takes Courage</a></h3>\n\t<div class=\"posted-by\">Christopher Butler</div>\n<p>Nothing makes me happier than to use an interface that is simple and clear in its purpose and how to use it. This is a good piece on how it can be easy to forget this.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-23T18:43:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/19/the-pandemic-5-years-later/",
      "url": "https://kpwags.com/posts/2025/03/19/the-pandemic-5-years-later/",
      "title": "The Pandemic, 5 Years Later",
      "content_html": "\n\t\t<p>Five years ago, the US and much of the world shut down to the rapid spread of COVID-19 and the beginning of the pandemic. At the time, I and pretty much everyone else had no idea what to expect in the coming weeks, months, and as it turned out, years.</p>\n<p>I remember reading about the start of COVID in China, and then Italy. I was of course concerned and worried, but naively thought that maybe it would pass us over. Boy was I wrong.</p>\n<p>I remember the NBA shutting down and the one player poking fun at it only to be very quickly diagnosed with COVID-19. I don’t really follow the NBA all that closely, but that was the “oh shit” moment for me. I know how big the NBA is, and for them to essentially turn away ticket sales, meant that it was serious enough for me to pay attention to. And how fucked up is it that a sports league shutting down is what triggered it for me. It should have been from reading the news or something along those lines.</p>\n<p>Then it was the slow trickle of news from the first outbreaks in the US. The rise of cases in New York City and seeing all the hell it brought with it. The realization that my wife and I took a long weekend trip to New York City at the end of February 2020 getting out just before it hit...</p>\n<p>I again naively thought that maybe we’d only be locked down for a month or two. But then the news kept getting worse. More areas affected, death tolls climbing, politicians sniping back and forth about what’s the best way to go about handling it. One side acknowledging the dangers, the other side pushing batshit crazy treatments for it and saying it will just go away.</p>\n<p>As it turns out, five years later, we’re still dealing with the aftermath of it.</p>\n<p>Looking back at what I went through personally, I can’t help but feel incredibly lucky and fortunate to have made it through as unscathed as I did. Others weren’t as fortunate and my heart goes out to them.</p>\n<p>The biggest advantage my wife and I had when this all started was that we both work tech jobs. My wife had been working from home for almost 3 years, and it was easy for me to shift to working remotely as I’ve worked from home periodically and I’m a developer. Realistically all I really need to work is a computer and a high speed internet connection, both of which I have. It’s pretty easy to social distance when you don’t have to leave your house to work.</p>\n<p>I think of the doctors, nurses, and healthcare workers who put themselves in harms way to help the sick, and everything they were having to deal with. And that doesn’t even begin to take into account everyone furloughed unsure where their next paycheck was going to come from, or the grocery store workers, and everyone else who didn’t have the ability to work from home, but still had to go into work.</p>\n<p>My wife and I could pretty much hunker down at home and do our own thing. We’d sport masks once a week to do our grocery shopping. We’d try to order takeout once a week to support our local restaurants which were no doubt struggling, and we’d wait for things to get better.</p>\n<p>I’m still so mad though.</p>\n<p>I’m still incredibly angry at those who went through the pandemic and refused to wear a mask or do the bare minimum to help keep others safe. I’m by no means going to come out and say that lockdown was fun, or wearing a mask was fun, or that social distancing was all that great. But it wasn’t normal times, and masks and social distancing are such small things to do to potentially save someone’s life. My wife and I are fortunate to not have medical conditions making us particularly vulnerable, but many others do. The fact that people were so selfish as to be unwilling to think of others for the short period they were in stores just makes me so angry.</p>\n<p>I still have a hard time looking at the few people I know who bitched and moaned about it or refused to wear one the same way.</p>\n<p>And that’s just the tip of the iceberg when you think of all the people who refused to get the vaccine or actively campaigned against the vaccines.</p>\n<h2>Looking Back and Ahead</h2>\n<p>The one thing we should have learned from all of this is that our health care system here in America is incredibly uneven, and we <em>need</em> to do better. For those of us with means, we tend to be okay. But the poor and less fortunate are at such an extreme disadvantage. I would’ve hoped we would have learned something from it, but the last 5 years have made it abundantly clear that we have not.</p>\n<p>What we need is to overhaul our health care system and make it easier for those with less means to be able to access the care they need. Go fund me is not how healthcare should work.</p>\n<p>We also need federal, state, and local governments to put in place programs to handle the next pandemic. Because make no mistake, there will be another pandemic at some point whether we like it or not. Sadly at the federal level, and in many state houses, I don’t see that happening.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-19T22:42:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/17/still-off-social-media/",
      "url": "https://kpwags.com/posts/2025/03/17/still-off-social-media/",
      "title": "Still Off Social Media",
      "content_html": "\n\t\t<p>Shortly after the new year, I made the decision to take a break from social media. I deleted the apps off my phone, logged out of my accounts on my laptop, and just stopped visiting all of them. No Mastodon, no Bluesky and no Pixelfed (I actually deleted that account). There are days I consider opening them up, but for the moment, I just don’t think I’m going to.</p>\n<p>I do miss the dev community on both Mastodon and Bluesky. It was fun to read about the creative stuff people were working on and sharing. But I’ve also been thinking about politics and the state of the world. It’s not a leap to say that my mental state is very concerned about the state of things and social media isn’t always the best for my mental health. I’d prefer to avoid doom-scrolling. I’ve still want to keep up with current events as it’s important, but I’m trying to do it at a slower and more deliberate pace.</p>\n<p>I’m limiting my news intake to a quick look at the stories most mornings, and then focus on sources like my subscriptions to <em>The Economist</em> and the <em>Philadelphia Inquirer</em>. More of the in-depth articles I read are a little later so hopefully there’s a little more known about what happened or what is happening. It’s not perfect and my thoughts and methods are sort of evolving as I go.</p>\n<p>So I think I’m going to stick to the “slow” internet for the time being. Reading blogs, going through the various RSS feeds I subscribe to. If you have a personal site and RSS feed, or any thoughts to share, by all means reach out via email.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-17T23:52:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/115/",
      "url": "https://kpwags.com/reading-log/115/",
      "title": "Reading Log - March 17, 2025 (#115)",
      "content_html": "\n\t\t<p>A little light this week and a little podcast heavy. Pocket Casts opens up it's web player, details on newer HTML elements, a good caution about the FTC case and Google, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://harrisonbroadbent.com/blog/cool-native-html-elements/\">Cool native HTML elements you should already be using</a> - <em>Harrison Broadbent</em></li>\n<li><a href=\"https://devblogs.microsoft.com/typescript/typescript-native-port/\">A 10x Faster TypeScript</a> - <em>Anders Hejlsberg</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://github.blog/developer-skills/application-development/how-github-engineers-learn-new-codebases/\">How GitHub engineers learn new codebases</a> - <em>Brittany Ellich</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://chriscoyier.net/2025/03/14/google-being-forced-to-sell-chrome-is-not-good-for-the-web/\">Google Being Forced To Sell Chrome is Not Good for the Web</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gadgets/2025/03/pocket-casts-makes-its-web-player-free-takes-shots-at-spotify-and-ai/\">Pocket Casts makes its web player free, takes shots at Spotify and AI</a> - <em>Kevin Purdy</em></li>\n<li><a href=\"https://www.wsj.com/business/autos/drivers-high-tech-cars-preferences-28ab9584\">The Latest Car Technology Is Starting to Drive People Nuts</a> - <em>Joe Pinsker</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2025/03/this-small-snes-timing-issue-is-causing-big-speedrun-problems/\">Why SNES hardware is running faster than expected—and why it’s a problem</a> - <em>Kyle Orland</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.fastcompany.com/91296810/detroit-killed-the-sedan-trumps-trade-war-will-make-them-wish-they-hadnt\">Detroit killed the sedan. Trump’s trade war will make them wish they hadn’t</a> - <em>David Zipper</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/07/10/1197972617/richard-behar-madoff\">Fresh Air: Inside The Biggest Ponzi Scheme In American History</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/16748774-e-pluribus-chaos\">Ctrl-Alt-Speech: E Pluribus Chaos</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/16788575-the-take-it-down-takedown\">Ctrl-Alt-Speech: The TAKE IT DOWN Takedown</a></li>\n<li><a href=\"https://rss.com/podcasts/otherwise-objectionable/1936195/\">Otherwise Objectionable: Episode 1: The Most Misunderstood Law on the Internet</a></li>\n<li><a href=\"https://www.techdirt.com/2025/03/11/techdirt-podcast-episode-410-murder-the-truth/\">Techdirt Podcast: Murder the Truth</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.eff.org/deeplinks/2025/03/first-porn-now-skin-cream-age-verification-bills-are-out-control\">First Porn, Now Skin Cream? ‘Age Verification’ Bills Are Out of Control</a> - <em>Rindala Alajaji</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dennis McCarthy - Archer's Theme</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/88I1pAZy3Sw\" title=\"Dennis McCarthy - Archer's Theme\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-17T22:45:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/google-being-forced-to-sell-chrome-is-not-good-for-the-web/",
      "url": "https://kpwags.com/notes/google-being-forced-to-sell-chrome-is-not-good-for-the-web/",
      "title": "Google Being Forced To Sell Chrome is Not Good for the Web",
      "content_html": "\n\t\t<blockquote>\n<p>The web will suffer should Google be forced to sell Chrome. I think a fair assumption that overall investment and contribution to the open web will take a dive.</p>\n<p>Sure, there will be some canonical fork of Chromium that keeps the sure-to-be-shunned buyer company out of it. Sure, the Linux Foundation is getting their ducks in a row to have contributors ready. But I can’t see it going well.</p>\n<p>It won’t happen overnight, but stagnation will set in. A stagnated web is incentive for the operating system makers of the world to invest in pulling developers toward those proprietary systems. The browser wars sucked but at least we were still making websites. Being <em>forced</em> to make proprietary apps to reach people is an expensive prospect for the rest of us companies of the world, it will probably be done poorly, and we’ll all suffer for it. Heck, those operating systems aren’t required to ship a web browser <em>at all</em>.</p>\n</blockquote>\n<p>I don’t use Chrome and don’t trust Google to save my life, but you can’t ignore all they’re doing for the browser web development.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-16T21:11:38Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/41/",
      "url": "https://kpwags.com/week-note/41/",
      "title": "Week Notes for March 9 - 15 (#41)",
      "content_html": "\n\t\t<p>My week notes for the week of March 9 through March 15.</p>\n<h2>Notes</h2>\n<h3>Beautiful Weather</h3>\n<p>This week the weather has been absolutely beautiful sitting in the mid-60ºF temperatures. I’ve taken advantage of it for runs and sitting outside.</p>\n<h3>Big Release at Work</h3>\n<p>The project I’ve been working on for the last 14 or so months at work finally launched this week. Thankfully the release went by pretty smoothly. There were a few small issues as there often are on large releases, but nothing major and we were able to square them away pretty quickly.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://chriscoyier.net/2025/03/14/google-being-forced-to-sell-chrome-is-not-good-for-the-web/\">Google Being Forced To Sell Chrome is Not Good for the Web</a></h3>\n\t<div class=\"posted-by\">Chris Coyier</div>\n<p>A good write-up on the possibility and the downside of Google being forced to sell off Chrome.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://rss.com/podcasts/otherwise-objectionable/1936195/\">Episode 1: The Most Misunderstood Law on the Internet</a></h3>\n\t<div class=\"posted-by\">Otherwise Objectionable Podcast</div>\n<p>Only the first episode, but Mike Masnick (from Techdirt) does a great job starting to dig into Section 230 and why it’s so important for the internet.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-16T21:06:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/114/",
      "url": "https://kpwags.com/reading-log/114/",
      "title": "Reading Log - March 10, 2025 (#114)",
      "content_html": "\n\t\t<p>TypeScript running DOOM, thoughts on the Fediverse and some exciting CSS features.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://blog.duendesoftware.com/posts/20250306-identityserver4-public-again/\">IdentityServer4 is public again</a> - <em>Maarten Balliauw</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://allenpike.com/2025/javascript-fatigue-ssr\">JavaScript Fatigue Strikes Back</a> - <em>Allen Pike</em></li>\n<li><a href=\"https://www.chrbutler.com/in-defense-of-text-labels\">In Defense of Text Labels</a> - <em>Christopher Butler</em></li>\n<li><a href=\"https://henry.codes/writing/human-readable-date-formatting-with-vanilla-javascript/\">Human-readable date formatting with vanilla JavaScript</a> - <em>Henry Desroches</em></li>\n<li><a href=\"https://northflank.com/blog/why-we-ditched-next-js-and-never-looked-back\">Why we ditched Next.js and never looked back</a> - <em>Will Stewart &amp; Tom Snelling</em></li>\n<li><a href=\"https://css-tricks.com/functions-in-css/\">Functions in CSS?!</a> - <em>Juan Diego Rodríguez</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://youtube.com/watch?v=0mCsluv5FXA\">TypeScript types can run DOOM</a> - <em>Dimitri Mitropoulos</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.joanwestenberg.com/the-fediverse-isnt-the-future-its-the-present-weve-been-denied/\">The Fediverse Isn’t the Future. It’s the Present We’ve Been Denied.</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/the-digital-packrat-manifesto/\">The Digital Packrat Manifesto</a> - <em>Janus Rose</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.axios.com/2025/03/03/auto-insurance-vehicles-cars-trucks-suvs\">Why crashed cars are increasingly totaled</a> - <em>Nathan Bomey</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2025/03/03/friedmanite/#oil-crisis-two-point-oh\">Ideas Lying Around</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://addyosmani.com/blog/art-tech-interviews/\">The Art of Tech Interviewing</a> - <em>Addy Osmani</em></li>\n<li><a href=\"https://jonhilton.net/friction/\">Why some software development tasks feel impossible</a> - <em>Jon Hilton</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>American Aquarium - Me + Mine (Lamentations)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/hAocQGubZgY\" title=\"American Aquarium - Me + Mine (Lamentations)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-10T22:33:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/40/",
      "url": "https://kpwags.com/week-note/40/",
      "title": "Week Notes for March 2 - 8 (#40)",
      "content_html": "\n\t\t<p>My week notes for the week of March 2 through March 8.</p>\n<h2>Notes</h2>\n<h3>Trying to Get into a Lifting Routine Again</h3>\n<p>I’ve been off with my lifting routine as of late. Between nicer weather for runs, walking tess and being busy with work, I’ve been putting off most of my lifting sessions. This week I finally cracked down and put in some lifting sessions. I’m hoping it will end up sticking as I’d like to get some strength work in.</p>\n<h3>Writing</h3>\n<p>I’ve been in the writing mood all week and have been spending my evenings writing here and there. I’d been hoping to spend time writing on one of my novels and longer stories, but spent the time on blog posts and notes instead.</p>\n<h3>New Brewery</h3>\n<p>Saturday we ventured up and checked out a new brewery (for us). We went to Perkiomen Valley Brewery and while my wife did some crafting with a group meeting there, I enjoyed some beer catching up on my RSS feeds and writing.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://css-tricks.com/functions-in-css/\">Functions in CSS?!</a></h3>\n\t<div class=\"posted-by\">Juan Diego Rodríguez</div>\n<p>Ooo, this feels kind of huge to me. I know it’s early and only (kinda) out now in Chrome Canary behind a flag, but this feels like it could open up some possibilities if/when they get to production.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.techdirt.com/2025/03/04/why-techdirt-is-now-a-democracy-blog-whether-we-like-it-or-not/\">Why Techdirt Is Now A Democracy Blog (Whether We Like It Or Not)</a></h3>\n\t<div class=\"posted-by\">Mike Masnick</div>\n<p>Techdirt has been a fantastic source for good, high quality writing about the intersection of tech, free speech, privacy, copyright, and more.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://aresluna.org/the-hardest-working-font-in-manhattan/\">The Hardest Working Font in Manhattan</a></h3>\n\t<div class=\"posted-by\">Marcin Wichary</div>\n<p>This is an incredible article with some amazing history of a font we’ve probably seen all over the place without even realizing it.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-09T13:50:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/07/custom-css-functions/",
      "url": "https://kpwags.com/posts/2025/03/07/custom-css-functions/",
      "title": "Custom CSS Functions",
      "content_html": "\n\t\t<p>I’m still trying to wrap my head around some of the latest features of CSS and now they’re introducing custom CSS functions in Chrome Canary...wowzers. With the caveat that it’s still early and they’re nowhere near production status, Juan Diego Rodríguez has a good write-up on them.</p>\n<div class=\"view-link\"><a href=\"https://css-tricks.com/functions-in-css/\">Read More</a></div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-07T00:50:55Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/07/fantastic-piece-by-ethan-marcotte-on-18f-and-holding-strong-to-principles/",
      "url": "https://kpwags.com/posts/2025/03/07/fantastic-piece-by-ethan-marcotte-on-18f-and-holding-strong-to-principles/",
      "title": "Fantastic Piece by Ethan Marcotte on 18F and Holding Strong to Principles",
      "content_html": "\n\t\t<p>For those unaware, 18F was a digital agency within the US Federal Government to help with technical services and products. Recently, it was in the news as Elon Musk and DOGE came in and as they are apt to do, ruin a good thing.</p>\n<p>Prior to all of this though, Ethan Marcotte wrote about his choice to leave. It’s a fantastic piece and I would highly recommend reading it. I applaud him for hold fast to his principles and morals in what I can only imagine to be a tough time and a tough decision.</p>\n<p>When all is said and done, the loss of 18F will make us all worse off.</p>\n<div class=\"view-link\"><a href=\"https://ethanmarcotte.com/wrote/leaving-18f/\">Read More</a></div>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-07T00:48:57Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/06/february-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/03/06/february-2025-check-in/",
      "title": "February 2025 Check-In",
      "content_html": "\n\t\t<p>February was kind of a busy month for me. Work has been a little hectic, we’re making sure to put in the time training Tess, it’s just sometimes felt like a blur. Thankfully it’s not a bad busy.</p>\n<h2>Holy Moly that was a Good Super Bowl</h2>\n<p>As an Eagles fan, Super Bowl LIX was a lot of fun to watch. The Eagles played to their talents and their defense just shut Mahomes and the Chiefs down. It wasn’t just that they won, it was the way they won. You love to see it. We opted to avoid the parade this year. The parade in 2018 was a lot of fun, but it was hard to get into the city with all the crowds.</p>\n<h2>I Can No Longer Simply Ignore Politics</h2>\n<p>I’ve generally tried to limit writing and sharing politics. It’s never been that I don’t care, I’ve just tried to focus on other topics. With the current state of the U.S. and with Trump turning the country I’ve grown up into an authoritarian hellhole, I’m not going to be quiet about it and there will be political content included in my writing and sharing. While I don’t think we can keep our head in the sand with what is going on in America, I do have separate feeds for those who really do need a respite.</p>\n<h2>Getting Accustomed to the New Routine with Tess</h2>\n<p>We’ve had Tess for well over a month now and we’ve gotten into a pretty good routine with her. The training is going well and we’re starting to realize how smart she really is. There’s still adjusting going on on both sides, but we’re hoping it continues to go well.</p>\n<h2>The Final Stretch at Work</h2>\n<p>The project I’ve been focused on at work is reaching the end. Hopefully we’ll release it next week and we can mark it off as a success. It’s taken a lot of time and effort by a lot of people other than just myself and it will be nice to see it out the door. I’m also not going to lie, I’m looking forward to focusing on something else after even though I know there will still be enhancements and fixes coming.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>9</span> runs - <span>31.71</span> miles</li>\n<li><strong>Walking:</strong> <span>28</span> walks - <span>52.31</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>5</span> sessions - <span>90,000</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-gates-of-europe-a-history-of-ukraine-serhii-plokhy/15228399?ean=9781541675643\">The Gates of Europe</a> by Serhii Plokhy</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-fractured-dark-megan-e-o-keefe/19623182?ean=9780316291132\">The Fractured Dark</a> by Megan E. O'Keefe</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-bound-worlds-megan-e-o-keefe/20589383?ean=9780316291576\">The Bound Worlds</a> by Megan E. O'Keefe</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/in-the-garden-of-beasts-love-terror-and-an-american-family-in-hitler-s-berlin-erik-larson/944016?ean=9780307408853\">In the Garden of Beasts</a> by Erik Larson</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-splendid-and-the-vile-a-saga-of-churchill-family-and-defiance-during-the-blitz-erik-larson/8630726?ean=9780385348737\">The Splending and the Vile</a> by Erik Larson</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/109/\">February 3 (#109)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/110/\">February 10 (#110)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/111/\">February 17 (#111)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/112/\">February 24 (#112)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/posts/2025/02/02/week-notes/\">January 26 - February 1</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/02/09/week-notes/\">February 2 - 8</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/02/16/week-notes/\">February 9 - 15</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/02/23/week-notes/\">February 16 - 22</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/02/07/separating-out-politics/\">separating out politics</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/02/10/that-was-an-ass-whoopin/\">the Eagles winning the Super Bowl</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/02/11/blog-question-challenge/\">my blogging</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/02/13/music-questions-challenge/\">my music tastes</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Started Playing <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">WoW: Classic</a>...again</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Finished Season 2 of <a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-06T00:30:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/03/03/thinking-about-tv-and-movie-adaptations/",
      "url": "https://kpwags.com/posts/2025/03/03/thinking-about-tv-and-movie-adaptations/",
      "title": "Thinking About TV and Movie Adaptations",
      "content_html": "\n\t\t<p>I was catching up on my RSS feeds recently when I saw something about Stephen King assisting with a <em>Dark Tower</em> TV series by Mike Flanagan. I hadn't heard anything about it, but was intrigued as I enjoyed the <em>Dark Tower</em> book series by Stephen King. Well as it turns out, Stephen King is not helping with it after all, but it got me thinking about adaptations of our favorite books and more recently video games.</p>\n<p>I know there was a <em>Dark Tower</em> movie several (probably more) years ago with Idris Elba and Michael McConaughey. I haven't watched it as I heard it was not good and right or wrong, I didn't want it to spoil my love of the books. I was also quite skeptical that one could cram 8 books into a single movie and still capture any more than the essence of the books.</p>\n<p>This made me consider other adaptations of games and books I've enjoyed. <em>Halo</em> is one of my favorite video games, and after a lot of false starts, they finally released it as a TV show. It lasted 2 seasons before it was unsurprisingly cancelled. There is so much lore in the <em>Halo</em> series and stories that have already been written, primed for TV or the big screen. And while I recognize you can't necessarily just do a one-to-one copy and adaptation, the writers of Halo went off the deep end. It took them 2 full seasons for us to finally see the Halo ring. The biggest thing they did right was show that the Spartans were not &quot;built to be the good guys&quot; and that Catherine Halsey was not the hero she was seen to be in the original Halo trilogy. In the end, the series was disappointing to say the least.</p>\n<p>I'm often skeptical of adaptations because they are often so uneven. For every <em>Lord of the Rings</em>, there's a <em>Hobbit</em>. You get some good ones, some okay ones, and a whole bunch of mediocre at their absolute best versions. And when you really love the original work of art, be it a book or a video game, having a poor TV or movie adaptation is even more disappointing that just a bad TV show or movie.</p>\n<p>More positively and more recently, adaptations of both <em>The Last of Us</em> and <em>Fallout</em> came out as TV shows. I thought both of them were fantastic. <em>Fallout</em> didn't try to replicate a specific game, but kept the lore and spirit of what <em>Fallout</em> is alive. <em>The Last of Us</em> season 1 was amazing and did a good job of staying mostly true to the game. It gives me hope that the rumored adaptations for <em>Mass Effect</em> and <em>Horizon</em> might be okay.</p>\n<p>Maybe I should re-read the Dark Tower series again...</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-03T20:50:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/113/",
      "url": "https://kpwags.com/reading-log/113/",
      "title": "Reading Log - March 3, 2025 (#113)",
      "content_html": "\n\t\t<p>The NHL have their referees using Apple Watches, Mozilla shoots themselves in the foot (again), love for personal sites, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.zachleat.com/web/extract-colors/\">Extract Colors From an Image for CSS Themes</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://cloudfour.com/thinks/why-i-like-designing-in-the-browser/\">Why I Like Designing in the Browser</a> - <em>Tyler Sticka</em></li>\n<li><a href=\"https://piccalil.li/blog/using-the-step-and-pattern-attributes-to-make-number-inputs-more-useful/\">Using the step and pattern attributes to make number inputs more useful</a> - <em>Cassidy Williams</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://localghost.dev/blog/this-page-is-under-construction/\">This Page is Under Construction</a> - <em>Sophie Koonin</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.pcgamer.com/gaming-industry/mozilla-is-already-trying-to-backtrack-on-firefoxs-controversial-data-privacy-update-but-it-might-be-too-little-too-late/\">Mozilla is already trying to backtrack on Firefox's controversial data privacy update, but it might be too little, too late</a> - <em>Stevie Bonifield</em></li>\n<li><a href=\"https://www.wired.com/story/your-boss-wants-you-back-in-the-office-this-surveillance-tech-could-be-waiting-for-you/\">The surveillance tech waiting for workers as they return to the office</a> - <em>Sophie Charara</em></li>\n<li><a href=\"https://www.404media.co/optifyeai-ycombinator-startup-ai-factory/\">Y Combinator Supports AI Startup Dehumanizing Factory Workers</a> - <em>Samantha Cole</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/news/621004/nhl-watch-comms-apple-watch-wearables-smartwatch\">NHL officials are wearing Apple Watches on ice</a> - <em>Victoria Song</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://darknetdiaries.com/episode/147/\">Darknet Diaries: Tornado</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.joanwestenberg.com/american-tech-is-compromised-heres-my-replacement-stack-2/\">How I’m Building a Trump-Proof Tech Stack Without Big Tech</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Tim Barry - Church of Level Track</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HXnEAUwI7S8\" title=\"Tim Barry - Church of Level Track\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-03T15:10:53Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/advocate-of-sls-rocket-says-its-time-to-find-an-off-ramp/",
      "url": "https://kpwags.com/notes/advocate-of-sls-rocket-says-its-time-to-find-an-off-ramp/",
      "title": "Long-time advocate of SLS rocket says it’s time to find an “off-ramp”",
      "content_html": "\n\t\t<blockquote>\n<p>Ideally, NASA should be able to buy heavy lift services to send payloads to the Moon—up to about 45 metric tons to 'trans-lunar injection' which is about the same performance as the SLS Block 2,&quot; Pace wrote. &quot;I was a supporter of SLS when it was created as NASA required heavy-lift vehicles to send humans to the Moon and Mars. At the time, it did not appear (to me) that a private sector heavy-lift vehicle would be feasible within two decades. Today, the situation is different, with heavy-lift options from SpaceX, Blue Origin, and United Launch Alliance.</p>\n</blockquote>\n<p>The cynic in me is he’s trying to cozy up to Elon Musk to give SpaceX more business. Even still, the cost of Artemis and the SLS is absolute insanity.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-03T00:43:39Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/why-i-like-designing-in-the-browser/",
      "url": "https://kpwags.com/notes/why-i-like-designing-in-the-browser/",
      "title": "Why I Like Designing in the Browser",
      "content_html": "\n\t\t<blockquote>\n<p>Most design tools only approximate how the end result will look and feel. Will typography render as intended? Is that animation smooth or kinda janky? Does that toolbar feel weird when the virtual keyboard is visible? Is this idea even feasible?</p>\n<p>When I’m already working in HTML and CSS, there’s no guessing. I immediately experience the strengths and weaknesses of the medium firsthand, and I can adapt to that reality in the moment instead of having to compromise much later in the process.</p>\n</blockquote>\n<p>While I’m not always thinking about the design aspect as much in my day-to-day work, the idea reminds me very much of how I prototype. Often I am tasked with spikes at work to figure out how to do something or if it can be done. All the documentation in the world doesn’t beat using the documentation to build and experiment with a small proof of concept to get your hands dirty and to see what can be done.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-03T00:42:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/this-page-is-under-construction/",
      "url": "https://kpwags.com/notes/this-page-is-under-construction/",
      "title": "This Page is Under Construction",
      "content_html": "\n\t\t<blockquote>\n<p>I also don't want to be prescriptive about what this website should be. It's your space, and you can do with it whatever you want – whether that's a maximalist extravaganza, or plain text on a plain background. You might spent hours hand-crafting your HTML, or use a drag-and-drop builder. You may host it on someone else's platform, or on a box in your bedroom. All of these things are valid, as long as you build it <em>for you</em>.</p>\n</blockquote>\n<p>I love tweaking my site and love seeing what others come up with. Keep on buildin’!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-03T00:41:39Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/39/",
      "url": "https://kpwags.com/week-note/39/",
      "title": "Week Notes for February 23 - March 1 (#39)",
      "content_html": "\n\t\t<p>My week notes for the week of February 23 through March 1.</p>\n<h2>Notes</h2>\n<h3>A Lot of Hockey</h3>\n<p>I ended up playing a double-header Monday to help out one of the other net minders. Lost the first game 5-1, but won the second 7-3. I didn’t give up any bad goals so I can at least keep my head up after that, though there is always more to improve.</p>\n<p>Tuesday I subbed in net for a team 3 divisions above where I normally play. The pace of play was much higher than I’m used to and ended up losing 5-3. But given the strength of the play and shots, I actually feel good about how I played.</p>\n<p>Finally, Friday my other team played and won 8-0 in decisive fashion.</p>\n<h3>Cory Doctorow Book Signing</h3>\n<p>On Saturday a local(ish) bookshop had Cory Doctorow come in for a book signing and talk after his book <a href=\"https://bookshop.org/p/books/picks-and-shovels-a-martin-hench-novel-cory-doctorow/21413549\">Picks and Shovels</a> came out. It was the first author event I’ve ever attended. Cory provided some interesting insight about both his writing and his activism. If you haven’t read any of his books, I’d highly recommend both his fiction and non-fiction.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.zachleat.com/web/extract-colors/\">Extract Colors From an Image for CSS Themes</a></h3>\n\t<div class=\"posted-by\">Zach Leatherman</div>\n<p>This is a pretty cool tool to match colors with images. Has an 11ty plugin as well.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.theverge.com/news/621004/nhl-watch-comms-apple-watch-wearables-smartwatch\">NHL officials are wearing Apple Watches on ice</a></h3>\n\t<div class=\"posted-by\">Victoria Song</div>\n<p>An interesting look at how the NHL is adapting wearables in games.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-03-02T15:58:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/112/",
      "url": "https://kpwags.com/reading-log/112/",
      "title": "Reading Log - February 24, 2025 (#112)",
      "content_html": "\n\t\t<p>A good deal on CSS this week as well as Amazon taking over James Bond and the darker side of sports gambling.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://blog.elmah.io/unlocking-delegates-potential-in-c/\">Unlocking delegate's potential in C#</a> - <em>Ali Hamza Ansari</em></li>\n<li><a href=\"https://woodruff.dev/many-to-many-made-easy-mastering-relationships-in-ef-core/?amp=1\">Many-to-Many Made Easy: Mastering Relationships in EF Core</a> - <em>Chris Woodruff</em></li>\n<li><a href=\"https://woodruff.dev/from-c-to-rust-a-journey-through-code-and-concepts/?amp=1\">From C# to Rust: A Journey Through Code and Concepts</a> - <em>Chris Woodruff</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://measured.co/blog/tailwind-trade-offs\">Understanding the trade-offs of using Tailwind CSS</a> - <em>Scott Boyle</em></li>\n<li><a href=\"https://eslint.org/blog/2025/02/eslint-css-support/\">ESLint now officially supports linting of CSS</a> - <em>Nicholas C. Zakas</em></li>\n<li><a href=\"https://rogueengine.io/blog/your-app-should-have-been-a-website\">Your App Should Have Been A Website (And Probably Your Game Too)</a> - <em>P. Martin Ortiz</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2025/css-space-toggles/\">CSS Space Toggles</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://piccalil.li/blog/css-nesting-use-with-caution/\">CSS Nesting: Use With Caution</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.everydayunittesting.com/2025/02/unit-testing-the-goal.html\">Unit Testing &amp; The Goal</a> - <em>Gil Zilberfeld</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://kanenarraway.com/posts/ai-killed-the-tech-interview-now-what/?ref=sidebar\">AI Killed The Tech Interview. Now What?</a> - <em>Kane Narraway</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2025/02/19/g-s1-49451/artemis-moon-nasa-sls-rocket-doge-musk\">Is Trump preparing to cancel America's ride back to the moon?</a> - <em>Scott Neuman</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.nytimes.com/athletic/6077963/2025/02/12/nba-sports-betting-players/\">The dark side of sports betting and its impact on NBA players: Death threats, racism and Venmo requests</a> - <em>James L. Edwards III</em></li>\n<li><a href=\"https://www.sfgate.com/sports/article/sf-thought-built-stadium-future-fog-ewing-field-20051971.php\">The San Francisco stadium that fog killed</a> - <em>Alex Simon</em></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/news/526343/james-bond-rights-amazon\">Amazon now has full creative control over James Bond</a> - <em>Matt Patches</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>blink-182 - Another Girl Another Planet</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Nx5iW1lV1Dc\" title=\"blink-182 - Another Girl Another Planet\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-24T23:20:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/your-app-should-have-been-a-website-and-probably-your-game-too/",
      "url": "https://kpwags.com/notes/your-app-should-have-been-a-website-and-probably-your-game-too/",
      "title": "Your App Should Have Been A Website (And Probably Your Game Too)",
      "content_html": "\n\t\t<blockquote>\n<p>Native apps are a pain for everyone involved. Developers pay hefty app store fees, jump through approval hoops, and juggle multiple platform versions. Users? We’re stuck with constant updates, wasted storage space, and apps that don’t even work on all our devices.</p>\n</blockquote>\n<div>&nbsp;</div>\n<blockquote>\n<p>Web apps can easily adapt to whatever device you’re on. A single responsive website can run on your desktop, phone, tablet, or even a VR headset. What’s even more, they can be updated on all of them simultaneously. That’s a level of flexibility that native apps can’t match.</p>\n</blockquote>\n<div>&nbsp;</div>\n<blockquote>\n<p>Today’s browsers are powerhouses. Notifications? Check. Offline mode? Check. Secure payments? Yep, they’ve got that too. And with technologies like WebAssembly and WebGPU, web games are catching up to native-level performance. In some cases, they’re already there.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-23T15:30:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/css-nesting-use-with-caution/",
      "url": "https://kpwags.com/notes/css-nesting-use-with-caution/",
      "title": "CSS Nesting: Use With Caution",
      "content_html": "\n\t\t<blockquote>\n<p>As codebases grow and blocks of CSS get unwieldy — making them more complicated — the nesting selector — &amp; — becomes harder and harder to keep track of.</p>\n</blockquote>\n<div>&nbsp;</div>\n<blockquote>\n<p>I know I’m not going to convert nesting fans today. What I hope to send you away with is at least a more cautious approach. Consider keeping your nesting shallow</p>\n</blockquote>\n<p>This is generally my approach. Keep it simple for things like hover states and whatnot. Anything much more than 1-2 levels deep and it becomes unwieldy.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-23T15:28:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/38/",
      "url": "https://kpwags.com/week-note/38/",
      "title": "Week Notes for February 16 - 22 (#38)",
      "content_html": "\n\t\t<p>My week notes for the week of February 16 through February 22.</p>\n<h2>Notes</h2>\n<h3>Hockey League Starting Up</h3>\n<p>One of my hockey leagues (the one I play goalie in) started up Monday. We ended up losing 7-4. I didn't have a particularly good game, but there's still plenty of season left.</p>\n<h3>Preventative Care is Important</h3>\n<p>I ended up getting a colonoscopy this week. The prep for it was not fun, but preventative care is important. Better to catch issues before they become an actual issue. Take care of yourself.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.polygon.com/news/526343/james-bond-rights-amazon\">Amazon now has full creative control over James Bond</a></h3>\n\t<div class=\"posted-by\">Matt Patches</div>\n<p>I enjoy the James Bond franchise and am not looking forward to Amazon and Bezos over-saturating the franchise.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://measured.co/blog/tailwind-trade-offs\">Understanding the trade-offs of using Tailwind CSS</a></h3>\n\t<div class=\"posted-by\">Scott Boyle</div>\n<p>I'm generally not a fan of Tailwind, but I also recognize that it can be useful. This is a good writeup of the trade-offs you get using Tailwind. The good and the bad.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-23T15:27:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/111/",
      "url": "https://kpwags.com/reading-log/111/",
      "title": "Reading Log - February 17, 2025 (#111)",
      "content_html": "\n\t\t<p>An interesting 3-part podcast going over the history of Nvidia, boring tech, Intel's fall, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://medium.com/medialesson/logging-in-net-best-practices-and-why-you-should-love-it-fd907f264299\">Logging in .NET: Best Practices and Why You Should Love It</a> - <em>Marius Schröder</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/a-simple-masonry-like-composable-layout/\">A simple masonry-like composable layout</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://martijnhols.nl/blog/accessibility-essentials-every-front-end-developer-should-know\">Accessibility essentials every front-end developer should know</a> - <em>Martijn Hols</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://chriskiehl.com/article/thoughts-after-10-years\">Software development topics I've changed my mind on after 10 years in the industry</a> - <em>Chris Kiehl</em></li>\n<li><a href=\"https://www.dennisdoomen.com/2025/01/8-coding-lessons.html\">8 coding lessons from almost three decades of software development</a> - <em>Dennis Doomen</em></li>\n<li><a href=\"https://rubenerd.com/boring-tech-is-mature-not-old/\">Boring tech is mature, not old</a> - <em>Ruben Schade</em></li>\n<li><a href=\"https://jsoverson.medium.com/was-rust-worth-it-f43d171fb1b3\">Was Rust Worth It?</a> - <em>Jarrod Overson</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2025/02/10/ohio-power-lines-data-center-energy/\">Ohio data center boom shows Big Tech planting seeds in Middle America</a> - <em>Kai Ryssdal &amp; Sean McHenry</em></li>\n<li><a href=\"https://www.coryd.dev/posts/2025/your-platform-is-a-trap\">Your platform is a trap</a> - <em>Cory Dransfeldt</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/a-true-crime-documentary-series-has-millions-of-views-the-murders-are-all-ai-generated/\">A ‘True Crime’ Documentary Series Has Millions of Views. The Murders Are All AI-Generated</a> - <em>Henry Larson</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/incredible-and-spectacular-hubble-image-of-a-galaxy-that-got-whacked-by-another-galaxy\">INCREDIBLE and spectacular Hubble image of a galaxy that got whacked by another galaxy</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/intel-great-american-microchip-mobilization/\">The Great American Microchip Mobilization</a> - <em>Kelly McEvers</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.acquired.fm/episodes/nvidia-the-gpu-company-1993-2006\">Acquired: Nvidia Part I: The GPU Company (1993-2006)</a></li>\n<li><a href=\"https://www.acquired.fm/episodes/nvidia-the-machine-learning-company-2006-2022\">Acquired: Nvidia Part II: The Machine Learning Company (2006-2022)</a></li>\n<li><a href=\"https://www.acquired.fm/episodes/nvidia-the-dawn-of-the-ai-era\">Acquired: Nvidia Part III: The Dawn of the AI Era (2022-2023)</a></li>\n<li><a href=\"https://www.theverge.com/decoder-podcast-with-nilay-patel/609323/senator-ron-wyden-elon-musk-doge-trump-interview\">Decoder: Sen. Ron Wyden is here to stop Elon Musk</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/style/michelin-star-removal-giglio-restaurant-af776b3a?st=ZRJoFJ\">When the Michelin Star Becomes a Restaurant’s Curse</a> - <em>Christina Cacouris</em></li>\n<li><a href=\"https://www.joanwestenberg.com/we-dont-need-more-cynics-we-need-more-builders/\">We Don't Need More Cynics. We Need More Builders.</a> - <em>Joan Westenberg</em></li>\n<li><a href=\"https://css-tricks.com/the-importance-of-investing-in-soft-skills-in-the-age-of-ai/\">The Importance of Investing in Soft Skills in the Age of AI</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Red City Radio - Two Notes Shy of an Octave</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Yqv9y7shwPE\" title=\"Red City Radio - Two Notes Shy of an Octave\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-17T13:47:21Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/37/",
      "url": "https://kpwags.com/week-note/37/",
      "title": "Week Notes for February 9 - 15 (#37)",
      "content_html": "\n\t\t<p>My week notes for the week of February 9 through February 15.</p>\n<h2>Notes</h2>\n<h3>Go Birds</h3>\n<p>For the second time in their history, and in the last 8 years, the Philadelphia Eagles won the Super Bowl. This year they did it in decisive fashion and dominated Patrick Mahomes and the Kansas City Chiefs. My wife and I had a great time with some snacks sitting on the couch cheering them on. As a Philly sports fan, we don't see this too often.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n  <h3><a href=\"https://www.acquired.fm/episodes/nvidia-the-gpu-company-1993-2006\">Nvidia History Part I</a>, <a href=\"https://www.acquired.fm/episodes/nvidia-the-machine-learning-company-2006-2022\">Part II</a>, & <a href=\"https://www.acquired.fm/episodes/nvidia-the-dawn-of-the-ai-era\">Part III</a></h3>\n  <div class=\"posted-by\">Posted by <span>Acquired</span></div>\n  <p>An interesting 3 episode look back at the history of Nvidia.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://rubenerd.com/boring-tech-is-mature-not-old/\">Boring tech is mature, not old</a></h3>\n\t<div class=\"posted-by\">Ruben Schade</div>\n<p>There's sometimes something to be said about using technology that's been around for a while. Chances are, someone has run into the same problem you're facing and knows a solution or work-around.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-16T15:10:38Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/02/13/music-questions-challenge/",
      "url": "https://kpwags.com/posts/2025/02/13/music-questions-challenge/",
      "title": "Music Questions Challenge",
      "content_html": "\n\t\t<p>I've seen this floating around the blogosphere and figured I'd chime in.</p>\n<h2><em>What are Five of Your Favorite Albums?</em></h2>\n<p>In no particular order:</p>\n<ul>\n<li><a href=\"https://www.youtube.com/playlist?list=OLAK5uy_lYWw7s8GSngREdFbWlH6hud93YEyDMHa0\"><em>Greatest Generation</em></a> by The Wonder Years</li>\n<li><a href=\"https://www.youtube.com/playlist?list=OLAK5uy_nS8b85ql4Uc9YAispK_18VQM_QVOKRjO0\"><em>Handwritten</em></a> by The Gaslight Anthem</li>\n<li><a href=\"https://www.youtube.com/playlist?list=OLAK5uy_kW6-qj5yb2N0RNTsRp7nrHZ6TMYDpG1rY\"><em>Tape Deck Heart</em></a> by Frank Turner</li>\n<li><a href=\"https://www.youtube.com/playlist?list=OLAK5uy_lVmYRHBrJ576VByPiRFn1nn1Tzo3Gs334\"><em>S&amp;M</em></a> by Metallica</li>\n<li><a href=\"https://www.youtube.com/playlist?list=OLAK5uy_m00_VG_jMIEUlt6azkzQEW8NC93ZkWaXk\"><em>After the Party</em></a> by The Menzingers</li>\n</ul>\n<h2><em>What are Five of Your Favorite Songs?</em></h2>\n<p>In no particular order:</p>\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=rwrsrsauHfI\"><em>I Just Want to Sell Out My Funeral</em></a> by The Wonder Years</li>\n<li><a href=\"https://www.youtube.com/watch?v=9f0xlpOLafU\"><em>Mae</em></a> by The Gaslight Anthem</li>\n<li><a href=\"https://www.youtube.com/watch?v=DGXaLl2US1s\"><em>Bricks</em></a> by Dave Hause</li>\n<li><a href=\"https://youtu.be/wWEoQTvzoGM?si=SZOh0GI6woBp5J3m\"><em>Lookers</em></a> by The Menzingers</li>\n<li><a href=\"https://www.youtube.com/watch?v=My-oRR-TOVU\"><em>Once We Were Anarchists</em></a> by Frank Turner</li>\n</ul>\n<h2><em>Favorite Instrument(s)?</em></h2>\n<p>Guitar, I've finally started to better learn how to play. I would love to get better and get a 12-string. I heard one played live over Christmas break and it sounded amazing.</p>\n<h2><em>What Song or Album are You Currently Listening To?</em></h2>\n<p>Dennis McCarthy's film score for <em>Star Trek: Generations</em>. I tend to prefer soundtracks for writing and the score for <em>Generations</em> is amazing.</p>\n<h2><em>Do You Listen to the Radio? If So, How Often?</em></h2>\n<p>Nope, occasionally I might create a station on Apple Music, but other than that, never.</p>\n<h2><em>How Often Do You Listen to Music?</em></h2>\n<p>On a daily basis. I often have headphones on while working. Sometimes it's podcasts, but it's often music too.</p>\n<h2><em>How Often Do You Discover Music? And How Do You Discover Music?</em></h2>\n<p>Periodically. If I do, it's often through Apple Music when I'm seeing what new albums are recommended to me.</p>\n<h2><em>What's a Song or Album that You Enjoy that You Wish Had More Recognition?</em></h2>\n<p><em>Elsie</em> by The Horrible Crowes. Brian Fallon and Ian Perkins did a single album as a little side project from The Gaslight Anthem and every song on the album is amazing.</p>\n<h2><em>What's Your Favorite Song of All Time?</em></h2>\n<p>Ugh, it's really hard to choose. If I really had to choose, it'd be <a href=\"https://www.youtube.com/watch?v=rwrsrsauHfI\"><em>I Just Want to Sell Out My Funeral</em></a> by The Wonder Years. It's also an amazing song to end the album <a href=\"https://www.youtube.com/playlist?list=OLAK5uy_lYWw7s8GSngREdFbWlH6hud93YEyDMHa0\"><em>Greatest Generation</em></a>. Seriously if you decide to listen to it, listen to it in order.</p>\n<h2><em>Has Your Taste in Music Evolved Over the Years?</em></h2>\n<p>Absolutely, I was much more interested in nu-metal and pop punk in high school and college. As I got older, I got much more interested in other genres and more mellow songs. My taste is still eclectic.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-13T00:50:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-importance-of-investing-in-soft-skills-in-the-age-of-ai/",
      "url": "https://kpwags.com/notes/the-importance-of-investing-in-soft-skills-in-the-age-of-ai/",
      "title": "The Importance of Investing in Soft Skills in the Age of AI",
      "content_html": "\n\t\t<blockquote>\n<p>The path to becoming a truly great developer is down to more than just coding. It comes down to how you approach everything else, like communication, giving and receiving feedback, finding a pragmatic solution, planning — and even thinking like a web developer.</p>\n</blockquote>\n<p>So much of working in the real world involves trade-offs between the various departments. Being able to communicate well is <em>so</em> important to be able to work with the other teams so you can get the best solution deployed while keeping everyone (mostly) happy.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-11T01:15:45Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/boring-tech-is-mature-not-old/",
      "url": "https://kpwags.com/notes/boring-tech-is-mature-not-old/",
      "title": "Boring Tech is Mature, Not Old",
      "content_html": "\n\t\t<blockquote>\n<p>Boring tech behaves in predictable ways. It’s a well trodden path others have evaluated, optimised, troubleshooted, and understood. Using tech that has been subjected to all those people hours of use means you’re less likely to run into edge cases, unexpected behaviour, or attributes and features that lack documentation or community knowledge. In other words, when something goes wrong, can you turn to someone or something?</p>\n</blockquote>\n<p>There's sometimes something to be said about using technology that's been around for a while. Chances are, someone has run into the same problem you're facing and knows a solution or work-around.</p>\n<blockquote>\n<p>This isn’t to say there isn’t room for innovation, or that staying put is a guaranteed recipe for success. What it does teach is that it pays to make informed decisions, and that often times the understood, reliable, boring tech will get you there over something new, shiny or propped up with marketing spin.</p>\n</blockquote>\n<p>Also true, be mindful of the choices you make. New isn't necessarily bad, but it isn't always better.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-11T01:15:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/02/11/blog-question-challenge/",
      "url": "https://kpwags.com/posts/2025/02/11/blog-question-challenge/",
      "title": "Blog Question Challenge",
      "content_html": "\n\t\t<p>I've seen this going around with people talking about why they blog and figured I'd share my thoughts for me.</p>\n<h2><em>Why Did You Start Blogging In The First Place?</em></h2>\n<p>I think the core of why I first started blogging was to just give me a spot to share my thoughts. I started with Xynga, LiveJournal and then Blogger, moving to my own custom domain in 2007 when I graduated college. It was, and still is cathartic to just share my random thoughts. Helps clear my mind and maybe someone else will get something from them.</p>\n<p>I've also started sharing gotchas and other programming tidbits figuring they might help someone else learn something from my experiences.</p>\n<h2><em>What Platform Are You Using The Manage Your Blog, And Why Do You Use It?</em></h2>\n<p>My site runs on <a href=\"https://11ty.dev/\">Eleventy</a>. I use it because it's simple to use and I can maintain my site and posts with markdown files and no database. Easy source control and deployments.</p>\n<h2><em>Have You Blogged On Other Platforms Before?</em></h2>\n<p>Once I got my own domain, I started off with my own platform and CMS I built myself with PHP as a learning project. While it was fun to build, it also made it more difficult to maintain and write posts at the same time.</p>\n<p>My next stop was Wordpress. I had multiple iterations of Wordpress sites which did unfortunately come with several lost databases (my own fault) which meant I lost content. (This is one of the many reasons I don't see myself ever moving off of static site generators.)</p>\n<p>After a brief stint with an early version of Ghost, I switched to Jekyll which I used for a while as it worked well for me and introduced me to the joy of writing post in markdown and having easy version and source control.</p>\n<p>I then migrated to Next.js as it was easier to setup and use for me than Jekyll was. Part of this was that I was more familiar with JavaScript and React than I was with Ruby.</p>\n<p>Finally in late 2023, I migrated to 11ty and haven't looked back. I don't know what the future holds, but being able to maintain all my content in markdown is the way to go, I can't see myself ever going back to a platform that doesn't use that in some way.</p>\n<h2><em>How Do You Write Your Posts?</em></h2>\n<p>I use Obsidian to write my posts. I have folders for ideas, outlines, and drafts. I write them and then copy them into Sublime Text to get them added to my site.</p>\n<h2><em>When Do You Feel Most Inspired to Write</em></h2>\n<p>The jokester in me will say whenever I'm driving or am unable to write. Which while not entirely false doesn't paint the full picture.</p>\n<p>I'm often inclined to write when I've solved a problem, but or other issue and I want to share.</p>\n<p>The other times are when I'm just thinking about something and want to get some thoughts out. Sometimes my posts are as much for me as anyone else.</p>\n<h2><em>Do You Normally Publish Immediately After Writing, Or Do You Let It Simmer?</em></h2>\n<p>Most posts as soon as I feel like I have it written and (mostly) edited, I'll post it. Others I might let simmer a day or two as I re-read and maybe further edit it. I might also realize I don't like it and throw it in an abandoned folder where posts go to be forgotten about.</p>\n<h2><em>What's Your Favorite Post on Your Blog</em></h2>\n<p>I don't really know if I have one. If I really had to choose, I'd say the post I <a href=\"https://kpwags.com/posts/2024/06/06/personal-sites-connections-and-11ty/\">made after listening to Zach Leatherman on the JS Party podcast after taking 11ty private</a>.</p>\n<h2><em>Any Future Plans For the Blog?</em></h2>\n<p>I'll probably keep tweaking the look and feel. I've added content and pages as I've felt like it or as I see others try cool things.</p>\n<h2>Who Will Participate Next?</h2>\n<p>Anyone and everyone.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-11T01:11:08Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/02/10/that-was-an-ass-whoopin/",
      "url": "https://kpwags.com/posts/2025/02/10/that-was-an-ass-whoopin/",
      "title": "That was an Old Fashioned Ass Whoopin&#39;",
      "content_html": "\n\t\t<p>So watching the Philadelphia Eagles lay the hurt on Patrick Mahomes and the Kansas City Chiefs last night to win Super Bowl LIX was a real pleasure to watch. And suffice it to say, it's not a result I saw coming.</p>\n<p>I'm a Philadelphia sports fan through better and worse. I've seen the Eagles, Flyers, &amp; Phillies all break my heart in sometimes amazing fashion. So needless to say, I went in to the Super Bowl with no expectations. I knew the Eagles were good and had a fantastic season. I also knew the Chiefs with Andy Reid and Patrick Mahomes are a force to be reckoned with. I figured the game really could go either way and figured the game would be a close win for either team. I'm not surprised the Eagles won, I'm just (pleasantly) surprised they won in the fashion they did.</p>\n<p>Seeing the Eagles go up 24-0 at the half and then continue to hold on 40-22 was not something I expected to see. The final score really undersells how good the Eagles were. Basically the only thing they couldn't really get going was the ground game with Saquon Barkley, who the Chiefs managed to shut mostly down. In the meantime, they seemed to forget they also had to shut down Jalen Hurts and the passing game as well. Outside a first half interception, he had a fantastic game and rightfully won the Super Bowl MVP.</p>\n<p>But as great as the Eagles offense played, their defense was out of this world. I don't think I've ever seen a defensive unit play as good of a game against one of the best teams in the NFL. The Eagles held the Chiefs to 24 yards and 1 first down in the first half. They sacked Mahomes 6 times, caused him to turnover the ball 3 times, and just absolutely dominated the Chiefs offense. To make things even more unbelievable despite being true, the Eagles defense didn't blitz <em>once</em>. They didn't need to. They got into Mahomes' face with just the front four. Vic Fangio came in and turned one of the worst defenses last season into a juggernaut this season and especially this game. It's actually kind of a shame you can't name the defense the MVP, because with all due respect to Hurts (who deserves the MVP), the defense was the surprise of the game.</p>\n<p>I'm ecstatic about the result, seeing the Eagles win 2 super bowls in less than 10 years is incredible. I'm going to enjoy it while I can, because who knows when this golden period might end.</p>\n<p>FLY EAGLES FLY!</p>\n<p>GO BIRDS!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-10T23:47:26Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/110/",
      "url": "https://kpwags.com/reading-log/110/",
      "title": "Reading Log - February 10, 2025 (#110)",
      "content_html": "\n\t\t<p>Upcoming CSS features, HTML is a programming language, an amazing shot of the Andromeda galaxy and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://aaronstannard.com/relicense-or-die/\">.NET OSS Projects: Better to Re-license or Die?</a> - <em>Aaron Stannard</em></li>\n<li><a href=\"https://tracebit.com/blog/why-tracebit-is-written-in-c-sharp\">Why Tracebit is written in C#</a> - <em>Sam Cox</em></li>\n<li><a href=\"https://dev.to/antonmartyniuk/how-to-increase-performance-of-web-apis-in-net-4nnf\">How To Increase Performance of Web APIs in .NET</a> - <em>Anton Martyniuk</em></li>\n<li><a href=\"https://finalexception.com/autofixture-your-tool-to-write-unit-tests-easy-in-net/\">AutoFixture – your tool to write unit tests easy in .NET</a> - <em>Tomasz Sobczak</em></li>\n<li><a href=\"https://jeremydmiller.com/2024/12/08/build-resilient-systems-with-wolverines-transactional-outbox/\">Build Resilient Systems with Wolverine’s Transactional Outbox</a> - <em>Jeremy Miller</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.speedcurve.com/blog/page-bloat-2025/\">Page bloat update: How does ever-increasing page size affect your business and your users?</a> - <em>Tammy Everts</em></li>\n<li><a href=\"https://designshack.net/articles/accessibility/overlooked-accessibility-features/\">Beyond Alt Text: Overlooked Accessibility Features You Should Be Using</a> - <em>Roshan Perera</em></li>\n<li><a href=\"https://frontendmasters.com/blog/cool-people-link-to-text-fragments/\">Cool People Link to Text Fragments</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://iamvishnu.com/posts/please-dont-force-dark-mode\">Please Don't Force Dark Mode</a> - <em>Vishnu Haridas</em></li>\n<li><a href=\"https://css-tricks.com/the-little-triangle-in-the-tooltip/\">The Little Triangle in the Tooltip</a> - <em>Juan Diego Rodríguez</em></li>\n<li><a href=\"https://rachelandrew.co.uk/archives/2024/12/20/a-progress-update-on-reading-flow/\">A progress update on reading-flow</a> - <em>Rachel Andrew</em></li>\n<li><a href=\"https://developer.chrome.com/blog/css-text-box-trim\">CSS text-box-trim</a> - <em>Adam Argyle</em></li>\n<li><a href=\"https://www.wired.com/story/html-is-actually-a-programming-language-fight-me/\">HTML Is Actually a Programming Language. Fight Me</a> - <em>Tim Carmody</em></li>\n<li><a href=\"https://css-tricks.com/fluid-superscripts-and-subscripts/\">Fluid Superscripts and Subscripts</a> - <em>Lorenz Woehr</em></li>\n<li><a href=\"https://www.joshwcomeau.com/css/interactive-guide-to-grid/\">An Interactive Guide to CSS Grid</a> - <em>Josh W. Comeau</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://letsnotdothat.com/\">Master the Art of the Product Manager &quot;No&quot;</a> - <em>letsnotdothat.com</em></li>\n<li><a href=\"https://www.figma.com/blog/why-developers-should-embrace-creative-coding-again/?utm_source=cassidoo&amp;utm_medium=email&amp;utm_campaign=if-you-are-interested-in-what-you-do-that-keeps\">Why developers should embrace creative coding again</a> - <em>Jake Albaugh</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://blog.logrocket.com/ux-design/sticky-vs-fixed-navigation/?ref=web-design-weekly.com\">Should navigation bars be sticky or fixed?</a> - <em>Allie Paschal</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://birchtree.me/blog/that-app-could-probably-be-a-website/\">That app could probably be a website</a> - <em>Matt Birchler</em></li>\n<li><a href=\"https://chriscoyier.net/2025/01/30/control/\">Control</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.404media.co/anthropic-claude-job-application-ai-assistants/\">AI Company Asks Job Applicants Not to Use AI in Job Applications</a> - <em>Samantha Cole</em></li>\n<li><a href=\"https://www.404media.co/ai-generated-slop-is-already-in-your-public-library-3/\">AI-Generated Slop Is Already In Your Public Library</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/a-n-d-r-o-m-e-d-a-redux?utm_source=badastronomy.beehiiv.com&amp;utm_medium=newsletter&amp;utm_campaign=a-n-d-r-o-m-e-d-a-redux&amp;_bhlid=81cb9f0ebc7027ff3173faf01904ee6c38e21cd4\">A N D R O M E D A Redux</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/02/03/gogs-new-plan-to-weaponize-its-communitys-wishlist-of-games-to-pressure-ip-holders/\">GOG’s New Plan To Weaponize Its Community’s Wishlist Of Games To Pressure IP Holders</a> - <em>Timothy Geigner</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/02/07/magas-sickening-hypocrisy-from-save-the-children-to-defund-the-org-that-actually-saves-children/\">MAGA’s Sickening Hypocrisy: From ‘Save The Children’ To ‘Defund The Org That Actually Saves Children’</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/02/05/a-25-year-old-is-writing-backdoors-into-the-treasurys-6-trillion-payment-system-what-could-possibly-go-wrong/\">A 25-Year-Old Is Writing Backdoors Into The Treasury’s $6 Trillion Payment System. What Could Possibly Go Wrong?</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/02/03/the-twitter-files-playbook-comes-for-the-us-government/\">The Twitter Files Playbook Comes For The US Government</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2025/01/31/elons-twitter-destruction-playbook-hits-the-us-government-and-its-even-more-dangerous/\">Elon’s Twitter Destruction Playbook Hits The US Government, And It’s Even More Dangerous</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://joeydantoni.com/2024/12/14/a-story-about-bad-product-management/\">A Story About Bad Product Management</a> - <em>Joey Dantoni</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Rise Against - Nod</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/7WkrZi19q4U\" title=\"Rise Against - Nod\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-10T14:50:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/02/09/week-notes/",
      "url": "https://kpwags.com/posts/2025/02/09/week-notes/",
      "title": "Week Notes for February 2 - 8",
      "content_html": "\n\t\t<p>My week notes for the week of February 2 through February 9.</p>\n<h2>Notes</h2>\n<h3>Fence Up</h3>\n<p>My father-in-law, myself, &amp; my wife were able to get our new fence erected to help keep Tess contained. My wife and father-in-law did most of the work and it looks amazing. Tess loves being outside, so it will be nice to allow her to just hang out outside without us having to worry about her easily escaping.</p>\n<h3>Going Through My RSS Feeds</h3>\n<p>I've spent a fair amount of time this week going through my large backlog in my RSS reader. I probably should be more liberal in my use of &quot;mark all as read&quot;, but alas I'm more inclined to read the blog posts and articles even if they're a month old or older.</p>\n<h3>Gearing Up for the Super Bowl</h3>\n<p>Normally I don't care all that much about the Super Bowl, but the Philadelphia Eagles are in it again so I'm excited to cheer on my team.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://badastronomy.beehiiv.com/p/a-n-d-r-o-m-e-d-a-redux\">A N D R O M E D A Redux</a></h3>\n\t<div class=\"posted-by\">Philip Plait</div>\n<p>A good write-up about what is an <em>amazing</em> image of Andromeda.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.wired.com/story/html-is-actually-a-programming-language-fight-me/\">HTML Is Actually a Programming Language. Fight Me</a></h3>\n\t<div class=\"posted-by\">Tim Carmody</div>\n<p>I don't understand why people think HTML isn't a programming language, at least in the general sense. It takes skill tor write good, well-formed and accessible HTML. Add to that how many people are doing the same thing through JavaScript, I don't get the hate or condescension.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.techdirt.com/2025/02/03/gogs-new-plan-to-weaponize-its-communitys-wishlist-of-games-to-pressure-ip-holders/\">GOG’s New Plan To Weaponize Its Community’s Wishlist Of Games To Pressure IP Holders</a></h3>\n\t<div class=\"posted-by\">Timothy Geigner</div>\n<p>I would love to see more classic games being &quot;updated&quot; to run on modern hardware. If this helps game studios open up their back catalog, I'm all for it.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-09T14:46:48Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/36/",
      "url": "https://kpwags.com/week-note/36/",
      "title": "Week Notes for February 2 - 8 (#36)",
      "content_html": "\n\t\t<p>My week notes for the week of February 2 through February 8.</p>\n<h2>Notes</h2>\n<h3>Fence Up</h3>\n<p>My father-in-law, myself, &amp; my wife were able to get our new fence erected to help keep Tess contained. My wife and father-in-law did most of the work and it looks amazing. Tess loves being outside, so it will be nice to allow her to just hang out outside without us having to worry about her easily escaping.</p>\n<h3>Going Through My RSS Feeds</h3>\n<p>I've spent a fair amount of time this week going through my large backlog in my RSS reader. I probably should be more liberal in my use of &quot;mark all as read&quot;, but alas I'm more inclined to read the blog posts and articles even if they're a month old or older.</p>\n<h3>Gearing Up for the Super Bowl</h3>\n<p>Normally I don't care all that much about the Super Bowl, but the Philadelphia Eagles are in it again so I'm excited to cheer on my team.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://badastronomy.beehiiv.com/p/a-n-d-r-o-m-e-d-a-redux\">A N D R O M E D A Redux</a></h3>\n\t<div class=\"posted-by\">Philip Plait</div>\n<p>A good write-up about what is an <em>amazing</em> image of Andromeda.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.wired.com/story/html-is-actually-a-programming-language-fight-me/\">HTML Is Actually a Programming Language. Fight Me</a></h3>\n\t<div class=\"posted-by\">Tim Carmody</div>\n<p>I don't understand why people think HTML isn't a programming language, at least in the general sense. It takes skill tor write good, well-formed and accessible HTML. Add to that how many people are doing the same thing through JavaScript, I don't get the hate or condescension.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.techdirt.com/2025/02/03/gogs-new-plan-to-weaponize-its-communitys-wishlist-of-games-to-pressure-ip-holders/\">GOG’s New Plan To Weaponize Its Community’s Wishlist Of Games To Pressure IP Holders</a></h3>\n\t<div class=\"posted-by\">Timothy Geigner</div>\n<p>I would love to see more classic games being &quot;updated&quot; to run on modern hardware. If this helps game studios open up their back catalog, I'm all for it.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-09T14:46:48Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/html-is-actually-a-programming-language-fight-me/",
      "url": "https://kpwags.com/notes/html-is-actually-a-programming-language-fight-me/",
      "title": "HTML Is Actually a Programming Language. Fight Me",
      "content_html": "\n\t\t<blockquote>\n<p>But underestimating HTML is a mistake.</p>\n<p>HTML is the most significant computing language, programming or otherwise, ever developed. Every other programming language has to grapple with how HTML has redefined computing over the past 30-plus years. So many “pure” programming languages automate the production of more and more HTML.</p>\n</blockquote>\n<p>I remember playing with HTML first with Geocities, I never thought of it as anything other than programming.</p>\n<blockquote>\n<p>What other programmers might say dismissively is something HTML lovers embrace: Anyone can do it. Whether we’re using complex frameworks or very simple tools, HTML’s promise is that we can build, make, code, and do anything we want.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-07T23:24:14Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/02/07/separating-out-politics/",
      "url": "https://kpwags.com/posts/2025/02/07/separating-out-politics/",
      "title": "Separating Out Politics",
      "content_html": "\n\t\t<p>I'm not going to avoid politics when I have something to say, but I recognize others might need to step away for their mental health. I respect that and have an alternative.</p>\n<p>One of the best ways to follow me is through my <a href=\"https://kpwags.com/rss/\">RSS Feeds</a>. I'm now including additional feeds that you can subscribe to that will filter out the posts I tag 'politics'. I know it can sometimes get to be too much so I wanted to offer this to those who might need a break.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-07T01:27:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/02/01/january-2025-check-in/",
      "url": "https://kpwags.com/posts/2025/02/01/january-2025-check-in/",
      "title": "January 2025 Check-In",
      "content_html": "\n\t\t<p>Whelp, the first month of 2025 has already come and gone. The big thing that happened this month is my wife an I adopted a dog. It's certainly helped distract me from the rest of what's going on in the world.</p>\n<h2>Tess</h2>\n<p>In mid-January we adopted Tess. She's a Great Pyrenees mix and is adorable, smart, and quite energetic. She's a little over a year old so not only does she have quite a bit of puppy energy, she also might have some husky in her, which means her energy level is quite high. We don't mind it or anything, just a bigger adjustment than we were expecting.</p>\n<p>One of the bigger adjustments has been getting up at 6:30am every morning to take her for a walk before work. My alarm for work had been set at 6:30 prior to Tess, but it was common for me to just snooze it a time or two and end up getting out of bed a little before 7. Now I'm up in darkness to take her for a stroll around the block. Again, not complaining as it gets me up earlier and gets me moving and my blood pumping. Just a lot of adjusting.</p>\n<p>The good news is that it appears she's starting to get the hang of our routine. We got her started with training so we're hoping that helps.</p>\n<h2>Lots of Walking</h2>\n<p>Most of my exercise this month came from walking, even before we adopted Tess. I was putting off legs day at the gym and walks were just easy. Either way, I was still moving which is the important part. Once we got Tess, a walk in the morning before work, a walk over lunch, and then one after work. It all added up. An added bonus was that I was able to take advantage of the walks to finish 1, almost 2 audiobooks!</p>\n<h2>Routines</h2>\n<p>The one thing I've been trying to do this year is get into a new routine, and am using Tess as the catalyst. Getting up early for walks has helped allow me to get an earlier start to the day which has given me a little more time to dedicate to myself. I'm still working out what works best for me, but I'm hoping it will help me feel more productive this year.</p>\n<h2>Social Media Hiatus</h2>\n<p>At the beginning of the month I decided to take a break from social media. I deleted Mastodon, Bluesky, &amp; Pixelfed from my phone and logged out of them on my laptop. I've so far felt good about the decision. I'm currently spending more time reading more of my RSS feeds and focusing on longer, more in-depth content. I'm not sure how much better that is compared to social media if I'm randomly browsing, but I feel better about it for some reason. I'm not sure if it's that I don't just randomly reach for it like I would often do with Mastodon or Bluesky, or something else. Either way, I've felt more productive this month without those distractions.</p>\n<div class=\"monthly-roundup\">\n\t<h2>Monthly Round-Up</h2>\n<p></p><h3>🏃🏼‍♂️ Fitness</h3><p></p>\n<p></p><ul>\n<li><strong>Running:</strong> <span>4</span> runs - <span>14.15</span> miles</li>\n<li><strong>Walking:</strong> <span>23</span> walks - <span>49.43</span> miles</li><p></p>\n<p><li><strong>Lifting:</strong> <span>7</span> sessions - <span>140,600</span> lbs.</li>\n</p></ul><p></p>\n<p></p><hr /><p></p>\n<p></p><h3>📚 Reading</h3><p></p>\n<p></p><ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448?ean=9780525536512\">Digital Minimalism</a> by Cal Newport</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/last-to-leave-the-room-caitlin-starling/19486410\">Last to Leave the Room</a> by Caitlin Starling</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-death-of-expertise-second-edition-the-assault-on-establishment-knowledge-and-why-it-matters-tom-nichols/20688747?ean=9780197763834\">The Death of Expertise</a> by Tom Nichols</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-blighted-stars-megan-e-o-keefe/17405812?ean=9780316290791\">The Blighted Stars</a> by Megan E. O'Keefe</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/slow-productivity-the-lost-art-of-accomplishment-without-burnout-cal-newport/20143790?ean=9780593544853\">Slow Productivity</a> by Cal Newport</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/deep-work-rules-for-focused-success-in-a-distracted-world-cal-newport/8339760?ean=9781455586691\">Deep Work</a> by Cal Newport</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/atomic-habits-an-easy-proven-way-to-build-good-habits-break-bad-ones-james-clear/12117739?ean=9780735211292\">Atomic Habits</a> by James Clear</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-gates-of-europe-a-history-of-ukraine-serhii-plokhy/15228399?ean=9781541675643\">The Gates of Europe</a> by Serhii Plokhy</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-fractured-dark-megan-e-o-keefe/19623182?ean=9780316291132\">The Fractured Dark</a> by Megan E. O'Keefe</li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>✍🏻 Writing</h3><p></p>\n<p></p><h4>Reading Logs</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/reading-log/105/\">January 6 (#105)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/106/\">January 13 (#106)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/107/\">January 20 (#107)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/108/\">January 27 (#108)</a></li><p></p>\n  </ul>\n<p></p><h4>Week Notes</h4><p></p>\n<p></p><ul>\n<li><a href=\"https://kpwags.com/posts/2025/01/05/week-notes/\">December 29 - January 4</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/01/12/week-notes/\">January 5 - 11</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/01/19/week-notes/\">January 12 - 18</a></li>\n<li><a href=\"https://kpwags.com/posts/2025/01/26/week-notes/\">January 19 - 25</a></li><p></p>\n  </ul>\n<p></p><h4>Blogging</h4><p></p>\n<p></p><ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/03/movies-i-watched-in-2024/\">the movies I watched in 2024</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/03/2024-retrospective/\">my 2024</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/04/my-2025-aspirations/\">my 2025 aspirations</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/04/tv-i-watched-in-2024/\">the TV I watched in 2024</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/05/video-games-i-played-in-2024/\">the video games I played in 2024</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/06/taking-a-social-media-hiatus/\">taking a social media hiatus</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/06/books-i-read-in-2024/\">the books I read in 2024</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/07/blazor-and-the-javascript-click-function/\">a gotcha I found with Blazor, JavaScript &amp; Safari</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/08/default-apps-for-2025/\">my default apps</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/14/the-rabbit-holes-of-reading/\">how reading only increases my book backlog</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/25/times-new-dumbass/\">a hilariously stupid font</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/27/the-older-i-get-the-less-i-know/\">a song with some lyrics that seem apt for the time</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2025/01/28/go-birds/\">the Eagles making it back to the Super Bowl</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎮 Gaming</h3><p></p>\n<p></p><ul>\n<li>Continued <a href=\"https://www.playstation.com/en-us/god-of-war/\">God of War</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>📺 TV</h3><p></p>\n<p></p><ul>\n<li>Started <a href=\"https://www.imdb.com/title/tt2845786/\">Anthony Bourdain: Parts Unknown</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li><p></p>\n  </ul>\n<p></p><hr /><p></p>\n<p></p><h3>🎬 Movies</h3><p></p>\n<p></p><ul>\n<li><a href=\"https://www.imdb.com/title/tt1323594/\">Despicable Me</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0086567/\">Wargames</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1690953/\">Despicable Me 2</a></li>\n<li><a href=\"https://www.imdb.com/title/tt9603060/\">Star Trek: Section 31</a></li><p></p>\n  </ul>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-05T15:53:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/build-for-the-web-build-on-the-web-build-with-the-web/",
      "url": "https://kpwags.com/notes/build-for-the-web-build-on-the-web-build-with-the-web/",
      "title": "Build for the Web, Build on the Web, Build with the Web",
      "content_html": "\n\t\t<blockquote>\n<p>The web platform moves slowly, and I understand that can be frustrating for developers who want to innovate, but over a decade of consultancy experience has taught me time and time again that the alternative is much more restrictive in the long run. What’s brand new today starts to show its age much more quickly than something that’s already stood the test of time.</p>\n<p>Every layer of abstraction made in the browser moves you further from the platform, ties you further into framework lock-in, and moves you further away from fast.</p>\n</blockquote>\n<p>At work we have to keep a close eye on the dependencies we use and have to regularly update them when vulnerabilities arise. Some libraries are good about fixing vulnerabilities without any breaking changes. Others, not as much. We should probably rip some code out and do when we can, but tech debt can be a real pain in the ass.</p>\n<p>It's really amazing how well HTML, CSS, &amp; vanilla JavaScript hold up. Sites built years ago still work and render today.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-05T00:54:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/109/",
      "url": "https://kpwags.com/reading-log/109/",
      "title": "Reading Log - February 3, 2025 (#109)",
      "content_html": "\n\t\t<p>Some mistakes in CSS from the CSS Working Group, testing tips, and several podcasts.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://wiki.csswg.org/ideas/mistakes\">Incomplete List of Mistakes in the Design of CSS</a> - <em>CSS Working Group</em></li>\n<li><a href=\"https://blog.stephaniestimac.com/posts/2024/12/how-browser-features-are-built/\">You can pay for that: How web browser features get built</a> - <em>Stephanie Stimac</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://blog.mozilla.org/en/mozilla/how-to-get-started-open-source-development/\">How to get started on open-source development</a> - <em>Angela Lungati</em></li>\n<li><a href=\"https://gomakethings.com/buildless-testing/\">Buildless testing</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://gomakethings.com/dont-test-implementation-details/\">Don't test implementation details</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2025/01/27/cumberland-county-tennessee-aging-population-future-economy/\">Welcome to Cumberland County, Tennessee, the “future” of the U.S. economy</a> - <em>Kai Ryssdal, Nela Richardson, &amp; Maria Hollenhorst</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://the-distraction-a-defector-podcast.simplecast.com/episodes/apollo-13-was-a-well-made-movie-with-will-tavlin\">The Distraction: Apollo 13 Was a Well Made Movie with Will Tavlin</a></li>\n<li><a href=\"https://podrocket.logrocket.com/relatively-new-things-you-should-know-about-html-chris-coyier\">PodRocket Podcast: Relatively New Things You Should Know about HTML with Chris Coyier</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1901\">.NET Rocks: Building C# with Mads Torgerson and Dustin Campbell</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1900\">.NET Rocks: Episode 1900 with Scott Hanselman!</a></li>\n<li><a href=\"https://www.404media.co/podcast-the-truth-behind-deepseek/\">404 Media Podcast: The Truth Behind DeepSeek</a></li>\n<li><a href=\"https://www.breakpoint.show/podcast/episode-020-talking-boring-tech/\">The Breakpoint Show: Talking Boring Tech</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2025/01/science-at-risk-the-funding-pause-is-more-damaging-than-you-might-think/\">Science at risk: The funding pause is more damaging than you might think</a> - <em>John Timmer</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.oliverburkeman.com/river\">Treat your to-read pile like a river, not a bucket</a> - <em>Oliver Burkeman</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Brian Fallon - Watson</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/rIPSXds3hWY\" title=\"Brian Fallon - Watson\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-03T23:45:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/35/",
      "url": "https://kpwags.com/week-note/35/",
      "title": "Week Notes for January 26 - February 1 (#35)",
      "content_html": "\n\t\t<p>My week notes for the week of January 26 through February 1.</p>\n<h2>Notes</h2>\n<h3>Back Into Lifting</h3>\n<p>This month started out good in the strength training department, but then I shifted more towards walks. That only increased when we got Tess. But I'm hoping to get some more sessions in amongst the dog walks.</p>\n<h3>Starting Work on the Fence</h3>\n<p>Since Tess has learned she can jump the fence, we've been forced to keep her on a leash and harness. That's not ideal for her as she needs space to run around and burn off energy. The dog park can help, but we can't always take her there. After talking with my father in-law, we were able to get the materials to raise the picket height on our fence to 6 feet. This should be enough to keep her in and allow her to run around in our backyard. We got the permit from our township and have started work.</p>\n<h3>Trying to Schedule Out My Days</h3>\n<p>In an attempt to help keep myself organized, I've started to schedule out my days. It might seem a little extreme, but I'm hoping to use it as a way to keep myself focused on the different things I want to do. I have had mixed success with it so far, as things pop up here and there, but I think it's helped me focus in on getting me to sit down and write. I'll count it as a win right now.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://wiki.csswg.org/ideas/mistakes\">Incomplete List of Mistakes in the Design of CSS</a></h3>\n\t<div class=\"posted-by\">CSS Working Group</div>\n<p>A list of various &quot;mistakes&quot; the CSS team wishes could be fixed.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.marketplace.org/2025/01/27/cumberland-county-tennessee-aging-population-future-economy/\">Welcome to Cumberland County, Tennessee, the “future” of the U.S. economy</a></h3>\n\t<div class=\"posted-by\">Kai Ryssdal, Nela Richardson, and Maria Hollenhorst</div>\n<p>The start of an interesting series from Marketplace about the changing demographics and the US economy.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.breakpoint.show/podcast/episode-020-talking-boring-tech/\">Talking Boring Tech</a></h3>\n\t<div class=\"posted-by\">The Breakpoint Show</div>\n<p>The podcast episode talks about working with &quot;boring&quot; technology and why it can often be better than working with the latest and greatest framework.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-02-02T16:09:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/108/",
      "url": "https://kpwags.com/reading-log/108/",
      "title": "Reading Log - January 27, 2025 (#108)",
      "content_html": "\n\t\t<p>A developer starts to screw with AI bots, owning your own content, a fun little game and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.thomasclaudiushuber.com/2024/12/09/csharp-12-experimental-attribute/\">C# 12: The Experimental Attribute</a> - <em>Thomas Claudius Huber</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/accessibility-is-woke-now/\">Accessibility is woke now?</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://dotneteers.net/having-a-full-backlog-is-not-a-healthy-backlog/\">Having a Full Backlog Is Not a Healthy Backlog</a> - <em>Peter Smulovics</em></li>\n<li><a href=\"https://codeopinion.com/avoiding-a-legacy-codebase-keep-it-evergreen/\">Avoiding a Legacy Codebase. Keep it Evergreen</a> - <em>Derek Comartin</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2024/omgimg/\">Introducing o(m)g:image</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://manuelmoreale.com/on-blogging-substacking-and-owning-digital-real-estate\">On blogging, substacking (?), and owning digital real estate</a> - <em>Manuel “Manu” Moreale</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/developer-creates-infinite-maze-to-trap-ai-crawlers-in/\">Developer Creates Infinite Maze That Traps AI Training Bots</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>AI</h2>\n<ul>\n<li><a href=\"https://www.economist.com/leaders/2025/01/23/chinese-ai-is-catching-up-posing-a-dilemma-for-donald-trump\">Chinese AI is catching up, posing a dilemma for Donald Trump</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.404media.co/deepseek-mania-shakes-ai-industry-to-its-core/\">DeepSeek Mania Shakes AI Industry to Its Core</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Economics</h2>\n<ul>\n<li><a href=\"https://awealthofcommonsense.com/2025/01/the-new-housing-market-premium/\">The New Housing Market Premium</a> - <em>Ben Carlson</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://bartwullems.blogspot.com/2024/12/the-downside-of-hiring-for-cultural-fit.html\">The downside of hiring for cultural fit</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://www.economist.com/finance-and-economics/2025/01/16/are-big-cities-overrated\">Are Big Cities Overrated?</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - Boomboxes and Dictionaries</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/gfoy8xqu2cM\" title=\"The Gaslight Anthem - Boomboxes and Dictionaries\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-27T23:49:47Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/28/go-birds/",
      "url": "https://kpwags.com/posts/2025/01/28/go-birds/",
      "title": "Go Birds!",
      "content_html": "\n\t\t<p>The Philadelphia Eagles are facing the Kansas City Chiefs in Super Bowl LIX. It's a rematch from 2 years ago.</p>\n<p>GO BIRDS!!!</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/Z_qxA4xJ8Q-600.webp 600w\" /><img alt=\"Mac from It's Always Sunny in Philadelphia shouting 'Go Birds'\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/Z_qxA4xJ8Q-600.gif\" width=\"600\" height=\"300\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-27T23:19:07Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/27/the-older-i-get-the-less-i-know/",
      "url": "https://kpwags.com/posts/2025/01/27/the-older-i-get-the-less-i-know/",
      "title": "The Older I Get, the Less I Know",
      "content_html": "\n\t\t<p>Listening to the lyrics to the song <em>Some of It Was True</em> by <em>The Menzingers</em>, it made me think about where we are as a country and how there's a large portion of the country idealizing the past.</p>\n<p>The second verse really got me.</p>\n<blockquote>\nNostalgia's never quite as it seems<br />\nRose-coloured glasses on everything<br />\nSparkle like a diamond ring<br />\nI'm so sick of playing pretend<br />\nThinking everything was better back then<br />\nIt's hard to remember the bad parts<br />\nI thought that I knew it all<br />\nThe older I get, the less I know<br />\nAnd I knew nothin' then\n</blockquote>\n<p>The song isn't really about politics, it seems more about past relationships. Even so though, it seems rather apt for a lot of what happens. Too often we look back at the past thinking it was all sunshines and rainbows. Sure, there are good things that we might miss today, but it's important to look at things as a whole.</p>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HFSUNhlE7gU\" title=\"The Menzingers - Some of It Was True\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-27T13:40:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/34/",
      "url": "https://kpwags.com/week-note/34/",
      "title": "Week Notes for January 19 - 25 (#34)",
      "content_html": "\n\t\t<p>My week notes for the week of January 19 through January 25.</p>\n<h2>Notes</h2>\n<h3>Getting Used to Being a Dog Owner Again</h3>\n<p>Our previous dog, Otto, passed away in December 2021. Now that we have Tess, we've been getting her accustomed to us, and getting us accustomed to her. We've been doing 6:30am walks every morning (oof), and this week was particularly <em><strong>oofy</strong></em> as it was in the single digits most mornings. We think she's starting to get used to her new home, she's very energetic and playful. We also found out the hard way that she is athletic enough to jump our fence in the backyard. Which means we are now in the process of figuring out the best way to increase its height. Fun.</p>\n<h3>Dishwasher Installation</h3>\n<p>Saturday our new dishwasher arrived. I got it installed and was pleasantly surprised with how simple it was to install. There are really only 3 connections needed so I wasn't really anticipating anything too difficult, but with everything else I've had to do around the house over the years, I expected the worst.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://manuelmoreale.com/on-blogging-substacking-and-owning-digital-real-estate\">On blogging, substacking (?), and owning digital real estate</a></h3>\n\t<div class=\"posted-by\">Manuel Moreale</div>\n<p>If you write with Substack, do yourself a favor and move to your own domain. It'll be far better in the long run.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/developer-creates-infinite-maze-to-trap-ai-crawlers-in/\">Developer Creates Infinite Maze That Traps AI Training Bots</a></h3>\n\t<div class=\"posted-by\">Jason Koebler</div>\n<p>If AI companies were ethical and actually paid attention to site's robots.txt file, I might feel a little differently. As it stands, mess with them as much as possible.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.jim-nielsen.com/2024/omgimg/\">Introducing o(m)g:image</a></h3>\n\t<div class=\"posted-by\">Jim Nielsen</div>\n<p>Good titles and metadata are better than social post images any day of the week.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-26T19:17:30Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/25/times-new-dumbass/",
      "url": "https://kpwags.com/posts/2025/01/25/times-new-dumbass/",
      "title": "Times New Dumbass",
      "content_html": "\n\t\t<p>I dare someone to use this font for their website.</p>\n<p><a href=\"https://timesnewdumbass.co/\">Times New Dumbass</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-25T23:30:12Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/107/",
      "url": "https://kpwags.com/reading-log/107/",
      "title": "Reading Log - January 20, 2025 (#107)",
      "content_html": "\n\t\t<p>A lot of space launches, privacy violations, and the FTC finally going after John Deere.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://blog.elmah.io/c-13-features-whats-new-and-how-to-use-it/\">C# 13 Features: What's New and How to Use It</a> - <em>Ali Hamza Ansari</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/11/the-hype-around-signals/\">The Hype Around Signals</a> - <em>Atila Fassina</em></li>\n<li><a href=\"https://christianheilmann.com/2025/01/15/learning-html-is-the-best-investment-i-ever-did/?ref=dailydev\">Learning HTML is the best investment I ever did</a> - <em>Christian Heilmann</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://thenewstack.io/the-hidden-cost-of-unused-code/\">The Hidden Cost of Unused Code</a> - <em>Frank Delporte</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/nothing-is-something/\">Nothing Is Something</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.404media.co/instagram-ads-send-this-nudify-site-90-percent-of-its-traffic/\">Instagram Ads Send This Nudify Site 90 Percent of Its Traffic</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/the-powerful-ai-tool-that-cops-or-stalkers-can-use-to-geolocate-photos-in-seconds/\">The Powerful AI Tool That Cops (or Stalkers) Can Use to Geolocate Photos in Seconds</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://www.404media.co/elon-musk-uses-cybertruck-explosion-to-show-tesla-can-remotely-unlock-and-monitor-vehicles/\">Elon Musk Uses Cybertruck Explosion to Show Tesla Can Remotely Unlock and Monitor Vehicles</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2025/01/allstate-sued-for-allegedly-tracking-drivers-behavior-through-third-party-apps/\">Lawsuit: Allstate used GasBuddy and other apps to quietly track driving behavior</a> - <em>Kevin Purdy</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2025/01/blue-origin-reaches-orbit-on-first-flight-of-its-titanic-new-glenn-rocket/\">Blue Origin reaches orbit on first flight of its titanic New Glenn rocket</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://arstechnica.com/science/2025/01/two-lunar-landers-are-on-the-way-to-the-moon-after-spacexs-double-moonshot/\">Two lunar landers are on the way to the Moon after SpaceX’s double moonshot</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://arstechnica.com/space/2025/01/fire-destroys-starship-on-its-seventh-test-flight-raining-debris-from-space/\">Fire destroys Starship on its seventh test flight, raining debris from space</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/01/17/ftc-finally-sues-john-deere-over-years-of-right-to-repair-abuses/\">FTC Finally Sues John Deere Over Years Of ‘Right To Repair’ Abuses</a> - <em>Karl Bode</em></li>\n<li><a href=\"https://www.404media.co/ftc-sues-john-deere-over-its-repair-monopoly/\">FTC Sues John Deere Over Its Repair Monopoly</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.404media.co/podcast-total-chaos-at-meta/\">404 Media Podcast: Total Chaos at Meta</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://defector.com/the-trans-sports-ban-portends-something-much-darker\">The Trans Sports Ban Portends Something Much Darker</a> - <em>Michael Waters</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.vox.com/future-perfect/391733/gigantic-suvs-are-a-public-health-threat-why-dont-we-treat-them-like-one\">Gigantic SUVs are a public health threat. Why don’t we treat them like one?</a> - <em>David Zipper</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - What We Leave Behind</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/1n1TUTyYsWI\" title=\"Chuck Ragan - What We Leave Behind\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-20T22:42:30Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/33/",
      "url": "https://kpwags.com/week-note/33/",
      "title": "Week Notes for January 12 - 18 (#33)",
      "content_html": "\n\t\t<p>My week notes for the week of January 12 through January 18.</p>\n<h2>Notes</h2>\n<h3>New Living Room</h3>\n<p>We bought our old sofa off Craigslist 12+ years ago. It lasted us well as our cats and dog did quite a number on it. We finally decided that it was time to replace it, and our whole living room set (kinda) while we were at it. We threw out our large sectional and replaced it with a couch/love seat and ottoman combo. We donated our coffee and end tables to Habitat for Humanity and the room looks brand new...adult(ish) even. We still need to get new end tables, but it feels so new.</p>\n<h3>Meet Tess</h3>\n<p>On Friday, we adopted a one year old Great Pyrenees Mix dog. She’s absolutely adorable. We’re still adjusting to her and her to us. She’s incredibly smart and has tons of energy. We also think she has some husky in her.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/EbRSvGhO4S-1280.webp 1280w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/EbRSvGhO4S-1280.gif 1280w\" /><img alt=\"Tess, a tan and white dog lying in the grass with a tennis ball in her mouth\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/EbRSvGhO4S-1280.jpeg\" width=\"1280\" height=\"960\" /></picture></p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://arstechnica.com/space/2025/01/blue-origin-reaches-orbit-on-first-flight-of-its-titanic-new-glenn-rocket/\">Blue Origin reaches orbit on first flight of its titanic New Glenn rocket</a></h3>\n\t<div class=\"posted-by\">Eric Berger</div>\n<p>It’s nice to see another company reach orbit. Good for Blue Origin.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/elon-musk-uses-cybertruck-explosion-to-show-tesla-can-remotely-unlock-and-monitor-vehicles/\">Elon Musk Uses Cybertruck Explosion to Show Tesla Can Remotely Unlock and Monitor Vehicles</a></h3>\n\t<div class=\"posted-by\">Jason Koebler</div>\n<p>Tesla and Elon Musk might be the ones focused on in this, but the amount of surveillance being added to cars nowadays is disconcerting.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://thenewstack.io/the-hidden-cost-of-unused-code/\">The Hidden Cost of Unused Code</a></h3>\n\t<div class=\"posted-by\">Frank Delporte</div>\n<p>It can be incredibly easy to leave code in place even if it stops being used. Over time it builds and builds causing side effects that you don’t necessarily realize.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://defector.com/the-trans-sports-ban-portends-something-much-darker\">The Trans Sports Ban Portends Something Much Darker</a></h3>\n\t<div class=\"posted-by\">Michael Waters</div>\n<p>More culture-war bullshit from the Republicans at the cost of the trans community. I fear how many lives will be lost due to the attacks from the right.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-19T17:40:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/learning-html-is-the-best-investment-i-ever-did/",
      "url": "https://kpwags.com/notes/learning-html-is-the-best-investment-i-ever-did/",
      "title": "Learning HTML is the Best Investment I Ever Did",
      "content_html": "\n\t\t<blockquote>\n<p>One of the running jokes and/or discussion I am sick and tired of is people belittling HTML. Yes, HTML is not a programming language. No, HTML should not just be a compilation target. Learning HTML is a solid investment and not hard to do.</p>\n</blockquote>\n<br />\n<blockquote>\n<p>No matter how you create things for the web, the end product will be HTML. Either HTML generated on the server or with JavaScript. With AI search bots not rendering JavaScript yet maybe this is a good time to re-learn what HTML can do for you. It has not let me down in over 25 years, whereas lots of other “magical solutions” did.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-17T00:26:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/who-killed-google-reader/",
      "url": "https://kpwags.com/notes/who-killed-google-reader/",
      "title": "Who Killed Google Reader?",
      "content_html": "\n\t\t<blockquote>\n<p>Google killed Reader before it had the chance to reach its full potential. But the folks who built it saw what it could be and still think it’s what the world needs. It was never just an RSS reader. “If they had invested in it,” says Bilotta, “if they had taken all those millions of dollars they used to build Google Plus and threw them into Reader, I think things would be quite different right now.”</p>\n</blockquote>\n<p>I used Google Reader quite a bit. I loved it and was sad when Google killed it. It had so much potential. That said, while I might be nostalgic towards it, it’s certainly possible Google would’ve enshittified it if they kept it around and built onto it. Who knows what privacy nightmare we would be in. In the end, I use <a href=\"https://feedbin.com/\">Feedbin</a> and am quite happy with it and its functionality.</p>\n<p>At the end of the day, Google Reader might not be around anymore, but its influence still is.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-14T23:39:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/if-not-react-then-what/",
      "url": "https://kpwags.com/notes/if-not-react-then-what/",
      "title": "If Not React, Then What?",
      "content_html": "\n\t\t<blockquote>\n<p>Code that runs on the client, by contrast, is running on The Devil's Computer.2 Almost nothing about the latency, client resources, or even API availability are under the developer's control.</p>\n<p>Client-side web development is perhaps best conceived of as influence-oriented programming. Once code has left the datacenter, all a web developer can do is send thoughts and prayers.</p>\n</blockquote>\n<p>Too many people, including me sometimes, assume everyone has a computer with nearly unlimited computing power.</p>\n<blockquote>\n<p>Frameworkism insists that all problems will be solved if teams just framework hard enough. This is non-sequitur, if not entirely backwards. In practice, <strong>the only thing that makes web experiences good is caring about the user experience</strong> — specifically, the experience of folks at the margins. Technologies come and go, but what always makes the difference is giving a toss about the user.</p>\n</blockquote>\n<p>I still use React at work, and while I don’t hate it, it’s definitely not the first tool I reach for anymore.</p>\n<blockquote>\n<p>In short, nobody should start a new project in the 2020s based on React. Full stop.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-14T23:38:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/14/the-rabbit-holes-of-reading/",
      "url": "https://kpwags.com/posts/2025/01/14/the-rabbit-holes-of-reading/",
      "title": "The Rabbit Holes of Reading",
      "content_html": "\n\t\t<p>My reading backlog currently sits at 276 books. It’s long, books still trickle onto it. Finding a nice used book store nearby combined with Libby access makes it easy to add more books to the list. You know what is another good way to get more books added? Reading the books already on your backlog.</p>\n<p>I recently picked up the audiobook of <a href=\"https://bookshop.org/p/books/the-gates-of-europe-a-history-of-ukraine-serhii-plokhy/15228399?ean=9781541675643\">The Gates of Europe: A History of Ukraine</a> by Serhii Plokhy for walks and lifting sessions. I added it to my backlog when the Ukraine-Russia war broke out to hopefully learn something more about the region. The book is fascinating, and while I’m only 14% through, I’m learning about the very early history of the region.</p>\n<p>As I’m listening to the book, I’m hearing a lot about the Byzantine Empire and Constantinople. I realized it’s a piece of world history I don’t know all that much about. So what do I do? I add several books on Byzantium and the Byzantine Empire to my backlog. So many rabbit holes.</p>\n<p>I’m never going to get through my reading backlog...and I’m completely okay with it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-14T23:13:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/106/",
      "url": "https://kpwags.com/reading-log/106/",
      "title": "Reading Log - January 13, 2025 (#106)",
      "content_html": "\n\t\t<p>Carmen Sandiego is back, some CSS explainers, Facebook being censorious and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/alt-text-not-always-needed/\">Alt Text: Not Always Needed</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://helloanselm.com/writings/knowing-css-is-mastery-to-frontend-development\">Knowing CSS is mastery to Frontend Development</a> - <em>Anselm Hannemann</em></li>\n<li><a href=\"https://bkardell.com/blog/debt.html\">Interop and Hard Problems</a> - <em>Brian Kardell</em></li>\n<li><a href=\"https://adrianroselli.com/2024/11/avoid-read-only-controls.html\">Avoid Read-only Controls</a> - <em>Adrian Roselli</em></li>\n<li><a href=\"https://ishadeed.com/article/display-contents/\">CSS Display Contents</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://infrequently.org/2024/11/if-not-react-then-what/\">If Not React, Then What?</a> - <em>Alex Russell</em></li>\n<li><a href=\"https://ishadeed.com/article/overflow-clip/\">Overflow Clip</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://css-tricks.com/the-different-and-modern-ways-to-toggle-content/\">The Different (and Modern) Ways to Toggle Content</a> - <em>Daniel Schwarz</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.404media.co/facebook-is-censoring-404-media-stories-about-facebooks-censorship/\">Facebook Is Censoring 404 Media Stories About Facebook's Censorship</a> - <em>Emanuel Maiberg</em></li>\n<li><a href=\"https://www.theverge.com/23778253/google-reader-death-2013-rss-social\">Who killed Google Reader?</a> - <em>David Pierce</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/12/a-cold-war-mystery-why-did-jimmy-carter-save-the-space-shuttle/\">A Cold War mystery: Why did Jimmy Carter save the space shuttle?</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/impressions/504048/carmen-sandiego-2025-game-preview-demo\">Carmen Sandiego’s new game is educational in more ways than one</a> - <em>Zoë Hannah</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theatlantic.com/ideas/archive/2024/10/perverse-consequences-tuition-free-medical-school/680321/\">The Perverse Consequences of Tuition-Free Medical School</a> - <em>Rose Horowitch</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.wbur.org/endlessthread/2025/01/10/dox-glasses\">Endless Thread: Dox Glasses: Two Harvard students created an app turning smart glasses into on-the-go facial recognition</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2025/01/07/the-jawboning-double-standard-brendan-carrs-threats-are-way-worse-than-what-biden-was-accused-of/\">The Jawboning Double Standard: Brendan Carr’s Threats Are Way Worse Than What Biden Was Accused Of</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://defector.com/democracy-dies-as-awful-man-no-longer-able-to-freely-drive-18-blocks-in-manhattan\">Democracy Dies As Awful Man No Longer Able To Freely Drive 18 Blocks In Manhattan</a> - <em>David Roth</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - Little Fires</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/DGlnOkZXD94\" title=\"The Gaslight Anthem - Little Fires\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-13T20:54:54Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/32/",
      "url": "https://kpwags.com/week-note/32/",
      "title": "Week Notes for January 5 - 11 (#32)",
      "content_html": "\n\t\t<p>My week notes for the week of January 5 through January 11.</p>\n<h2>Notes</h2>\n<h3>Bitterly Cold</h3>\n<p>This whole week has been bitterly cold out with a couple days of snow. The snow hasn’t been bad, neither day even hit 2 inches, and much of it melted later in the sun, but the wind has been bad. Despite the cold, I did brave it for some walks and a run.</p>\n<h3>Regaining Focus</h3>\n<p>I mentioned this past week that I am taking a break from social media. A week doesn’t make a trend, but I have been able to better focus on writing, my side projects, and even tackling my RSS feeds. I just got my weekly iPhone usage report and my average daily screen time is down a full hour.</p>\n<h3>Audiobooks</h3>\n<p>At the end of last year, I tried an <a href=\"https://kpwags.com/books/annie-jacobsen-nuclear-war/\">audiobook</a> for the first time and didn’t hate the experience like I had years ago. I opted to give <a href=\"https://kpwags.com/books/tom-nichols-the-death-of-expertise/\">another</a> a try and had another good experience. I definitely prefer reading books over listening, but I’m happy to know that they’re an option for me which is good since the library has plenty of them through Libby.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/were-fine-los-angeles-wildfires/\">‘We’re Fine’: Lying to Ourselves About a Climate Disaster</a></h3>\n\t<div class=\"posted-by\">Jason Koebler</div>\n<p>Scary thoughts from someone in the path of the destructive fires. The situation is only going to get worse.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.theverge.com/23778253/google-reader-death-2013-rss-social\">Who killed Google Reader?</a></h3>\n\t<div class=\"posted-by\">David Pierce</div>\n<p>I’m still sad about Google Reader and what it could have been, but I actually think I like Feedbin and my current setup better. This is still a good read about the history of Google Reader and it’s odd place within the company prior to them killing it.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://helloanselm.com/writings/knowing-css-is-mastery-to-frontend-development\">Knowing CSS is mastery to Frontend Development</a></h3>\n\t<div class=\"posted-by\">Anselm Hannemann</div>\n<p>Frameworks come and go, the core of web development, HTML &amp; CSS are forever.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://ishadeed.com/article/display-contents/\">CSS Display Contents</a></h3>\n\t<div class=\"posted-by\">Ahmad Shadeed</div>\n<p>I didn’t even know <code>display: contents</code> existed. Another good writeup of CSS functionality by Ahmad.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-12T15:23:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/08/default-apps-for-2025/",
      "url": "https://kpwags.com/posts/2025/01/08/default-apps-for-2025/",
      "title": "Default Apps for 2025",
      "content_html": "\n\t\t<p>I listed the apps I use 2 years ago. I figured I'd update it with my current setup as a few things have changed.</p>\n<p>📨 <strong>Mail Client:</strong> <a href=\"https://airmailapp.com/\">Airmail</a>, <a href=\"https://www.thunderbird.net/en-US/\">Thunderbird</a> on PC</p>\n<p>📮 <strong>Mail Server:</strong> <a href=\"http://fastmail.com/\">FastMail</a> &amp; <a href=\"https://mail.google.com/\">Gmail</a></p>\n<p>📝 <strong>Notes:</strong> Mixture of <a href=\"https://ia.net/writer\">iA Writer</a> &amp; <a href=\"https://obsidian.md/\">Obsidian</a></p>\n<p>✅ <strong>To-Do:</strong> Apple Reminders</p>\n<p>📷 <strong>Photo Shooting:</strong> Mostly my iPhone 14 Pro, but I occasionally will use my Canon 60D or my Canon G1X</p>\n<p>🎨 <strong>Photo Editing:</strong> <a href=\"https://www.on1.com/products/photo-raw/\">ON1 Photo Raw</a></p>\n<p>📆 <strong>Calendar:</strong> Google Calendar for family, FastMail Calendar for personal</p>\n<p>📁 <strong>Cloud File Storage:</strong> <a href=\"http://dropbox.com/\">Dropbox</a> mostly</p>\n<p>📖 <strong>RSS:</strong> <a href=\"https://feedbin.com/\">Feedbin</a> with <a href=\"https://www.reederapp.com/\">Reeder</a></p>\n<p>🙍🏻‍♂️ <strong>Contacts:</strong> MacOS/iOS Contacts</p>\n<p>🌐 <strong>Browser:</strong> <a href=\"https://vivaldi.com/\">Vivaldi</a></p>\n<p>💬 <strong>Chat:</strong> Apple Messages</p>\n<p>🔖 <strong>Bookmarks:</strong> All over the place</p>\n<p>📑 <strong>Read It Later:</strong> <a href=\"https://www.instapaper.com/\">Instapaper</a></p>\n<p>📜 <strong>Word Processing:</strong> Microsoft Word</p>\n<p>📈 <strong>Spreadsheets:</strong> Microsoft Excel</p>\n<p>📊 <strong>Presentations:</strong> Don’t really do these, but would use Microsoft PowerPoint</p>\n<p>🛒 <strong>Shopping Lists:</strong> Apple Reminders</p>\n<p>🍴 <strong>Meal Planning:</strong> Google Calendar &amp; <a href=\"https://macrofactorapp.com/\">MacroFactor</a></p>\n<p>💰 <strong>Budgeting and Personal Finance:</strong> Shared Google Sheets</p>\n<p>📰 <strong>News:</strong> RSS</p>\n<p>🎵 <strong>Music:</strong> <a href=\"https://music.apple.com/us/browse\">Apple Music</a> &amp; <a href=\"https://brushedtype.co/doppler/\">Doppler</a></p>\n<p>🎤 <strong>Podcasts:</strong> <a href=\"https://pocketcasts.com/\">PocketCasts</a></p>\n<p>🔐 <strong>Password Management:</strong> <a href=\"https://1password.com/\">1Password</a></p>\n<p>🧑‍💻 <strong>Code Editor:</strong> <a href=\"https://code.visualstudio.com/\">VS Code</a>, <a href=\"https://www.jetbrains.com/rider/\">Rider</a>, <a href=\"https://zed.dev/\">Zed</a> &amp; <a href=\"https://www.sublimetext.com/\">Sublime Text</a></p>\n<p>✈️ <strong>VPN:</strong> None at the moment</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-08T23:37:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/tom-nichols-the-death-of-expertise/",
      "url": "https://kpwags.com/books/tom-nichols-the-death-of-expertise/",
      "title": "Book Notes for The Death of Expertise: The Campaign Against Established Knowledge and Why It Matters",
      "content_html": "\n\t\t<p>This was a sobering look at where we are as a society. It’s easy to put the blame for all of this on the rise of the internet, but as Tom goes on to describe, there’s a lot more to it.</p>\n<blockquote>\n<p>The breakdown of trust between the public, experts, and elected officials in a republic goes in all directions. The public, especially, needs to be able to trust leaders and their expert advisers. This relationship becomes impossible to sustain however, when laypeople have no idea what they’re talking about, or what they want. When that trust breaks down, public ignorance can be turned by cynical manipulation into a political weapon. Anti-intellectualism is itself a means of short circuiting democracy, because a stable democracy in any culture relies on the public actually understanding the implications of its own choices.</p>\n</blockquote>\n<p>He goes through several of the problem areas, like the news media, the internet, higher education, and some of the other sources of some of the issues we face.</p>\n<blockquote>\n<p>There is plenty of blame to go around for the perilous state of the role of expertise in American life. ... Experts themselves, as well as educators, journalists, corporate entertainment media, and others have all played their part. In the end however, there is only one group of people who must bear the ultimate responsibility for this current state of affairs, and only they can change any of it. The citizens of the United States of America.</p>\n</blockquote>\n<p>It made me think about some of my own biases too and I can probably be guilty of thinking I know more than I actually do.</p>\n<blockquote>\n<p>If laypeople refuse to take their duties as citizens seriously, and don’t educate themselves about issues important to them, democracy will mutate into technocracy. The rule of experts, so feared by laypeople will grow by default.  For laypeople to use expert advice and to place professionals in their proper roles as servants, rather than masters, they must accept their own limitations as well. Democracy cannot function when every citizen is an expert. Yes it is unbridled ego for experts to believe they can run a democracy while ignoring its voters. It is also however, ignorant narcissism for laypeople to believe that they can maintain a large and advanced nation without listening to the voices of those more educated and experienced than themselves.</p>\n</blockquote>\n<p>It’s worth a read.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/creativity-cannot-be-computed/",
      "url": "https://kpwags.com/notes/creativity-cannot-be-computed/",
      "title": "Creativity Cannot Be Computed",
      "content_html": "\n\t\t<blockquote>\n<p>So my advice is two-fold. First, make art. Join a choir or pottery class. Start painting, make weird novelty websites.</p>\n<p>And second: enjoy art. Get out to your local theaters, museums, music venues… they are the best thing to spend your money on.</p>\n</blockquote>\n<p>I’d highly recommend reading all the slides, they’re fantastic.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-07T23:52:37Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/07/blazor-and-the-javascript-click-function/",
      "url": "https://kpwags.com/posts/2025/01/07/blazor-and-the-javascript-click-function/",
      "title": "Blazor and the JavaScript .click() Function",
      "content_html": "\n\t\t<p>My job had me build a customize file upload control for the project I’m working on. I thought I had it working. It worked on Chrome. It worked on Firefox. It worked on Android. Then it was tested on an iPhone.</p>\n<p>The design for this essentially had custom button and file list that uses a hidden file input to handle the upload.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>file-picker<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  File Upload\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>flex gap-x-6 flex-col md:flex-row gap-y-6<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span>\n      <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-ghost<span class=\"token punctuation\">\"</span></span>\n      <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span>\n      <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>launch-file-picker<span class=\"token punctuation\">\"</span></span>\n      <span class=\"token attr-name\">@onclick</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>OpenFilePicker<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token punctuation\">></span></span>\n      Upload File\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>InputFile</span>\n    <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>file-picker<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>hidden<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token attr-name\">accept</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>.pdf<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n  <span class=\"token keyword\">function</span> <span class=\"token function\">openFilePicker</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'file-picker'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">click</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">OpenFilePicker</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">await</span> JsRuntime<span class=\"token punctuation\">.</span><span class=\"token function\">InvokeVoidAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"openFilePicker\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>This worked well, or so I thought. See if you can pick up on why Safari was throwing a fit.</p>\n<p>I run a Windows machine for work, but I was able to create a quick Blazor app on my personal MacBook Pro loaded on the iPhone simulator to reproduce it. This thankfully allowed me to start digging in. Sure enough, it didn’t work on Safari. After some debugging, it made sense why it wasn’t working.</p>\n<p>One thing browsers try to do is protect us from nefarious actors. As a developer, you can call the <code>.click()</code> function on an element to trigger the element as if the user clicked it with their mouse. The major caveat to this is that the action as to have been initiated by the user. You can’t just do it say on the <code>window.load</code> event. Bad actors would be able to exploit this to terrible effect otherwise.</p>\n<p>What I was able to figure out was that the Blazor <code>@onclick</code> event isn’t picked up by Safari as a user-initiated event. Safari saw my use of that as something that violated its security protections and blocked the function from being called.</p>\n<p>Fortunately, I was able to tweak the component and get it to work across all browsers.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>file-picker<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  File Upload\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>flex gap-x-6 flex-col md:flex-row gap-y-6<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span>\n      <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-ghost<span class=\"token punctuation\">\"</span></span>\n      <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span>\n      <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>launch-file-picker<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token punctuation\">></span></span>\n      Upload File\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>InputFile</span>\n    <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>file-picker<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>hidden<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token attr-name\">accept</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>.pdf<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n  <span class=\"token keyword\">function</span> <span class=\"token function\">initializeControl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'launch-file-picker'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'file-picker'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">click</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">protected</span> <span class=\"token keyword\">override</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">OnAfterRenderAsync</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">bool</span></span> firstRender<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>firstRender<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">await</span> JsRuntime<span class=\"token punctuation\">.</span><span class=\"token function\">InvokeVoidAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"initializeControl\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>The change I had to implement was to have JavaScript control the click handler on the button. Instead of Blazor just calling the JS function, I have Blazor call a function initialize the click handler on the HTML element. I use the <code>OnAfterRenderAsync</code> lifecycle method to attach the event handler on the first time the page is rendered.</p>\n<p>Now when the button is clicked, the JavaScript event triggers the <code>.click()</code> function call satisfying all browsers’ security checks.</p>\n<p>It took me several hours to figure this out, so hopefully this might help someone else to figure it out faster.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-07T01:30:37Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/105/",
      "url": "https://kpwags.com/reading-log/105/",
      "title": "Reading Log - January 6, 2025 (#105)",
      "content_html": "\n\t\t<p>Double issue, ableit a little light with the holidays. Some thoughts on new browser features, some images from Hubble and the JWST, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://rachelandrew.co.uk/archives/2024/11/15/when-is-the-right-time-to-share-our-excitement-about-new-web-features/\">When is the right time to share our excitement about new web features?</a> - <em>Rachel Andrew</em></li>\n<li><a href=\"https://bryanlrobinson.com/blog/and-cover-pages/\">Make a More Flexible Cover Screen with CSS Grid</a> - <em>Bryan Robinson</em></li>\n<li><a href=\"https://codeopinion.com/your-customers-dont-care-about-javascript/\">Your Customers Don’t Care About JavaScript</a> - <em>Derek Comartin</em></li>\n<li><a href=\"https://css-tricks.com/tooltip-best-practices/\">Tooltip Best Practices</a> - <em>Zell Liew</em></li>\n<li><a href=\"https://macwright.com/2024/11/16/web-complexity.html\">Is there really a way to push back on the complexity of the web?</a> - <em>Tom MacWright</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://avi.im/blag/2024/sqlite-past-present-future/\">How bloom filters made SQLite 10x faster</a> - <em>Avinash Sajjanshetty</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://talks.hiddedevries.nl/dFZf3b/slides\">Creativity Cannot Be Computed</a> - <em>Hidde de Vries</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://adactio.com/journal/21525\">Unsaid</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://wil.to/switching-to-a-framework-and-ubuntu/\">The couple months of Linux on the desktop.</a> - <em>Mat Marquis</em></li>\n</ul>\n<hr />\n<h2>Cybersecurity</h2>\n<ul>\n<li><a href=\"https://www.404media.co/email/2994be06-d953-4a95-b1c5-59db01f633fb/?ref=daily-stories-newsletter&amp;attribution_id=677bf4658709d70001ad4c3a&amp;attribution_type=post\">Violent Hackers Are Using U-Haul To Dox Targets</a> - <em>Joseph Cox</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/spectacular-colliding-galaxies-from-hubble-and-jwst?_bhlid=e071a43ede3e5620e300ba55caa0ebbf154ab435&amp;last_resource_guid=Post%3A5ea55e9c-7971-4d4d-87a2-b71466910e24&amp;utm_campaign=spectacular-colliding-galaxies-from-hubble-and-jwst\">Spectacular colliding galaxies from Hubble and JWST</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://frontofficesports.com/three-mlb-teams-paid-84-of-record-311m-luxury-taxes-this-year/\">Three MLB Teams Paid 84% of Record $311M Luxury Taxes This Year</a> - <em>Eric Fisher</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1898\">.NET Rocks: On Being a Senior Software Developer with Shawn Wildermuth</a></li>\n<li><a href=\"https://dot-social.simplecast.com/episodes/molly-white\">Dot Social: Entering a New Phase of the Web, with Citation Needed’s Molly White</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - There, There</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Tnsl4QPwtJo\" title=\"The Wonder Years - There, There\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-06T23:57:25Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/06/books-i-read-in-2024/",
      "url": "https://kpwags.com/posts/2025/01/06/books-i-read-in-2024/",
      "title": "Books I Read in 2024",
      "content_html": "\n\t\t<p>I read more books in 2024 than I have any year prior. I enjoyed most of them.</p>\n<h2>My Favorites</h2>\n<p><media-box title=\"Wanderers\" author=\"Chuck Wendig\" link=\"https://bookshop.org/p/books/wanderers-chuck-wendig/11314587?ean=9780399182129\" image=\"https://i.postimg.cc/KvtWvfkk/wanderers.jpg\" platform=\"paperback\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/KvtWvfkk/wanderers.jpg\" alt=\"Wanderers\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/wanderers-chuck-wendig/11314587?ean=9780399182129\">Wanderers</a></div>\n<div class=\"author\">Chuck Wendig</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>I really enjoyed this one. The characters were interesting and it had a good level of suspense with an interesting story to back it up.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Wayward\" author=\"Chuck Wendig\" link=\"https://bookshop.org/p/books/wayward-chuck-wendig/17746477?ean=9780593158791\" image=\"https://i.postimg.cc/Pfgcj9xn/wayward.jpg\" platform=\"paperback\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Pfgcj9xn/wayward.jpg\" alt=\"Wayward\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/wayward-chuck-wendig/17746477?ean=9780593158791\">Wayward</a></div>\n<div class=\"author\">Chuck Wendig</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>I loved Wanderers and Wayward is a great sequel to it. The characters and the story is gripping, captivating and enjoyable.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Challenger\" author=\"Adam Higginbotham\" link=\"https://bookshop.org/p/books/challenger-an-american-tragedy-adam-higginbotham/20712668?ean=9781982176617\" image=\"https://i.postimg.cc/3JLQhKg2/challenger-adam-higginbotham.jpg\" platform=\"hardcover\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/3JLQhKg2/challenger-adam-higginbotham.jpg\" alt=\"Challenger\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/challenger-an-american-tragedy-adam-higginbotham/20712668?ean=9781982176617\">Challenger</a></div>\n<div class=\"author\">Adam Higginbotham</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>I loved this. It was a great read talking about the development of the Space Shuttle as well as all the details that led to the Challenger disaster. It was in depth and even provided me with more details that I didn’t realize.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Nuclear War\" author=\"Annie Jacobsen\" link=\"https://bookshop.org/p/books/nuclear-war-a-scenario-annie-jacobsen/20335598?ean=9780593476093\" image=\"https://i.postimg.cc/kG7B69nz/nuclear-war-a-scenario.jpg\" platform=\"audiobook\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/kG7B69nz/nuclear-war-a-scenario.jpg\" alt=\"Nuclear War\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/nuclear-war-a-scenario-annie-jacobsen/20335598?ean=9780593476093\">Nuclear War</a></div>\n<div class=\"author\">Annie Jacobsen</div>\n</div>\n<platform-tag platform=\"audiobook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag audiobook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path fill-rule=\"evenodd\" d=\"M6.825 4.138c.596 2.141-.36 3.593-2.389 4.117a4.4 4.4 0 0 1-2.018.054c-.048-.01.9 2.778 1.522 4.61l.41 1.205a.52.52 0 0 1-.346.659l-.593.19a.55.55 0 0 1-.69-.34L.184 6.99c-.696-2.137.662-4.309 2.564-4.8 2.029-.523 3.402 0 4.076 1.948zm-.868 2.221c.43-.112.561-.993.292-1.969-.269-.975-.836-1.675-1.266-1.563s-.561.994-.292 1.969.836 1.675 1.266 1.563m3.218-2.221c-.596 2.141.36 3.593 2.389 4.117a4.4 4.4 0 0 0 2.018.054c.048-.01-.9 2.778-1.522 4.61l-.41 1.205a.52.52 0 0 0 .346.659l.593.19c.289.092.6-.06.69-.34l2.536-7.643c.696-2.137-.662-4.309-2.564-4.8-2.029-.523-3.402 0-4.076 1.948m.868 2.221c-.43-.112-.561-.993-.292-1.969.269-.975.836-1.675 1.266-1.563s.561.994.292 1.969-.836 1.675-1.266 1.563\"></path>\n\t\t</svg>\n\t\tAudiobook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>This was a scary read. It was incredibly fascinating to see how nuclear war might play out in the real world and how awful it is and how you just can't win. I'd recommend it.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Stand\" author=\"Stephen King\" link=\"https://bookshop.org/p/books/the-stand-stephen-king/8197596?ean=9780307947307\" image=\"https://i.postimg.cc/hvrBP0L5/the-stand.jpg\" platform=\"paperback\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/hvrBP0L5/the-stand.jpg\" alt=\"The Stand\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-stand-stephen-king/8197596?ean=9780307947307\">The Stand</a></div>\n<div class=\"author\">Stephen King</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>I really enjoyed this. Parts of it felt a little too on the nose after 2020, but the characters and story was captivating.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Storm Before the Storm\" author=\"Mike Duncan\" link=\"https://bookshop.org/p/books/the-storm-before-the-storm-the-beginning-of-the-end-of-the-roman-republic-mike-duncan/7215014?ean=9781541724037\" image=\"https://i.postimg.cc/TwWvJMC3/storm-before-the-storm.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/TwWvJMC3/storm-before-the-storm.jpg\" alt=\"The Storm Before the Storm\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-storm-before-the-storm-the-beginning-of-the-end-of-the-roman-republic-mike-duncan/7215014?ean=9781541724037\">The Storm Before the Storm</a></div>\n<div class=\"author\">Mike Duncan</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was an interesting look at the last years of the Roman Republic before it became the Roman Empire. I lot of it I didn’t know and Duncan did a good job navigating the different events and characters involved.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The War That Made the Roman Empire\" author=\"Barry Strauss\" link=\"https://bookshop.org/p/books/the-war-that-made-the-roman-empire-antony-cleopatra-and-octavian-at-actium-barry-strauss/18576030?ean=9781982116682\" image=\"https://i.postimg.cc/NFqqNJz7/war-made-roman-empire.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/NFqqNJz7/war-made-roman-empire.jpg\" alt=\"The War That Made the Roman Empire\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-war-that-made-the-roman-empire-antony-cleopatra-and-octavian-at-actium-barry-strauss/18576030?ean=9781982116682\">The War That Made the Roman Empire</a></div>\n<div class=\"author\">Barry Strauss</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Another fantastic book documenting the battle between Octavian and Antony that led to the end of the Roman Republic. Strauss does a fantastic job of laying out the events as they happened with all the characters involved.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>I Enjoyed</h2>\n<p><media-box title=\"Pragmatic Test-Driven Development in C# and .NET\" author=\"Adam Tibi\" link=\"https://bookshop.org/p/books/pragmatic-test-driven-development-in-c-and-net-write-loosely-coupled-documented-and-high-quality-code-with-ddd-using-familiar-tools-and-libraries/18917559?ean=9781803230191\" image=\"https://i.postimg.cc/bwbYBxpB/pragmatic-test-driven-dev.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/bwbYBxpB/pragmatic-test-driven-dev.jpg\" alt=\"Pragmatic Test-Driven Development in C# and .NET\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/pragmatic-test-driven-development-in-c-and-net-write-loosely-coupled-documented-and-high-quality-code-with-ddd-using-familiar-tools-and-libraries/18917559?ean=9781803230191\">Pragmatic Test-Driven Development in C# and .NET</a></div>\n<div class=\"author\">Adam Tibi</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was a good look into test-driven development. Adam did a good job explaining it and showed some examples for those with an idea of what TDD is, and for those with no knowledge of it.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Catch-22\" author=\"Joseph Heller\" link=\"https://bookshop.org/p/books/catch-22-joseph-heller/7060234?ean=9781451626650\" image=\"https://i.postimg.cc/jq7fykFp/catch-22.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/jq7fykFp/catch-22.jpg\" alt=\"Catch-22\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/catch-22-joseph-heller/7060234?ean=9781451626650\">Catch-22</a></div>\n<div class=\"author\">Joseph Heller</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This whole book made me chuckle at some of its ridiculousness. Feels a little like Seinfeld meets the madness of war.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"11/22/63\" author=\"Stephen King\" link=\"https://bookshop.org/p/books/11-22-63-stephen-king/7060372?ean=9781451627299\" image=\"https://i.postimg.cc/HnpL60Nc/112263.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/HnpL60Nc/112263.jpg\" alt=\"11/22/63\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/11-22-63-stephen-king/7060372?ean=9781451627299\">11/22/63</a></div>\n<div class=\"author\">Stephen King</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I really enjoyed this one. It had an interesting premise and the suspense kept me going throughout.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Android’s Dream\" author=\"John Scalzi\" link=\"https://bookshop.org/p/books/the-android-s-dream-john-scalzi/7103015?ean=9781250174758\" image=\"https://i.postimg.cc/jj7C2SN5/androids-dream.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/jj7C2SN5/androids-dream.jpg\" alt=\"The Android’s Dream\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-android-s-dream-john-scalzi/7103015?ean=9781250174758\">The Android’s Dream</a></div>\n<div class=\"author\">John Scalzi</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I enjoyed this. It had a good mix of humor with John Scalzi’s excellent storytelling.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Under the Dome\" author=\"Stephen King\" link=\"https://bookshop.org/p/books/under-the-dome-stephen-king/10569164?ean=9781439149034\" image=\"https://i.postimg.cc/cHGCnGMc/under-the-dome.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/cHGCnGMc/under-the-dome.jpg\" alt=\"Under the Dome\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/under-the-dome-stephen-king/10569164?ean=9781439149034\">Under the Dome</a></div>\n<div class=\"author\">Stephen King</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I enjoyed this. Was a captivating story that made me kept wanting to read more.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Gentle Writing Advice\" author=\"Chuck Wendig\" link=\"https://bookshop.org/p/books/gentle-writing-advice-how-to-be-a-writer-without-destroying-yourself-chuck-wendig/18825636?ean=9781440301209\" image=\"https://i.postimg.cc/dt5MPrLG/chuck-wendig-gentle-writing-advice.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/dt5MPrLG/chuck-wendig-gentle-writing-advice.jpg\" alt=\"Gentle Writing Advice\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/gentle-writing-advice-how-to-be-a-writer-without-destroying-yourself-chuck-wendig/18825636?ean=9781440301209\">Gentle Writing Advice</a></div>\n<div class=\"author\">Chuck Wendig</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>A lot of insight into his thoughts as a writer and some tips to help me figure out what my process should be. It was helpful to read about his thoughts on the craft.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Liar in a Crowded Theater\" author=\"Jeff Kosseff\" link=\"https://bookshop.org/p/books/liar-in-a-crowded-theater-freedom-of-speech-in-a-world-of-misinformation-jeff-kosseff/19780472?ean=9781421447322\" image=\"https://i.postimg.cc/RZT2zd36/liar-in-a-crowded-theater.jpg\" platform=\"hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/RZT2zd36/liar-in-a-crowded-theater.jpg\" alt=\"Liar in a Crowded Theater\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/liar-in-a-crowded-theater-freedom-of-speech-in-a-world-of-misinformation-jeff-kosseff/19780472?ean=9781421447322\">Liar in a Crowded Theater</a></div>\n<div class=\"author\">Jeff Kosseff</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was an interesting look at how strong our first amendment protections are and why, despite the constant threats of mis and disinformation, is such a good thing. It might be easy to want the government to step in, but Jeff Kosseff does a good job explaining why that’s not such a good thing and offers some better alternatives.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Demon of Unrest\" author=\"Erik Larson\" link=\"https://bookshop.org/p/books/the-demon-of-unrest-a-saga-of-hubris-heartbreak-and-heroism-at-the-dawn-of-the-civil-war-erik-larson/20335359\" image=\"https://i.postimg.cc/DzzqQJ6r/demon-of-unrest.jpg\" platform=\"hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/DzzqQJ6r/demon-of-unrest.jpg\" alt=\"The Demon of Unrest\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-demon-of-unrest-a-saga-of-hubris-heartbreak-and-heroism-at-the-dawn-of-the-civil-war-erik-larson/20335359\">The Demon of Unrest</a></div>\n<div class=\"author\">Erik Larson</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was an interesting read describing the run up to the Civil War and the fall of Fort Sumter. It provides interesting insights into the characters involved and some of their motivations.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Good Neighbor\" author=\"Maxwell King\" link=\"https://bookshop.org/books/the-good-neighbor-the-life-and-work-of-fred-rogers-9781419735165/9781419735165\" image=\"https://i.postimg.cc/8k0qg1Hv/the-good-neighbor.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/8k0qg1Hv/the-good-neighbor.jpg\" alt=\"The Good Neighbor\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/books/the-good-neighbor-the-life-and-work-of-fred-rogers-9781419735165/9781419735165\">The Good Neighbor</a></div>\n<div class=\"author\">Maxwell King</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I idolized Mr. Rogers as a child and I thought this was a very fitting biography of him. I’ve heard so much about him growing up and this was a nice look into who he was as a person.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Mercy of Gods\" author=\"James S.A. Corey\" link=\"https://bookshop.org/p/books/the-mercy-of-gods-james-s-a-corey/20886313?ean=9780316525572\" image=\"https://i.postimg.cc/YChy5wPw/the-mercy-of-gods.jpg\" platform=\"hardcover\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/YChy5wPw/the-mercy-of-gods.jpg\" alt=\"The Mercy of Gods\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-mercy-of-gods-james-s-a-corey/20886313?ean=9780316525572\">The Mercy of Gods</a></div>\n<div class=\"author\">James S.A. Corey</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Had a hard time making sure I didn’t pre-judge this based on The Expanse series but this was definitely a solid sci fi story. Interesting premise and characters that left me wanting to read more.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"All Systems Red\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/all-systems-red-martha-wells/7104100\" image=\"https://i.postimg.cc/YCd5PBQT/all-systems-red.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/YCd5PBQT/all-systems-red.jpg\" alt=\"All Systems Red\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/all-systems-red-martha-wells/7104100\">All Systems Red</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was a much faster read than I anticipated. It was still a fun little sci fi story I’d recommend.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Artificial Condition\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/artificial-condition-martha-wells/9858231\" image=\"https://i.postimg.cc/bJWFYg3T/artificial-condition.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/bJWFYg3T/artificial-condition.jpg\" alt=\"Artificial Condition\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/artificial-condition-martha-wells/9858231\">Artificial Condition</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Another good short story set in the Murderbot universe. Fast read and enjoyable.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Rogue Protocol\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/rogue-protocol-martha-wells/9861886\" image=\"https://i.postimg.cc/0yPXNbdL/rogue-protocol.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/0yPXNbdL/rogue-protocol.jpg\" alt=\"Rogue Protocol\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/rogue-protocol-martha-wells/9861886\">Rogue Protocol</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This is the third book in the Murderbot series and the best one I’ve read so far. Good story and a fast, enjoyable read.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Exit Strategy\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/exit-strategy-martha-wells/9861961\" image=\"https://i.postimg.cc/c1tbkqL5/exit-strategy.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/c1tbkqL5/exit-strategy.jpg\" alt=\"Exit Strategy\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/exit-strategy-martha-wells/9861961\">Exit Strategy</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Another solid book in the Murderbot series.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Home\" author=\"Martha Wells\" link=\"https://us.macmillan.com/books/9781250838865/homehabitatrangenicheterritory\" image=\"https://i.postimg.cc/mDxMxMq2/martha-wells-home.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/mDxMxMq2/martha-wells-home.jpg\" alt=\"Home\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://us.macmillan.com/books/9781250838865/homehabitatrangenicheterritory\">Home</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I’m not entirely sure I understand this short story. It’s possible future books might provide some light on it though.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Network Effect\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/network-effect-a-murderbot-novel-martha-wells/13296841\" image=\"https://i.postimg.cc/PJDVCD7k/network-effect.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/PJDVCD7k/network-effect.jpg\" alt=\"Network Effect\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/network-effect-a-murderbot-novel-martha-wells/13296841\">Network Effect</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Another good story in the series. Longer that the earlier books, but captivating and enjoyable.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Fugitive Telemetry\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/fugitive-telemetry-martha-wells/14596858\" image=\"https://i.postimg.cc/vHWSMW9r/fugitive-telemetry.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/vHWSMW9r/fugitive-telemetry.jpg\" alt=\"Fugitive Telemetry\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/fugitive-telemetry-martha-wells/14596858\">Fugitive Telemetry</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Another solid book in the series, this time with a true crime kind of vibe.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"System Collapse\" author=\"Martha Wells\" link=\"https://bookshop.org/p/books/system-collapse-martha-wells/19538545\" image=\"https://i.postimg.cc/g2sSLmgr/system-collapse.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/g2sSLmgr/system-collapse.jpg\" alt=\"System Collapse\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/system-collapse-martha-wells/19538545\">System Collapse</a></div>\n<div class=\"author\">Martha Wells</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Another solid story in the series. Going to have to wait until the next, sadly.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Battle Cry of Freedom\" author=\"James M. McPherson\" link=\"https://bookshop.org/p/books/battle-cry-of-freedom-the-civil-war-era-james-m-mcpherson/7413205?ean=9780195168952\" image=\"https://i.postimg.cc/TPQzxnz7/battlecry-of-freedom.jpg\" platform=\"ebook\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/TPQzxnz7/battlecry-of-freedom.jpg\" alt=\"Battle Cry of Freedom\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/battle-cry-of-freedom-the-civil-war-era-james-m-mcpherson/7413205?ean=9780195168952\">Battle Cry of Freedom</a></div>\n<div class=\"author\">James M. McPherson</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was a fascinating, albeit long read into the history of the Civil War. It provided a lot of details that I had not fully known and I would recommend it to anyone interested in history.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Book of Accidents\" author=\"Chuck Wendig\" link=\"https://bookshop.org/p/books/the-book-of-accidents-chuck-wendig/15648326?ean=9780399182150\" image=\"https://i.postimg.cc/RVCx23nM/the-book-of-accidents.jpg\" platform=\"paperback\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/RVCx23nM/the-book-of-accidents.jpg\" alt=\"The Book of Accidents\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-book-of-accidents-chuck-wendig/15648326?ean=9780399182150\">The Book of Accidents</a></div>\n<div class=\"author\">Chuck Wendig</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I enjoyed this. It had some good twists and turns with the right amount of creepiness I would expect from Wendig. Also, if you’re a Stephen King fan, you’d really enjoy this.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Grit\" author=\"Angela Duckworth\" link=\"https://bookshop.org/p/books/grit-the-power-of-passion-and-perseverance-angela-duckworth/6700116?ean=9781501111112\" image=\"https://i.postimg.cc/W4yPZbmy/grit.jpg\" platform=\"paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/W4yPZbmy/grit.jpg\" alt=\"Grit\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/grit-the-power-of-passion-and-perseverance-angela-duckworth/6700116?ean=9781501111112\">Grit</a></div>\n<div class=\"author\">Angela Duckworth</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>It was an interesting read and gives me thoughts on how to improve myself and rethink my outlook on life.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Easy Money\" author=\"Ben McKenzie\" link=\"https://bookshop.org/p/books/easy-money-cryptocurrency-casino-capitalism-and-the-golden-age-of-fraud-jacob-silverman/18699362?ean=9781419766398\" image=\"https://i.postimg.cc/fTVRx4FZ/easy-money.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/fTVRx4FZ/easy-money.jpg\" alt=\"Easy Money\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/easy-money-cryptocurrency-casino-capitalism-and-the-golden-age-of-fraud-jacob-silverman/18699362?ean=9781419766398\">Easy Money</a></div>\n<div class=\"author\">Ben McKenzie</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I had already learned most of the history of much of the crypto-nonsense from other sources, but this was a good refresher. It does a good job pointing out the many similarities between crypto, Ponzi schemes and gambling.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Parallel Programming and Concurrency with C# 10 and .NET 6\" author=\"Alvin Ashcraft\" link=\"https://bookshop.org/p/books/parallel-programming-and-concurrency-with-c-10-and-net-6-a-modern-approach-to-building-faster-more-responsive-and-asynchronous-net-applications-alvin-/18757208?ean=9781803243672\" image=\"https://i.postimg.cc/DzTfkSzy/parallel-programming-and-concurrency.jpg\" platform=\"paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/DzTfkSzy/parallel-programming-and-concurrency.jpg\" alt=\"Parallel Programming and Concurrency with C# 10 and .NET 6\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/parallel-programming-and-concurrency-with-c-10-and-net-6-a-modern-approach-to-building-faster-more-responsive-and-asynchronous-net-applications-alvin-/18757208?ean=9781803243672\">Parallel Programming and Concurrency with C# 10 and .NET 6</a></div>\n<div class=\"author\">Alvin Ashcraft</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Was informative. Learned a bunch, but was tough to wrap my head around some of it. Figure more will make sense as I apply what I learned and write code.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Sea of Tranquility\" author=\"Emily St. John Mandel\" link=\"https://bookshop.org/p/books/sea-of-tranquility-emily-st-john-mandel/17768221?ean=9780593466735\" image=\"https://i.postimg.cc/sDbDm6dW/sea-of-tranquility.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/sDbDm6dW/sea-of-tranquility.jpg\" alt=\"Sea of Tranquility\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/sea-of-tranquility-emily-st-john-mandel/17768221?ean=9780593466735\">Sea of Tranquility</a></div>\n<div class=\"author\">Emily St. John Mandel</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>An interesting premise and a fun story. Was a quick read and enjoyable.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Salem's Lot\" author=\"Stephen King\" link=\"https://bookshop.org/books/salem-s-lot/9780307743671\" image=\"https://i.postimg.cc/7L4cvZnL/salems-lot.jpg\" platform=\"paperback\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/7L4cvZnL/salems-lot.jpg\" alt=\"Salem's Lot\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/books/salem-s-lot/9780307743671\">Salem's Lot</a></div>\n<div class=\"author\">Stephen King</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>It was a little predictable in some aspects, but I enjoyed it.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Making It So\" author=\"Patrick Stewart\" link=\"https://bookshop.org/p/books/making-it-so-a-memoir-patrick-stewart/19811025?ean=9781982167738\" image=\"https://i.postimg.cc/cLjrdnv2/making-it-so.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/cLjrdnv2/making-it-so.jpg\" alt=\"Making It So\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/making-it-so-a-memoir-patrick-stewart/19811025?ean=9781982167738\">Making It So</a></div>\n<div class=\"author\">Patrick Stewart</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>An interesting look back at Patrick Stewart’s life.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Holly\" author=\"Stephen King\" link=\"https://bookshop.org/p/books/holly-stephen-king/19655404?ean=9781668016138\" image=\"https://i.postimg.cc/kGfgz6rj/holly.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/kGfgz6rj/holly.jpg\" alt=\"Holly\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/holly-stephen-king/19655404?ean=9781668016138\">Holly</a></div>\n<div class=\"author\">Stephen King</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I enjoyed this. Was a little different than I expected, but not in a bad way.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Red Team Blues\" author=\"Cory Doctorow\" link=\"https://bookshop.org/p/books/red-team-blues-cory-doctorow/18693516?ean=9781250865847\" image=\"https://i.postimg.cc/C1ZLXbYX/cory-doctorow-red-team-blues.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/C1ZLXbYX/cory-doctorow-red-team-blues.jpg\" alt=\"Red Team Blues\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/red-team-blues-cory-doctorow/18693516?ean=9781250865847\">Red Team Blues</a></div>\n<div class=\"author\">Cory Doctorow</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>A fast read and a good story. If you’re a fan of Doctorow’s writing, you’ll like this.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Lost Cause\" author=\"Cory Doctorow\" link=\"https://bookshop.org/book/9781250865939\" image=\"https://i.postimg.cc/3RPJTWxR/cory-doctorow-lost-cause.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/3RPJTWxR/cory-doctorow-lost-cause.jpg\" alt=\"Lost Cause\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/book/9781250865939\">Lost Cause</a></div>\n<div class=\"author\">Cory Doctorow</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Interesting story with a hopeful look towards the future dealing with climate and intolerance.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Bezzle\" author=\"Cory Doctorow\" link=\"https://bookshop.org/p/books/the-bezzle-a-martin-hench-novel-cory-doctorow/20001531\" image=\"https://i.postimg.cc/kGKMX92y/cory-doctorow-the-bezzle.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/kGKMX92y/cory-doctorow-the-bezzle.jpg\" alt=\"The Bezzle\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-bezzle-a-martin-hench-novel-cory-doctorow/20001531\">The Bezzle</a></div>\n<div class=\"author\">Cory Doctorow</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>It was an interesting story with good characters and a nice level of suspense. Quick read as well.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Blood Telegram\" author=\"Gary J. Bass\" link=\"https://bookshop.org/p/books/the-blood-telegram-nixon-kissinger-and-a-forgotten-genocide-gary-j-bass/9789502?ean=9780307744623\" image=\"https://i.postimg.cc/zGN4M6fY/the-blood-telegram.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/zGN4M6fY/the-blood-telegram.jpg\" alt=\"The Blood Telegram\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-blood-telegram-nixon-kissinger-and-a-forgotten-genocide-gary-j-bass/9789502?ean=9780307744623\">The Blood Telegram</a></div>\n<div class=\"author\">Gary J. Bass</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This was an informative read about events I was unaware of. It also provided a look into the Nixon White House that clearly matches the reputation of Nixon and Kissinger.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Firm\" author=\"John Grisham\" link=\"https://bookshop.org/p/books/the-firm-john-grisham/7309328?ean=9780385319058\" image=\"https://i.postimg.cc/02X8mG0K/john-grisham-the-firm.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/02X8mG0K/john-grisham-the-firm.jpg\" alt=\"The Firm\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-firm-john-grisham/7309328?ean=9780385319058\">The Firm</a></div>\n<div class=\"author\">John Grisham</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This didn’t necessarily feel like something I normally read, but it was still a captivating story. The characters felt believable and there were points I didn’t want to put it down.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Internet Con\" author=\"Cory Doctorow\" link=\"https://bookshop.org/p/books/the-internet-con-how-to-seize-the-means-of-computation-cory-doctorow/18771891?ean=9781804291245\" image=\"https://i.postimg.cc/6Q5g6ZRH/the-internet-con.jpg\" platform=\"hardcover\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/6Q5g6ZRH/the-internet-con.jpg\" alt=\"The Internet Con\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-internet-con-how-to-seize-the-means-of-computation-cory-doctorow/18771891?ean=9781804291245\">The Internet Con</a></div>\n<div class=\"author\">Cory Doctorow</div>\n</div>\n<platform-tag platform=\"hardcover\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag hardcover\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" aria-hidden=\"true\" viewBox=\"0 0 16 16\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tHardcover\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>I appreciate Cory Doctorow’s writing about tech and this is no different. He does a good job explaining the issues with the tech giants and how they got so large and powerful, as well as some ways to limit their power and give us more power in the process.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Station Eleven\" author=\"Emily St. John Mandel\" link=\"https://bookshop.org/p/books/station-eleven-emily-st-john-mandel/586327?ean=9780804172448\" image=\"https://i.postimg.cc/pTDHxysT/station-eleven.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/pTDHxysT/station-eleven.jpg\" alt=\"Station Eleven\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/station-eleven-emily-st-john-mandel/586327?ean=9780804172448\">Station Eleven</a></div>\n<div class=\"author\">Emily St. John Mandel</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>An interesting story that in some cases felt like it hit a little too close to 2020, but was still enjoyable with a good amount of suspense to want to know what happens next.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Zero Days\" author=\"Ruth Ware\" link=\"https://bookshop.org/p/books/zero-days/18899219\" image=\"https://i.postimg.cc/L5w7tTXD/zero-days.jpg\" platform=\"ebook\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/L5w7tTXD/zero-days.jpg\" alt=\"Zero Days\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/zero-days/18899219\">Zero Days</a></div>\n<div class=\"author\">Ruth Ware</div>\n</div>\n<platform-tag platform=\"ebook\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag ebook\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z\"></path>\n\t\t\t<path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2\"></path>\n\t\t</svg>\n\t\teBook\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>This felt a little different than what I normally read, but it was suspenseful and fun to read.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Meh</h2>\n<p><media-box title=\"Starship Troopers\" author=\"Robert A. Heinlein\" link=\"https://bookshop.org/p/books/starship-troopers-robert-a-heinlein/15024441?ean=9780441014101\" image=\"https://i.postimg.cc/xCGCGp6V/starship-troopers.jpg\" platform=\"paperback\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/xCGCGp6V/starship-troopers.jpg\" alt=\"Starship Troopers\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/starship-troopers-robert-a-heinlein/15024441?ean=9780441014101\">Starship Troopers</a></div>\n<div class=\"author\">Robert A. Heinlein</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>To be blunt, I’m not sure why so many speak so highly of this.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"State of Fear\" author=\"Michael Crichton\" link=\"https://bookshop.org/p/books/state-of-fear-michael-crichton/6431901?ean=9780061782664\" image=\"https://i.postimg.cc/QdVFLbdc/state-of-fear.jpg\" platform=\"paperback\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/QdVFLbdc/state-of-fear.jpg\" alt=\"State of Fear\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://bookshop.org/p/books/state-of-fear-michael-crichton/6431901?ean=9780061782664\">State of Fear</a></div>\n<div class=\"author\">Michael Crichton</div>\n</div>\n<platform-tag platform=\"paperback\"></platform-tag></div></div></div></media-box></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag paperback\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783\"></path>\n\t\t</svg>\n\t\tPaperback\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>Interesting story but the anti-climate change messaging rubbed me the wrong way, even considering the time it was written.</p>\n\n<p></p>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-06T23:07:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/06/taking-a-social-media-hiatus/",
      "url": "https://kpwags.com/posts/2025/01/06/taking-a-social-media-hiatus/",
      "title": "Taking a Social Media Hiatus",
      "content_html": "\n\t\t<p>I’ve known for a while that I sometimes spend too much time on social media. I also know with the latest election and upcoming administration, I have a tendency to doom scroll a little too much. In an attempt to regain focus and a little bit of self-care, I’m going to take a step back from all social media.</p>\n<p>I’ve been considering this for a little while now after the election and the flood of bad news. Having recently read <a href=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448?ean=9780525536512\">Digital Minimalism</a>, it gave me the kick in the ass to do what I should have done before.</p>\n<p>I figure it will give me two distinct benefits. First, it will hopefully allow me to focus on my <a href=\"https://kpwags.com/posts/2025/01/04/my-2025-aspirations/\">aspirations</a>. Second, it will hopefully help my mental health and strengthen me to deal with the next 4 years.</p>\n<p>I do intend to remain active on my site here blogging, so don’t hesitate to reach out and reply via email.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-06T22:07:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/05/video-games-i-played-in-2024/",
      "url": "https://kpwags.com/posts/2025/01/05/video-games-i-played-in-2024/",
      "title": "Video Games I Played in 2024",
      "content_html": "\n\t\t<p>I played more games in 2024 than I had in years prior. It's part of the reason I want to tackle more of my backlog this year.</p>\n<p><media-box title=\"Horizon Forbidden West: Burning Shores\" image=\"https://i.postimg.cc/8PdFPv4Z/horizon-burning-shores.jpg\" link=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/burning-shores/\" rating=\"5\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/8PdFPv4Z/horizon-burning-shores.jpg\" alt=\"Horizon Forbidden West: Burning Shores\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/burning-shores/\">Horizon Forbidden West: Burning Shores</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nI've loved the <em>Horizon</em> series and this was a nice addendum for Forbidden West.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Mass Effect\" image=\"https://i.postimg.cc/vHwgshr1/mass-effect.jpg\" link=\"https://www.ea.com/games/mass-effect\" rating=\"4\" platform=\"xbox\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/vHwgshr1/mass-effect.jpg\" alt=\"Mass Effect\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/mass-effect\">Mass Effect</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"xbox\"><div class=\"platform-tag\">\n<span class=\"tag xbox\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n<path d=\"M7.202 15.967a8 8 0 0 1-3.552-1.26c-.898-.585-1.101-.826-1.101-1.306 0-.965 1.062-2.656 2.879-4.583C6.459 7.723 7.897 6.44 8.052 6.475c.302.068 2.718 2.423 3.622 3.531 1.43 1.753 2.088 3.189 1.754 3.829-.254.486-1.83 1.437-2.987 1.802-.954.301-2.207.429-3.239.33m-5.866-3.57C.589 11.253.212 10.127.03 8.497c-.06-.539-.038-.846.137-1.95.218-1.377 1.002-2.97 1.945-3.95.401-.417.437-.427.926-.263.595.2 1.23.638 2.213 1.528l.574.519-.313.385C4.056 6.553 2.52 9.086 1.94 10.653c-.315.852-.442 1.707-.306 2.063.091.24.007.15-.3-.319Zm13.101.195c.074-.36-.019-1.02-.238-1.687-.473-1.443-2.055-4.128-3.508-5.953l-.457-.575.494-.454c.646-.593 1.095-.948 1.58-1.25.381-.237.927-.448 1.161-.448.145 0 .654.528 1.065 1.104a8.4 8.4 0 0 1 1.343 3.102c.153.728.166 2.286.024 3.012a9.5 9.5 0 0 1-.6 1.893c-.179.393-.624 1.156-.82 1.404-.1.128-.1.127-.043-.148ZM7.335 1.952c-.67-.34-1.704-.705-2.276-.803a4 4 0 0 0-.759-.043c-.471.024-.45 0 .306-.358A7.8 7.8 0 0 1 6.47.128c.8-.169 2.306-.17 3.094-.005.85.18 1.853.552 2.418.9l.168.103-.385-.02c-.766-.038-1.88.27-3.078.853-.361.176-.676.316-.699.312a12 12 0 0 1-.654-.319Z\"></path>\n</svg>\nXBOX\n</span></div></platform-tag></p>\n\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI had started this game so many times but never finished. I'm glad I did this time. I enjoyed it. The story was decent, but set up the rest of the trilogy well.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Mass Effect 2\" image=\"https://i.postimg.cc/kgnrcy87/mass-effect-2.jpg\" link=\"https://www.ea.com/games/mass-effect\" rating=\"5\" platform=\"xbox\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/kgnrcy87/mass-effect-2.jpg\" alt=\"Mass Effect 2\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 2</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"xbox\"><div class=\"platform-tag\">\n<span class=\"tag xbox\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n<path d=\"M7.202 15.967a8 8 0 0 1-3.552-1.26c-.898-.585-1.101-.826-1.101-1.306 0-.965 1.062-2.656 2.879-4.583C6.459 7.723 7.897 6.44 8.052 6.475c.302.068 2.718 2.423 3.622 3.531 1.43 1.753 2.088 3.189 1.754 3.829-.254.486-1.83 1.437-2.987 1.802-.954.301-2.207.429-3.239.33m-5.866-3.57C.589 11.253.212 10.127.03 8.497c-.06-.539-.038-.846.137-1.95.218-1.377 1.002-2.97 1.945-3.95.401-.417.437-.427.926-.263.595.2 1.23.638 2.213 1.528l.574.519-.313.385C4.056 6.553 2.52 9.086 1.94 10.653c-.315.852-.442 1.707-.306 2.063.091.24.007.15-.3-.319Zm13.101.195c.074-.36-.019-1.02-.238-1.687-.473-1.443-2.055-4.128-3.508-5.953l-.457-.575.494-.454c.646-.593 1.095-.948 1.58-1.25.381-.237.927-.448 1.161-.448.145 0 .654.528 1.065 1.104a8.4 8.4 0 0 1 1.343 3.102c.153.728.166 2.286.024 3.012a9.5 9.5 0 0 1-.6 1.893c-.179.393-.624 1.156-.82 1.404-.1.128-.1.127-.043-.148ZM7.335 1.952c-.67-.34-1.704-.705-2.276-.803a4 4 0 0 0-.759-.043c-.471.024-.45 0 .306-.358A7.8 7.8 0 0 1 6.47.128c.8-.169 2.306-.17 3.094-.005.85.18 1.853.552 2.418.9l.168.103-.385-.02c-.766-.038-1.88.27-3.078.853-.361.176-.676.316-.699.312a12 12 0 0 1-.654-.319Z\"></path>\n</svg>\nXBOX\n</span></div></platform-tag></p>\n\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nThe game grew on me. Initially I thought I liked the original better, but I think that’s changed. This game had some good fights and better character building.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Mass Effect 3\" image=\"https://i.postimg.cc/VL9QnhJ7/mass-effect-3.jpg\" link=\"https://www.ea.com/games/mass-effect\" rating=\"5\" platform=\"xbox\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/VL9QnhJ7/mass-effect-3.jpg\" alt=\"Mass Effect 3\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 3</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"xbox\"><div class=\"platform-tag\">\n<span class=\"tag xbox\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n<path d=\"M7.202 15.967a8 8 0 0 1-3.552-1.26c-.898-.585-1.101-.826-1.101-1.306 0-.965 1.062-2.656 2.879-4.583C6.459 7.723 7.897 6.44 8.052 6.475c.302.068 2.718 2.423 3.622 3.531 1.43 1.753 2.088 3.189 1.754 3.829-.254.486-1.83 1.437-2.987 1.802-.954.301-2.207.429-3.239.33m-5.866-3.57C.589 11.253.212 10.127.03 8.497c-.06-.539-.038-.846.137-1.95.218-1.377 1.002-2.97 1.945-3.95.401-.417.437-.427.926-.263.595.2 1.23.638 2.213 1.528l.574.519-.313.385C4.056 6.553 2.52 9.086 1.94 10.653c-.315.852-.442 1.707-.306 2.063.091.24.007.15-.3-.319Zm13.101.195c.074-.36-.019-1.02-.238-1.687-.473-1.443-2.055-4.128-3.508-5.953l-.457-.575.494-.454c.646-.593 1.095-.948 1.58-1.25.381-.237.927-.448 1.161-.448.145 0 .654.528 1.065 1.104a8.4 8.4 0 0 1 1.343 3.102c.153.728.166 2.286.024 3.012a9.5 9.5 0 0 1-.6 1.893c-.179.393-.624 1.156-.82 1.404-.1.128-.1.127-.043-.148ZM7.335 1.952c-.67-.34-1.704-.705-2.276-.803a4 4 0 0 0-.759-.043c-.471.024-.45 0 .306-.358A7.8 7.8 0 0 1 6.47.128c.8-.169 2.306-.17 3.094-.005.85.18 1.853.552 2.418.9l.168.103-.385-.02c-.766-.038-1.88.27-3.078.853-.361.176-.676.316-.699.312a12 12 0 0 1-.654-.319Z\"></path>\n</svg>\nXBOX\n</span></div></platform-tag></p>\n\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nI enjoyed the gameplay and they tied up the story pretty well. Ending was fitting, but partially disappointing at the same time. Although that could be my investment in the story and what I hoped would happen.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ratchet &amp; Clank: A Rift Apart\" image=\"https://i.postimg.cc/13G1qJym/ratchet-clank-rift-apart.jpg\" link=\"https://www.playstation.com/en-us/games/ratchet-and-clank-rift-apart/\" rating=\"4\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/13G1qJym/ratchet-clank-rift-apart.jpg\" alt=\"Ratchet &amp; Clank: A Rift Apart\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.playstation.com/en-us/games/ratchet-and-clank-rift-apart/\">Ratchet &amp; Clank: A Rift Apart</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was my first Ratchet &amp; Clank game and I enjoyed it. It was fast paced and enjoyable. Some of the battles felt a little repetitive but not too bad.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Last of Us\" image=\"https://i.postimg.cc/X7NtCpfB/last-of-us.jpg\" link=\"https://www.playstation.com/en-us/games/the-last-of-us-remastered/\" rating=\"5\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/X7NtCpfB/last-of-us.jpg\" alt=\"The Last of Us\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.playstation.com/en-us/games/the-last-of-us-remastered/\">The Last of Us</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nThe story was phenomenal. Gameplay was mostly fun, but sometimes incredibly frustrating.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Super Mario RPG\" image=\"https://i.postimg.cc/L8Z0qdSY/mario-rpg.jpg\" link=\"https://www.nintendo.com/us/store/products/super-mario-rpg-switch/\" rating=\"4\" platform=\"nintendo\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/L8Z0qdSY/mario-rpg.jpg\" alt=\"Super Mario RPG\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.nintendo.com/us/store/products/super-mario-rpg-switch/\">Super Mario RPG</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"nintendo\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag nintendo\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M9.34 8.005c0-4.38.01-7.972.023-7.982C9.373.01 10.036 0 10.831 0c1.153 0 1.51.01 1.743.05 1.73.298 3.045 1.6 3.373 3.326.046.242.053.809.053 4.61 0 4.06.005 4.537-.123 4.976-.022.076-.048.15-.08.242a4.14 4.14 0 0 1-3.426 2.767c-.317.033-2.889.046-2.978.013-.05-.02-.053-.752-.053-7.979m4.675.269a1.62 1.62 0 0 0-1.113-1.034 1.61 1.61 0 0 0-1.938 1.073 1.9 1.9 0 0 0-.014.935 1.63 1.63 0 0 0 1.952 1.107c.51-.136.908-.504 1.11-1.028.11-.285.113-.742.003-1.053M3.71 3.317c-.208.04-.526.199-.695.348-.348.301-.52.729-.494 1.232.013.262.03.332.136.544.155.321.39.556.712.715.222.11.278.123.567.133.261.01.354 0 .53-.06.719-.242 1.153-.94 1.03-1.656-.142-.852-.95-1.422-1.786-1.256\"></path>\n\t\t\t<path d=\"M3.425.053a4.14 4.14 0 0 0-3.28 3.015C0 3.628-.01 3.956.005 8.3c.01 3.99.014 4.082.08 4.39.368 1.66 1.548 2.844 3.224 3.235.22.05.497.06 2.29.07 1.856.012 2.048.009 2.097-.04.05-.05.053-.69.053-7.94 0-5.374-.01-7.906-.033-7.952-.033-.06-.09-.063-2.03-.06-1.578.004-2.052.014-2.26.05Zm3 14.665-1.35-.016c-1.242-.013-1.375-.02-1.623-.083a2.81 2.81 0 0 1-2.08-2.167c-.074-.335-.074-8.579-.004-8.907a2.85 2.85 0 0 1 1.716-2.05c.438-.176.64-.196 2.058-.2l1.282-.003v13.426Z\"></path>\n\t\t</svg>\n\t\tNintendo Switch\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI remember playing this game as a kid. They did a fantastic job on the remake keeping all the good parts. The gameplay is fun as it was before and a different kind of Mario story.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Last of Us, Part II\" image=\"https://i.postimg.cc/4y1kTScR/last-of-us-2.jpg\" link=\"https://www.playstation.com/en-us/games/the-last-of-us-part-ii-remastered/\" rating=\"5\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/4y1kTScR/last-of-us-2.jpg\" alt=\"The Last of Us, Part II\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.playstation.com/en-us/games/the-last-of-us-part-ii-remastered/\">The Last of Us, Part II</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nI liked the gameplay a little better in this game compared to the first. The story continued to be captivating as well.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"MLB The Show 24\" image=\"https://i.postimg.cc/1zpKPnTF/mlb24.jpg\" link=\"https://theshow.com/\" rating=\"4\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/1zpKPnTF/mlb24.jpg\" alt=\"MLB The Show 24\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://theshow.com/\">MLB The Show 24</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nMLB The Show continues to do a great job making baseball games.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"NHL 24\" image=\"https://i.postimg.cc/RZrzxWMc/nhl24.jpg\" link=\"https://www.ea.com/games/nhl/nhl-24\" rating=\"3\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/RZrzxWMc/nhl24.jpg\" alt=\"NHL 24\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/nhl/nhl-24\">NHL 24</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA solid hockey game.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Madden 25\" image=\"https://i.postimg.cc/52wW4f0D/madden25.jpg\" link=\"https://www.ea.com/games/madden-nfl/madden-nfl-25\" rating=\"3\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/52wW4f0D/madden25.jpg\" alt=\"Madden 25\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.ea.com/games/madden-nfl/madden-nfl-25\">Madden 25</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nEh, typical Madden game, but I felt like previous years were better.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"God of War\" image=\"https://i.postimg.cc/wTFG8Zxs/god-of-war.jpg\" link=\"https://www.playstation.com/en-us/god-of-war/\" platform=\"playstation\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/wTFG8Zxs/god-of-war.jpg\" alt=\"God of War\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.playstation.com/en-us/god-of-war/\">God of War</a></div></div></div></div></div></media-box></p>\n<p>\n<platform-tag platform=\"playstation\"></platform-tag></p>\n<div class=\"platform-tag\">\n\t<span class=\"tag playstation\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n\t\t\t<path d=\"M15.858 11.451c-.313.395-1.079.676-1.079.676l-5.696 2.046v-1.509l4.192-1.493c.476-.17.549-.412.162-.538-.386-.127-1.085-.09-1.56.08l-2.794.984v-1.566l.161-.054s.807-.286 1.942-.412c1.135-.125 2.525.017 3.616.43 1.23.39 1.368.962 1.056 1.356M9.625 8.883v-3.86c0-.453-.083-.87-.508-.988-.326-.105-.528.198-.528.65v9.664l-2.606-.827V2c1.108.206 2.722.692 3.59.985 2.207.757 2.955 1.7 2.955 3.825 0 2.071-1.278 2.856-2.903 2.072Zm-8.424 3.625C-.061 12.15-.271 11.41.304 10.984c.532-.394 1.436-.69 1.436-.69l3.737-1.33v1.515l-2.69.963c-.474.17-.547.411-.161.538.386.126 1.085.09 1.56-.08l1.29-.469v1.356l-.257.043a8.45 8.45 0 0 1-4.018-.323Z\"></path>\n\t\t</svg>\n\t\tPlayStation\n\t</span>\n</div>\n<style>\n\t.platform-tag {\n\t\tmargin: 0;\n\t}\n\n\t.platform-tag .tag {\n\t\tpadding: 4px 16px;\n\t\tborder-radius: 12px;\n\t\tdisplay: inline-flex;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 12px;\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.xbox {\n\t\tbackground-color: oklch(50.41% 0.1647 142.58);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.pc {\n\t\tbackground-color: oklch(0.4125 0.0789 294.88);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.playstation {\n\t\tbackground-color: oklch(54.26% 0.1678 253.1);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.nintendo {\n\t\tbackground-color: oklch(58.14% 0.2375 27.86);\n\t\tcolor: var(--white);\n\t}\n\n\t.platform-tag .tag.audiobook {\n\t\tbackground-color: oklch(49.12% 0.2171 312.35);\n\t}\n\n\t.platform-tag .tag.hardcover {\n\t\tbackground-color: oklch(49.12% 0.0913 65.65);\n\t}\n\n\t.platform-tag .tag.paperback {\n\t\tbackground-color: oklch(47.94% 0.1653 0);\n\t}\n\n\t.platform-tag .tag.ebook {\n\t\tbackground-color: oklch(49.12% 0.0814 227.65);\n\t}\n\n\t.platform-tag .tag svg {\n\t\tfill: var(--white);\n\t\twidth: 12px;\n\t\theight: 12px;\n\t}\n</style>\n<p></p><p>\nI'm still playing this, so I can't fully comment on it, but I'm enjoying it so far.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-05T22:46:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/31/",
      "url": "https://kpwags.com/week-note/31/",
      "title": "Week Notes for December 29 to January 4 (#31)",
      "content_html": "\n\t\t<p>My week notes for the week of December 29, 2024 - January 4, 2025.</p>\n<h2>Notes</h2>\n<h3>Unseasonably Warm Weather</h3>\n<p>The weather warmed this week into the 50s and 60s. Sunday I took advantage and went to Valley Forge for a run. Managed to run 5 miles with a sub-11 minute pace which is kind of crazy considering how hilly it is in comparison to what I normally run. I followed it up with another 5 mile run on Monday. This nice weather (probably?) won't hold, so I'm going to take advantage.</p>\n<h3>Menzingers Concert</h3>\n<p><a href=\"https://themenzingers.com/\">The Menzingers</a>, who are one of my favorite bands, were playing back-to-back shows at The Ardmore Music Hall on the 30th and 31st to bring in the new year. My wife and I went to the show on the 30th with <a href=\"https://crossedkeys.net/\">Crossed Keys</a> and <a href=\"https://www.gladie.net/\">Gladie</a>. The show was fun and loud. I've started going back through all the concerts I've gone to, and I think the count for The Menzingers is now at 8.</p>\n<h3>A Quiet New Year’s Eve</h3>\n<p>My wife and I generally try to stay in on New Year’s Eve. We don’t really want to have to deal with being out with all the crowds, figuring out how we’re getting to wherever it is we want to go to, and also dealing with those who might not be making smart decisions driving home. To make it simple, we just stay at home cuddled on the couch watching a movie or TV series, reading, or just being in each other’s company. It works for us. This year was more of the same.</p>\n<h3>Back to Work</h3>\n<p>Whether I liked it or not, my time off ended and I had to go back to work on Thursday. Thankfully there weren’t really any big items that came up while I was gone so I was able to ease myself back in.</p>\n<h3>Increasing My Focus</h3>\n<p>One thing I’ve noticed over the last several years was that it’s been increasingly easy to get distracted when I’m trying to get things done. A lot of it comes from my iPhone and social media. After reading <a href=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448?ean=9780525536512\">Digital Minimalism</a> by Cal Newport, I think I’m going to try to follow some of his advice and try to be more intentional with my use of my smart phone and social media. We’ll see how it goes.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.citationneeded.news/elon-musk-and-the-rights-war-on-wikipedia/\">Elon Musk and the right’s war on Wikipedia</a></h3>\n\t<div class=\"posted-by\">Molly White</div>\n<p>Yet another assault on the truth from conservatives. Molly does a good job writing about debunking their assaults on Wikipedia as well as the truth behind how Wikipedia operates.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-05T22:39:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/04/tv-i-watched-in-2024/",
      "url": "https://kpwags.com/posts/2025/01/04/tv-i-watched-in-2024/",
      "title": "TV I Watched in 2024",
      "content_html": "\n\t\t<p>Most of the TV I watched this year was with my wife, though I managed to watch a few of the ones on my list as well.</p>\n<h2>My Favorites</h2>\n<p><media-box title=\"Star Trek: Lower Decks\" image=\"https://i.postimg.cc/KzkqStqt/lowerdecks.jpg\" link=\"https://www.imdb.com/title/tt9184820/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/KzkqStqt/lowerdecks.jpg\" alt=\"Star Trek: Lower Decks\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nI was so sad when they announced season 5 was the last season. I loved this series. It did such a fantastic job of mixing humor and the essence of Star Trek. So many great Easter eggs as well. It’s such a shame that it was cancelled so soon.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Last of Us\" image=\"https://i.postimg.cc/J4NHSJqC/the-last-of-us.jpg\" link=\"https://m.imdb.com/title/tt3581920/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/J4NHSJqC/the-last-of-us.jpg\" alt=\"The Last of Us\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://m.imdb.com/title/tt3581920/\">The Last of Us</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nSeason 1 of The Last of Us was amazing. It did such a great job bringing the first game to the screen. I can't wait for season 2.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Fallout\" image=\"https://i.postimg.cc/MHbQygDP/fallout.jpg\" link=\"https://www.imdb.com/title/tt12637874/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/MHbQygDP/fallout.jpg\" alt=\"Fallout\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt12637874/\">Fallout</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nSeason 1 was fantastic, it definitely matched the spirit of the games.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Turning Point: The Bomb and the Cold War\" image=\"https://i.postimg.cc/MpRmKYN6/turning-point.jpg\" link=\"https://www.imdb.com/title/tt26227818/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/MpRmKYN6/turning-point.jpg\" alt=\"Turning Point: The Bomb and the Cold War\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt26227818/\">Turning Point: The Bomb and the Cold War</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nThis was an incredibly interesting documentary about the Cold War, Nuclear Weapons, and the current state of the world with regards to Russia.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Mandalorian\" image=\"https://i.postimg.cc/j2yMCtr5/mandalorian.jpg\" link=\"https://www.imdb.com/title/tt8111088/\" rating=\"5\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/j2yMCtr5/mandalorian.jpg\" alt=\"The Mandalorian\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt8111088/\">The Mandalorian</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><div class=\"rating\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg>\n<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n</svg><p></p>\n</div>\n<p></p><p>\nI really enjoyed each season of this. Some good characters and some interesting storylines.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Star Trek: Discovery\" image=\"https://i.postimg.cc/k4Lwdryf/star-trek-discovery.jpg\" link=\"https://www.imdb.com/title/tt5171438/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/k4Lwdryf/star-trek-discovery.jpg\" alt=\"Star Trek: Discovery\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt5171438/\">Star Trek: Discovery</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThe show had its ups and downs. I enjoyed most of the stories and its characters. It’s a shame it had to end so soon.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ted Lasso\" image=\"https://i.postimg.cc/1tqHYsXH/tedlasso.jpg\" link=\"https://www.imdb.com/title/tt10986410/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/1tqHYsXH/tedlasso.jpg\" alt=\"Ted Lasso\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt10986410/\">Ted Lasso</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI really enjoyed this. Had some great characters, good humor, and was down to earth. Kind of want to get into soccer now.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Only Murderers in the Building\" image=\"https://i.postimg.cc/2ypsjtLd/only-murderers-in-the-building.jpg\" link=\"https://www.imdb.com/title/tt11691774/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/2ypsjtLd/only-murderers-in-the-building.jpg\" alt=\"Only Murderers in the Building\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt11691774/\">Only Murderers in the Building</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWe made it through season 4 and it's been enjoyable. A good cast, with some good laughs.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Challenger: Final Flight\" image=\"https://i.postimg.cc/gk6MByXp/challengerfinalflight.jpg\" link=\"https://www.imdb.com/title/tt12930534/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/gk6MByXp/challengerfinalflight.jpg\" alt=\"Challenger: Final Flight\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt12930534/\">Challenger: Final Flight</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nIt was a good look at what happened with Challenger. It maintains the focus of the human side while also looking at the warnings NASA received and its lack of action that caused the tragedy.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Stand\" image=\"https://i.postimg.cc/dtb27Hw1/the-stand.jpg\" link=\"https://www.imdb.com/title/tt1831804/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/dtb27Hw1/the-stand.jpg\" alt=\"The Stand\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt1831804/\">The Stand</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI thought this was a pretty good adaptation of the book. The characters felt right and it felt mostly true to the story.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Short Treks\" image=\"https://i.postimg.cc/85YSBcBd/short-treks.jpg\" link=\"https://www.imdb.com/title/tt9059594/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/85YSBcBd/short-treks.jpg\" alt=\"Short Treks\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt9059594/\">Short Treks</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThere were some stories I enjoyed more than others, but these were enjoyable additions to the franchise. My favorite was definitely “The Trouble with Edward”.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Everything Else</h2>\n<p><media-box title=\"The Pacific\" image=\"https://i.postimg.cc/Z0kF5MMN/the-pacific.jpg\" link=\"https://www.imdb.com/title/tt0374463/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/Z0kF5MMN/the-pacific.jpg\" alt=\"The Pacific\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed this. Showed how awful was was and what hell the Pacific Theater was.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Frasier\" image=\"https://i.postimg.cc/MHkwh71N/frasier2023.jpg\" link=\"https://www.imdb.com/title/tt14124236/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/MHkwh71N/frasier2023.jpg\" alt=\"Frasier\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt14124236/\">Frasier</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis is one of the better reboots I've seen. Good characters and good laughs through 2 seasons.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Elsbeth\" image=\"https://i.postimg.cc/sg4Dv2Mx/ellsbeth.jpg\" link=\"https://www.imdb.com/title/tt26591110/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/sg4Dv2Mx/ellsbeth.jpg\" alt=\"Elsbeth\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nWe're on season 2 and so far I'm enjoying the show and characters.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Castle Rock\" image=\"https://i.postimg.cc/SxGx2Jzp/castle-rock.jpg\" link=\"https://www.imdb.com/title/tt6548228/\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/SxGx2Jzp/castle-rock.jpg\" alt=\"Castle Rock\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt6548228/\">Castle Rock</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nBoth seasons were kind of weird. Definitely Stephen King inspired, but not sure how much I liked it.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Sopranos\" image=\"https://i.postimg.cc/HsgFhCQ2/sopranos.jpg\" link=\"https://www.imdb.com/title/tt0141842/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/HsgFhCQ2/sopranos.jpg\" alt=\"The Sopranos\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI enjoyed the series but was disappointed by the ending.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Good Eats\" image=\"https://i.postimg.cc/jj33JDQr/goodeats.jpg\" link=\"https://www.imdb.com/title/tt0344651/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/jj33JDQr/goodeats.jpg\" alt=\"Good Eats\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nAs someone who enjoys cooking, I enjoy Alton's sense of humor in his explaining of different foods and their preparation.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Death and Other Details\" image=\"https://i.postimg.cc/tgzBZXq8/death-and-other-details.jpg\" link=\"https://www.imdb.com/title/tt15439048/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/tgzBZXq8/death-and-other-details.jpg\" alt=\"Death and Other Details\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt15439048/\">Death and Other Details</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nIt wasn't too bad, characters weren't bad and a good mystery thriller.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Catch-22\" image=\"https://i.postimg.cc/PJw7WDxL/catch-22.jpg\" link=\"https://www.imdb.com/title/tt5056196/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/PJw7WDxL/catch-22.jpg\" alt=\"Catch-22\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt5056196/\">Catch-22</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nNot a bad adaptation of the book. Ridiculous in all the right parts.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Halo\" image=\"https://i.postimg.cc/zfq7tSvT/halo.jpg\" link=\"https://www.imdb.com/title/tt2934286/\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/zfq7tSvT/halo.jpg\" alt=\"Halo\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt2934286/\">Halo</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nSo much wasted potential. I love Halo, but this never really came close to the lowest of my expectations. It’s a shame it missed the mark, there is so much lore that they just constantly bungled.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Designated Survivor\" image=\"https://i.postimg.cc/k4pcTD7D/designatedsurvivor.jpg\" link=\"https://www.imdb.com/title/tt5296406/\" rating=\"2\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/k4pcTD7D/designatedsurvivor.jpg\" alt=\"Designated Survivor\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt5296406/\">Designated Survivor</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nSome parts were interesting, but sometimes the show felt like it just dragged on unnecessarily.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Daria\" image=\"https://i.postimg.cc/MGttjd47/daria.jpg\" link=\"https://www.imdb.com/title/tt0118298/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/MGttjd47/daria.jpg\" alt=\"Daria\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nIt’s an older show, but parts of it still hold up.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Cosmos\" image=\"https://i.postimg.cc/9fcJMvxX/cosmos.jpg\" link=\"https://www.imdb.com/title/tt2395695/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/9fcJMvxX/cosmos.jpg\" alt=\"Cosmos\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt2395695/\">Cosmos</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI thought this was an excellent look into the history of humanity, Earth, the Solar System, the Milky Way and more. Neil deGrasse Tyson did a fantastic job as host. I’d highly recommend this.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-04T23:18:15Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/04/my-2025-aspirations/",
      "url": "https://kpwags.com/posts/2025/01/04/my-2025-aspirations/",
      "title": "My 2025 Aspirations",
      "content_html": "\n\t\t<p>Now that 2025 is here, I thought I’d share my goals and aspirations for me and what I hope to accomplish this year. Like previous years, I’m aspiring to continue to do what makes me happy and improve myself.</p>\n<h2>Aspirations</h2>\n<h3>Aspiration #1: Complete 12 Video Games</h3>\n<p>One of the things I did more of last year was play video games with stories rather than just a bunch of sports games. I completed several games that just left me feeling in awe of the good stories and game play. My backlog is quite large so I think I want to jump into it and knock some out in search of more great stories. I figure one a month would be a reasonable target.</p>\n<h3>Aspiration #2: Read 45 Books</h3>\n<p>I read 41 books in 2023, and 44 in 2024, I’m going to try to up it to 45 this year. One of my favorite routines I have with my wife is sitting together on the couch just about every night and reading for an hour or so before bed. It’s a great way to unwind before trying to get some sleep. I love reading in that when it’s fiction, I get a good story, and when it’s nonfiction, I learn something new or get new insight.</p>\n<h3>Aspiration #3: Write 100 Blog Posts</h3>\n<p>Last year I wrote 109 blog posts. Some of them were my <a href=\"https://kpwags.com/tag/week-notes/\">weekly notes</a> which while they count, I’m going to exclude in my target for the year. My hope this year is to write more, and while they might not be my novel, they can help me keep my writing habit going. They’ll also be able to help me share my thoughts and express myself during what will likely be the start of a rough 4 years.</p>\n<h3>Aspiration #4: Actually Finish the Sunroom</h3>\n<p>I set this as an aspiration last year, and it didn’t end up getting done. My hope is to get to it this year. I would love for us to have another place to sit and relax in the evenings or even during the day when the weather is nice. The natural light will help too I’m sure.</p>\n<h3>Aspiration #5: Build My USS Enterprise A Model</h3>\n<p>Several years ago I bought the Polar Lights USS Enterprise A 1:350 model and planned to build it. Needless to say, I never did. Over the last several months, I’ve been following <a href=\"https://pixelfed.social/i/web/profile/424934327160673878\" target=\"_blank\" rel=\"noreferrer nofollow\">MKM Modelwerx</a> over on Pixelfed and seeing the amazing work he’s doing building Star Trek (and other science fiction models) complete with lighting kits and everything. He’s been nice enough to answer some questions I’ve had and pointed me to places where I can learn how to build the models with lighting and everything.</p>\n<p>So I have a drill kit, and a lighting kit and hope to build the kit this year. It will be good to have a project I can work on with my hands. I’ll have to re-teach myself soldering and reacclimatize myself with resistors and everything else that goes into it, but I’m excited.</p>\n<h2>Everything Else</h2>\n<p>There are other things I’m hoping to do this year that I’m not really going to measure or anything.</p>\n<p>Like with the 100 blog posts, I want to write more. I still want to finish what has turned to be more novel than short story that I had originally intended it to be. I also have other ideas I’d like to explore. So this will more be an open-ended aspiration. Just spend more time focused putting words on a page.</p>\n<p>I’ve also finally been spending time picking up my guitar and playing. I’d like to continue to do so and spend some time learning more songs, and hopefully getting better with barre chords.</p>\n<p>I’m also hoping to do some gardening. Something I really haven’t done much of. Over the summer, my wife and I went to some farmers markets and found habanada and shishito peppers. Both of them were delicious, but we have only been able to find them at farmers markets, and not all the time. I’m hoping to dig up some grass along the one side of our garage and plant some peppers. I have no idea how successful I’ll end up being, but it’s worth an attempt. My neighbor is a gardener so maybe I can get some helpful tips from her.</p>\n<p>Finally, I want to get back to running distances. During the pandemic before I built my gym, running was one of the only activities I could consistently do to keep myself active. Because of how often I was running, I kept my distances on the shorter side, 3-4 miles to take it easy on my legs. I’ve been struggling to get myself back to running (maybe not all the time) 6+ miles at a time. I also still have an aspiration to run a sub-5 hour marathon. I’m not sure that’s in the cards this year, but I’d like to start running longer distances.</p>\n<p>As with previous years, you can see where I’m at in these aspirations on my <a href=\"https://kpwags.com/progress/2025/\">progress page</a>.</p>\n<p>Here’s to a good 2025.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-04T19:41:02Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/03/2024-retrospective/",
      "url": "https://kpwags.com/posts/2025/01/03/2024-retrospective/",
      "title": "2024 Retrospective",
      "content_html": "\n\t\t<p>2024 was quite a year. It had some good, it had some bad, and I can’t believe it’s coming to a close. I had to say goodbye to my cat <a href=\"https://kpwags.com/posts/2024/01/10/remembering-cookie/\">Cookie</a>, I turned 40, I ran a lot, and I proceeded to watch in horror as American voters decided to turn towards authoritarianism and a dumpster fire. But I think I’m going to try to focus on the positives.</p>\n<h2>Fitness</h2>\n<p>Fitness-wise, it was a good year for me.</p>\n<p>I’m continuing to play hockey. I’m on 2 teams and occasionally sub for a 3rd. I’ve continued to play, and I believe improve, in net as goalie for the team in the lower league, and captain and skate out for the other. Both teams have found some success this year, but are still trying to take that next step. Hopefully the upcoming seasons will allow us to do just that.</p>\n<p>My lifting routine has sort of been in a holding pattern. Towards the end of the year I had been putting in a lot of time running and hadn’t focused all that much on lifting. I’m not feeling like I’m losing my strength, I just haven’t been gaining as much as I had previously. I’m okay with that. The winter months are upon us so the weather might necessitate some more indoor activities.</p>\n<p>Running was good to me this year. After <a href=\"https://kpwags.com/posts/2024/05/23/finding-a-new-way-to-run/\">finding a better way to run</a>, I’ve been able to get out more and feel better afterwards. I’ve been able to break past the distance plateaus I was dealing with and not feel like death after. I’m hoping the winter doesn’t stop me from running altogether.</p>\n<h2>Development Skills</h2>\n<p>I started the year working a lot with Blazor both at work and at home. I’ve been enjoying working with it for bigger projects. I’ve also been delving back into the basics with my media repository. I’ve got it running pure HTML, CSS and vanilla JavaScript. I’ve even sprinkled in some web components for good measure. It’s also a good reminder of how good the core standards of web development really are.</p>\n<h2>Travel</h2>\n<p>My wife and I didn’t travel as far as we had previous years, but we still managed some fun trips. We went out to Hershey in February to wander around and check out some of the local breweries and distilleries. We went to Cape May (of course) a few times, and celebrated my 40th birthday with a trip to New York City where we were able to stay near Bryant Park and enjoy some coffee, pastries, and some quiet time to start each day before venturing out. We also spent a long(ish) weekend in Stroudsburg while there to see two of my favorite bands headline what was an amazing concert.</p>\n<h2>Everything Else</h2>\n<p>The one thing I’ve started to do more of this year is play the guitar. I still need improvement, but I’m slowly getting better and even have figured out how to play some songs by my favorite artists, albeit poorly.</p>\n<p>I’ve continued journaling the analog way with a fountain pen and a little notebook. I find it’s a good way to end the night with some reflection on the day.</p>\n<p>I also spent more time catching up on my video game backlog than I have in the last several years. I finished the <em>Horizon</em>, <em>Mass Effect Trilogy</em>, and <em>Last of Us</em> games, and have started on the new <em>God of War</em> games. More on that in one of my next posts.</p>\n<h2>My 2024 Aspirations</h2>\n<p>Looking back at the aspirations I had to start the year, I didn’t complete everything, but that’s okay. I feel good about all of it.</p>\n<h3>Average 5 Days a Week Working Out</h3>\n<p>I was able to average 5.6 days a week working out, so this was a success. I regressed a little bit in December, but I was able to continue to stay active. It was a slog sometimes, but it’s important to me.</p>\n<h3>Finish a Side Project</h3>\n<p>I went into this year with two ideas of what to work on, hoping to finish one. As it turns out, I didn’t finish either of them, but instead started and finished a third.</p>\n<p>I was getting annoyed by the long build times on 11ty because it was fetching data from Notion’s API. To speed it up, I built  my own system to manage my media pages. I called it <strong>Wags Media Repository</strong>. It’s kind of a simple CRUD (Create, Read, Update &amp; Delete) web application, but it does the job. As I build my site, I pull the data into JSON files and they build the pages. It might not be quite as dynamic as Notion’s API, but it works well for me.</p>\n<p>I even built it three times. Once in Blazor thinking that my NAS could run Docker (spoiler, it could not), a second time with a Node.js API and a React frontend. A third time, keeping the Node.js backend, but sticking with a plain HTML/CSS/JS frontend. It helped that I used a SQLite database so I just had to adjust how I interface with it. I’m running it off my NAS and am making the occasional tweaks to it to improve it based on my usage.</p>\n<h3>Write 100 Blog Posts</h3>\n<p>I’m at 109 posts this year, so I can call this a success. I’ve been wanting to write and share more so this aspiration has helped give me the oomph I needed.</p>\n<h3>Finish my Story</h3>\n<p>I didn’t finish my story this year. I tried to spend more time writing in November, but lost the motivation when I couldn’t concentrate after the election results. The only thing I can say is that the story was going to start off as a short story, but now it’s extended itself into the novella and maybe even novel territory. I’ve written a decent amount, just not enough, and not enough to get it near completion.</p>\n<h3>Finish the Sunroom</h3>\n<p>With everything going on in my life, I just never got around to working on the sunroom. 2025 will hopefully bring different results.</p>\n<h3>Read 40 Books</h3>\n<p>I read 44 books in 2024 so this was a success for me. Some books were short, some were longer. Some books I flew through, others required more focus. Either way, I continued to finish most days on the couch with a book in my hand and that makes me happy.</p>\n<hr />\n<p>Here’s to a good 2025.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-03T22:49:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/03/movies-i-watched-in-2024/",
      "url": "https://kpwags.com/posts/2025/01/03/movies-i-watched-in-2024/",
      "title": "Movies I Watched in 2024",
      "content_html": "\n\t\t<p>My wife and I have a system where we often have movie nights and take turns picking the movie. We continued it this year. We didn't quite hit the count we did last year, but we still tallied 26 this past year.</p>\n<h2>My Favorite Movies Seen in 2024</h2>\n<p><media-box title=\"Heat\" image=\"https://i.postimg.cc/kGkFdTpY/temp-Imagezbw7-ZR.jpg\" link=\"https://www.imdb.com/title/tt0113277/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/kGkFdTpY/temp-Imagezbw7-ZR.jpg\" alt=\"Heat\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0113277/\">Heat</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nDe Niro vs. Pacino. They don’t make heist movies like this anymore.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ghostbusters: Afterlife\" image=\"https://i.postimg.cc/L4bQ5206/ghostbustersafterlife.jpg\" link=\"https://www.imdb.com/title/tt4513678/\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/L4bQ5206/ghostbustersafterlife.jpg\" alt=\"Ghostbusters: Afterlife\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt4513678/\">Ghostbusters: Afterlife</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI really enjoyed this. I thought they did a good job of telling a new story while still paying homage to the past.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Ghostbusters: Frozen Empire\" image=\"https://i.postimg.cc/hvbH6qQg/ghostbusters-frozen-empire.jpg\" link=\"https://www.imdb.com/title/tt21235248\" linktitle=\"View on IMDb\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/hvbH6qQg/ghostbusters-frozen-empire.jpg\" alt=\"Ghostbusters: Frozen Empire\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt21235248\">Ghostbusters: Frozen Empire</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was slightly predictable, but still an enjoyable follow-up to Afterlife.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Dune: Part One\" image=\"https://i.postimg.cc/rFkQPYST/dune-1.jpg\" link=\"https://www.imdb.com/title/tt1160419/\" linktitle=\"View on IMDb\" rating=\"4\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/rFkQPYST/dune-1.jpg\" alt=\"Dune: Part One\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt1160419/\">Dune: Part One</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThe visuals were amazing for this. The story I believe does the book justice and the casting is fantastic.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Movies I Enjoyed</h2>\n<p><media-box title=\"John Wick\" image=\"https://i.postimg.cc/zBfHB77p/john-wick.jpg\" link=\"https://www.imdb.com/title/tt2911666/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/zBfHB77p/john-wick.jpg\" alt=\"John Wick\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt2911666/\">John Wick</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI'd been meaning to watch this for a while and finally got around to it. It was a pretty prototypical action flick. Still enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"The Hateful Eight\" image=\"https://i.postimg.cc/ry7ZxXpC/hateful-eight.jpg\" link=\"https://www.imdb.com/title/tt3460252/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/ry7ZxXpC/hateful-eight.jpg\" alt=\"The Hateful Eight\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt3460252/\">The Hateful Eight</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThis was definitely a Tarantino movie. I thought the story was somewhat predictable, but was still enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Patriot Games\" image=\"https://i.postimg.cc/brqLv4Z9/patriot-games.jpg\" link=\"https://www.imdb.com/title/tt0105112/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/brqLv4Z9/patriot-games.jpg\" alt=\"Patriot Games\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0105112/\">Patriot Games</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nA Clancy film with Harrison Ford as Jack Ryan. Definitely shows its age and might be slightly predictable, but still enjoyable.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Identity Thief\" image=\"https://i.postimg.cc/VNc2tD23/identity-thief.jpg\" link=\"https://www.imdb.com/title/tt2024432/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/VNc2tD23/identity-thief.jpg\" alt=\"Identity Thief\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt2024432/\">Identity Thief</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nThere's no denying this was dumb. But sometimes dumb movies can still be enjoyable. I enjoyed both Melissa McCarthy and Jason Bateman in this.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Clue\" image=\"https://i.postimg.cc/RZCGM6sb/clue.jpg\" link=\"https://www.imdb.com/title/tt0088930/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/RZCGM6sb/clue.jpg\" alt=\"Clue\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0088930/\">Clue</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nI had never seen this before. It definitely had its dumb parts, but it was funny and the cast was good.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<p><media-box title=\"Indiana Jones and the Temple of Doom\" image=\"https://i.postimg.cc/C1BVDywp/temple-of-doom.jpg\" link=\"https://www.imdb.com/title/tt0087469/\" rating=\"3\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/C1BVDywp/temple-of-doom.jpg\" alt=\"Indiana Jones and the Temple of Doom\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt0087469/\">Indiana Jones and the Temple of Doom</a></div></div></div></div></div></media-box></p>\n<p></p>\n<div class=\"rating\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" aria-label=\"filled star icon\" class=\"star star-md\">\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"empty star icon\" class=\"empty-star star-md\">\n\t\t<path fill-rule=\"evenodd\" d=\"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.006z\" clip-rule=\"evenodd\"></path>\n\t</svg>\n</div>\n<p></p><p>\nDefinitely liked Raiders of the Lost Ark better. Not sure if it’s time or what, but this felt kind of corny.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Did Not Like and Could Not Finish</h2>\n<p><media-box title=\"Saltburn\" image=\"https://i.postimg.cc/RCDqnZz0/saltburn.jpg\" link=\"https://www.imdb.com/title/tt17351924/\"><div class=\"media-box\">\n<div class=\"container\">\n<img src=\"https://i.postimg.cc/RCDqnZz0/saltburn.jpg\" alt=\"Saltburn\" width=\"200\" height=\"300\" />\n<div class=\"details\">\n<div class=\"title-section\">\n<div class=\"title\"><a href=\"https://www.imdb.com/title/tt17351924/\">Saltburn</a></div></div></div></div></div></media-box></p>\n<p></p>\n<p></p><p>\nI just could not even bring myself to finish this. Halfway through I just gave up. It felt creepy and not at all in a good way.</p>\n<p></p>\n\t\t\n\t\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt1077368/\">Dark Shadows</a> - This was strange. Not awful, but strange.</li>\n<li><a href=\"https://www.imdb.com/title/tt0104952\">My Cousin Vinny</a> - This had some good points, not sure why it’s considered such a classic though.</li>\n<li><a href=\"https://www.imdb.com/title/tt26047818/\">Anyone But You</a> - This was a typical romantic comedy. It was mostly predictable but still enjoyable.</li>\n<li><a href=\"https://www.imdb.com/title/tt1615160\">The Foreigner</a> - This wasn’t quite what I expected. It was still a decent action flick with some intrigue.</li>\n<li><a href=\"https://www.imdb.com/title/tt8110232/\">The Many Saints of Newark</a> - Not really sure I liked it…felt disjointed and with some storylines just never finished or flushed out.</li>\n<li><a href=\"https://www.imdb.com/title/tt14230388/\">Asteroid City</a> - This was just weird. I guess I’m not really surprised since it’s a Wes Anderson film, but I really don’t know what to make of it.</li>\n<li><a href=\"https://www.imdb.com/title/tt3397884/\">Sicario</a> - I thought this would be better given the cast. In the end, I felt like several of the characters were superfluous and the story disjointed.</li>\n<li><a href=\"https://www.imdb.com/title/tt4995540/\">Being the Ricardos</a> - This ended up being something completely different than what I anticipated, but not in a bad way. It just showed a different side of the show than I expected.</li>\n<li><a href=\"https://www.imdb.com/title/tt2140479/\">The Accountant</a> - There were some decent action scenes, but some characters and roles seemed kind of superfluous, like the movie would have been just fine without them.</li>\n<li><a href=\"https://www.imdb.com/title/tt7681902\">Won't You Be My Neighbor</a> - This was as interesting look back at Mr. Rogers and while not as in-depth as I had anticipated, it was nostalgic and showed how amazing Fred Rogers really was.</li>\n<li><a href=\"https://www.imdb.com/title/tt14849194/\">The Holdovers</a> - I enjoyed it. I liked the characters and while the story was somewhat predictable, it was still a good watch.</li>\n<li><a href=\"https://www.imdb.com/title/tt31852716\">Apollo 13 Survival</a> - I thought it was an interesting documentary. I'm still kind of surprised they didn't really talk about the cause of the disaster any though.</li>\n<li><a href=\"https://www.imdb.com/title/tt0765429/\">American Gangster</a> - It was an enjoyable movie. Good characters and a good plot. Felt a little dragged out at times though.</li>\n<li><a href=\"https://www.imdb.com/title/tt1711525/\">Office Christmas Party</a> - This movie was predictable and dumb, but it was funny and enjoyable.</li>\n<li><a href=\"https://www.imdb.com/title/tt8695030/\">The Dead Don't Die</a> - What a strange movie, but the casting fit.</li>\n<li><a href=\"https://www.imdb.com/title/tt11671006/\">The Man from Toronto</a> - This was about as dumb as I expected it to be. Mostly predictable, but still enjoyable.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-03T00:38:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2025/01/02/december-2024-check-in/",
      "url": "https://kpwags.com/posts/2025/01/02/december-2024-check-in/",
      "title": "December 2024 Check-In",
      "content_html": "\n\t\t<p>December came and went. The holidays are over and 2025 is upon us.</p>\n<p>I wish I could say I got all festive for the holidays, but outside putting up the Christmas Tree, I just wasn't really in the spirit for holidays. I'm not sure if it's the feeling of doom the next four years are looking to bring or what, but I just wasn't feeling it.</p>\n<h2>Finished Media Repository Rewrite</h2>\n<p>I finished my HTML/CSS/Vanilla JS rewrite. It was super fun to build, and it's been working really well.</p>\n<h2>New Project</h2>\n<p>Not to get bored, I started a new project. I'm still sorting out the details, but I'll be building it with .NET and Blazor. I'll describe more once I see if it ends up being viable.</p>\n<h2>Some Rest and Relaxation to End the Year</h2>\n<p>I ended up taking the last 2 weeks of the year off from work around the holidays. It was a nice break from the grind of work. I spent the time with family for the holidays, and at home resting and relaxing.</p>\n<p>On Christmas Eve I cooked a large seafood feast for my wife's side of the family. The food turned out excellent. For Christmas, we just went up to my parents' house to spend the afternoon and dinner with all my siblings since my brother was in from Colorado.</p>\n<p>After Christmas, we went to a Dave Hause concert in Philadelphia and a Menzingers show in Ardmore. It was a nice way to end the month, and the year.</p>\n<h2>Monthly Round-Up</h2>\n<h3>🏃🏼‍♂️ Fitness</h3>\n<ul>\n<li><strong>Running:</strong> 4 runs - 16.13 miles</li>\n<li><strong>Walking:</strong> 4 walks - 6.48 miles</li>\n<li><strong>Biking:</strong> Nope</li>\n<li><strong>Lifting:</strong> 7 sessions - 144,011 lbs.</li>\n</ul>\n<hr />\n<h3>📚 Reading</h3>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/nuclear-war-a-scenario-annie-jacobsen/20335598?ean=9780593476093\">Nuclear War: A Scenario</a> by Annie Jacobsen</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-book-of-accidents-chuck-wendig/15648326?ean=9780399182150\">The Book of Accidents</a> by Chuck Wendig</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/network-effect-a-murderbot-novel-martha-wells/13296841\">Network Effect</a> by Martha Wells</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/fugitive-telemetry-martha-wells/14596858\">Fugitive Telemetry</a> by Martha Wells</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/system-collapse-martha-wells/19538545\">System Collapse</a> by Martha Wells</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/challenger-an-american-tragedy-adam-higginbotham/20712668?ean=9781982176617\">Challenger: A True Story of Heroism and Disaster on the Edge of Space</a> by Adam Higginbotham</li>\n<li>Started <a href=\"https://bookshop.org/p/books/digital-minimalism-choosing-a-focused-life-in-a-noisy-world-cal-newport/12081448?ean=9780525536512\">Digital Minimalism</a> by Cal Newport</li>\n</ul>\n<hr />\n<h3>✍🏻 Writing</h3>\n<h4>Reading Logs</h4>\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/101/\">December 2, 2024 (#101)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/102/\">December 9, 2024 (#102)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/103/\">December 16, 2024 (#103)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/104/\">December 23, 2024 (#104)</a></li>\n</ul>\n<h4>Week Notes</h4>\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/12/08/week-notes/\">December 1 - 7</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/12/15/week-notes/\">December 8 - 14</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/12/22/week-notes/\">December 15 - 21</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/12/29/week-notes/\">December 22 - 28</a></li>\n</ul>\n<h4>Everything Else</h4>\n<ul>\n<li>Wrote about how you can <a href=\"https://kpwags.com/posts/2024/12/11/skipping-tests-in-xunit/\">temporarily skip unit tests in xUnit</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/12/24/11ty-webc-if-statements-and-attributes/\"><code>if</code> statements in WebC</a></li>\n</ul>\n<hr />\n<h3>🎮 Gaming</h3>\n<ul>\n<li>Continued <a href=\"https://www.playstation.com/en-us/god-of-war/\">God of War</a></li>\n<li>Continued <a href=\"https://www.playstation.com/en-us/god-of-war/\">Madden 25</a></li>\n</ul>\n<hr />\n<h3>📺 TV</h3>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n<li>Finished season 1 of <a href=\"https://m.imdb.com/title/tt3581920/\">The Last of Us</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt26591110/\">Elsbeth</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt10574236/\">Station Eleven</a></li>\n</ul>\n<hr />\n<h3>🎬 Movies</h3>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt0765429/\">American Gangster</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1711525/\">Office Christmas Party</a></li>\n<li><a href=\"https://www.imdb.com/title/tt8695030/\">The Dead Don’t Die</a></li>\n<li><a href=\"https://www.imdb.com/title/tt11671006/\">The Man from Toronto</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0087469/\">Indiana Jones and the Temple of Doom</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2025-01-02T23:50:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/adam-higginbotham-challenger/",
      "url": "https://kpwags.com/books/adam-higginbotham-challenger/",
      "title": "Book Notes for Challenger: A True Story of Heroism and Disaster on the Edge of Space",
      "content_html": "\n\t\t<p>I’m a pretty big space geek. I’ve always found it captivating. I was born too late to experience the moon race, but I was born just as the Space Shuttle was starting to take off. I didn’t really know what was going on at that point, but the <em>Challenger</em> disaster occurred a couple of years after I was born. I remember when I started getting into space, my Mom mentioning <em>Challenger</em>, and how it was one of those moments you remember where you were when it happened. I remember it being especially hard for her as a teacher since Christa McAuliffe was on board.</p>\n<p>This book is about the Space Shuttle <em>Challenger</em>. But it’s also about the lead up to the disastrous launch, the failings in the design, and most importantly, the failings of leadership to stop it.</p>\n<p>The book is well organized. It starts with the decisions from NASA as to what they wanted to do post-Apollo. He does a good job writing about the different design decisions and tradeoffs NASA was sometimes forced to make in order to continue to receive the funding necessary to build the fleet of orbiters. It goes through the progression from the first launch of <em>Columbia</em> in 1981 through the fateful launch of <em>Challenger</em> in 1986. He does a good job describing the issues engineers saw with the shuttle program, and what some tried to do to fix it.</p>\n<p>Even knowing what happened, it still surprises me how reckless those in charge were at giving the go ahead to launch on that cold day in January 1986.</p>\n<p>It’s a fantastic read and it does a good job talking about the disaster, both about those who made the decision to launch, as well as the engineers who did all they could to stop it from happening.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/30/",
      "url": "https://kpwags.com/week-note/30/",
      "title": "Week Notes for December 22 - 28 (#30)",
      "content_html": "\n\t\t<p>My week notes for the week of December 22 - December 28.</p>\n<h2>Notes</h2>\n<h3>Christmas Eve Dinner</h3>\n<p>Christmas Eve, my wife and I had her family over for the Feast of the Seven Fishes. Neither of us are Italian, but we both love seafood and it was a good way to spend time with the family for the holidays. I ended up cooking 10 different types of seafood and they all turned out great. I was stuffed...and exhausted after it, but it was totally worth it.</p>\n<h3>Christmas with My Family</h3>\n<p>Christmas day we went up to Allentown to spend time with my immediate family. Saw my brother who I hadn’t seen for two years and his little ones. It was hectic but we had a nice time.</p>\n<h3>Trip into Philly &amp; Dave Hause Concert</h3>\n<p>My wife and I got tickets to see Dave Hause play at the First Unitarian Church of Philadelphia on Friday and we decided to make a day of it. We took the train into Philly and got a hotel room for the night.</p>\n<p>Friday afternoon we walked around the city, went to the Christmas Village at Dilworth Park and enjoyed the nice, if not a bit chilly weather. We had dinner at a nice whiskey bar (Village Whiskey) and then set off for the concert.</p>\n<p>The concert was amazing. Dave Hause played in the chapel which was a small intimate venue. It was an acoustic show and they didn’t use any kind of sound system as the room had great acoustics. It was such a great experience and I wish I had been able to get tickets to his second night as well. Either way, it was fun and I’m so glad I was able to go.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://wil.to/switching-to-a-framework-and-ubuntu/\">The couple months of Linux on the desktop.</a></h3>\n\t<div class=\"posted-by\">Mat Marquis</div>\n<p>A good real-life look at the options one has for using Linux as a primary machine.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://adactio.com/journal/21525\">Unsaid</a></h3>\n\t<div class=\"posted-by\">Jeremy Keith</div>\n<p>Some good thoughts here by Jeremy after he attended a conference with guests talking about AI.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-29T22:22:39Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/12/24/11ty-webc-if-statements-and-attributes/",
      "url": "https://kpwags.com/posts/2024/12/24/11ty-webc-if-statements-and-attributes/",
      "title": "11ty WebC If Statements and Attributes",
      "content_html": "\n\t\t<p>I've been slowly building out components for my site and have been slowly moving more and more to <a href=\"https://www.11ty.dev/docs/languages/webc/\">WebC</a> rather than shortcodes. One of the things that I was having trouble figuring out how to do was handle if statements with WebC. I build shortcodes with JavaScript, so if statements are second nature to me. I needed to do a little digging with WebC.</p>\n<p>I've been working on a new component for sharing my 2024 media consumption summaries. At the beginning of the year I like to share the books, movies, TV &amp; video games I consumed the previous year. I was looking to build something a little nicer this year and figured I'd build a new component. I wanted something that I could use for the four different types of media. It's not terribly complicated, but the different types have different requirements. For books, I want to include the author. For video games I want to include the platform. Movies &amp; TV don't have either. So I wanted to use conditional logic to handle what gets displayed.</p>\n<p>Let's think about the book example versus a movie. I want the author to be displayed when I pass in the author as an attribute or prop of the component.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>media-box</span>\n  <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Wanderers<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">image</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://i.postimg.cc/KvtWvfkk/wanderers.jpg<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">link</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://bookshop.org/p/books/wanderers-chuck-wendig/11314587?ean=9780399182129<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">rating</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>5<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">author</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Chuck Wendig<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">></span></span>\n  De Niro vs. Pacino. They don’t make heist movies like this anymore.\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>media-box</span><span class=\"token punctuation\">></span></span></code></pre>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>media-box</span>\n  <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Heat<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">image</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://i.postimg.cc/kGkFdTpY/temp-Imagezbw7-ZR.jpg<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">link</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://www.imdb.com/title/tt0113277/<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">rating</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>4<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">></span></span>\n  De Niro vs. Pacino. They don’t make heist movies like this anymore.\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>media-box</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>Both components take mostly the same attributes. The only difference is that author is included for books. It would be repetitive to build 2 components.</p>\n<p>Fortunately WebC has the <a href=\"https://www.11ty.dev/docs/languages/webc/#webcif\">webc:if syntax</a> so I should be able to conditionally display content. And to make matters a little easier, I was able to find out that you can just use the attribute name in the <code>webc:if</code> attribute.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>author<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">webc:</span>if</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>author != ''<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@html</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>author<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>Above is the div where I would display the author in the media box. The <code>if</code> block compares the author attribute and checks to see if it's a blank string. If it is not a blank string, it renders. If it is a blank string, it does not get rendered.</p>\n<p>It took me a little more time than I'd like to admit to figure this out so I thought I'd share in case it helps someone else.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-24T15:23:22Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/104/",
      "url": "https://kpwags.com/reading-log/104/",
      "title": "Reading Log - December 23, 2024 (#104)",
      "content_html": "\n\t\t<p>This week it's a bunch of CSS tips and tricks, WordPress embarrassing itself, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://tetralogical.com/blog/2024/10/21/foundations-form-validation-and-error-messages/\">Foundations: form validation and error messages</a> - <em>Demelza Feltham</em></li>\n<li><a href=\"https://www.joshwcomeau.com/css/backdrop-filter/\">Next-level frosted glass with backdrop-filter</a> - <em>Josh W. Comeau</em></li>\n<li><a href=\"https://piccalil.li/blog/making-content-aware-components-using-css-has-grid-and-quantity-queries/?ref=main-rss-feed\">Making content-aware components using CSS :has(), grid, and quantity queries</a> - <em>Eric Bailey</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/lowest-common-denominator/\">The Lowest Common Denominator: www</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://react.dev/blog/2024/12/05/react-19\">React v19</a> - <em>The React Team</em></li>\n<li><a href=\"https://calendar.perfplanet.com/2024/understanding-the-main-thread-in-the-browser/\">Understanding the main thread in the browser</a> - <em>Amrik Malhans</em></li>\n<li><a href=\"https://moderncss.dev/12-modern-css-one-line-upgrades/\">12 Modern CSS One-Line Upgrades</a> - <em>Stephanie Eckles</em></li>\n<li><a href=\"https://css-irl.info/ive-been-doing-blockquotes-wrong/\">I’ve Been Doing Blockquotes Wrong</a> - <em>Michelle Barker</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2024/easy-changes/\">Quality Means The Flexibility to Change</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://snyk.io/blog/10-modern-node-js-runtime-features/\">10 modern Node.js runtime features to start using in 2024</a> - <em>Liran Tal</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/12/12/attacker-has-techdirt-reclassified-as-phishing-site-proving-masnicks-impossibility-law-once-again/\">Attacker Has Techdirt Reclassified As Phishing Site, Proving Masnick’s Impossibility Law Once Again</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.404media.co/wordpress-login-pineapple-on-pizza/\">To Log Into WordPress, You Now Have To Agree Pineapple on Pizza Is Good</a> - <em>Samantha Cole</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://pxlnv.com/linklog/everything-is-a-conspiracy-theory/\">‘Everything Is a Conspiracy Theory When You Don’t Trust Anything’</a> - <em>Nick Heer</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/prompting-the-wrong-question/\">Prompting the Wrong Question</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Will Varley - King for a King</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/CMxwqZVL9L4\" title=\"Will Varley - King for a King\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-24T00:37:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/29/",
      "url": "https://kpwags.com/week-note/29/",
      "title": "Week Notes for December 15 - 21 (#29)",
      "content_html": "\n\t\t<p>My week notes for the week of December 15 - December 21.</p>\n<h2>Notes</h2>\n<h3>I-League Season Over</h3>\n<p>The Fall I-League season came to an end on Monday. We lost 4-3 in a tightly fought game. It was fun and am looking forward to the winter season starting in mid-February.</p>\n<h3>Last Working Day of the Year</h3>\n<p>Thursday was my last day of work for the year. I'll be taking almost 2 weeks off to just rest and relax over the holidays. Don't really have much planned, just figured some relaxation was warranted.</p>\n<h3>Last Minute Christmas Shopping</h3>\n<p>Friday I spent running errands and picking up some last minute gifts. Stores were crowded and I really should've done a better job of planning ahead more.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://blog.jim-nielsen.com/2024/lowest-common-denominator/\">The Lowest Common Denominator: www</a></h3>\n\t<div class=\"posted-by\">Jim Nielsen</div>\n<p>Building for the web might not always get you the most power and control, but as Jim points out, it gives you the greatest reach.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.joshwcomeau.com/css/backdrop-filter/\">Next-level frosted glass with backdrop-filter</a></h3>\n\t<div class=\"posted-by\">Josh W. Comeau</div>\n<p>Josh does an amazing job showing how to create another cool effect with CSS.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://moderncss.dev/12-modern-css-one-line-upgrades/\">12 Modern CSS One-Line Upgrades</a></h3>\n\t<div class=\"posted-by\">Stephanie Eckles</div>\n<p>Stephanie goes through some great tips with modern CSS.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/wordpress-login-pineapple-on-pizza/\">To Log Into WordPress, You Now Have To Agree Pineapple on Pizza Is Good</a></h3>\n\t<div class=\"posted-by\">Samantha Cole</div>\n<p>This is just embarrassing for one of the biggest platforms of the web.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-22T22:55:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/103/",
      "url": "https://kpwags.com/reading-log/103/",
      "title": "Reading Log - December 16, 2024 (#103)",
      "content_html": "\n\t\t<p>Accessibility with forms, Light/Dark Modes, Bill Belichick goes to college, the joys of cooking and more this week.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.nngroup.com/articles/form-design-placeholders/\">Placeholders in Form Fields Are Harmful</a> - <em>Katie Sherwin</em></li>\n<li><a href=\"https://frontendmasters.com/blog/no-fuss-light-dark-modes/\">No Fuss Light/Dark Modes</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://noahliebman.net/2024/12/where-size-comes-from/\">Where size comes from</a> - <em>Noah Liebman</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.anildash.com/2024/10/15/its-2004-again/\">It feels like 2004 again</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/location-data-firm-offers-to-help-cops-track-targets-via-doctor-visits/\">Location Data Firm Offers to Help Cops Track Targets via Doctor Visits</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://www.404media.co/wordpress-wp-engine-preliminary-injunction/\">WordPress CEO Rage Quits Community Slack After Court Injunction</a> - <em>Samantha Cole</em></li>\n<li><a href=\"https://www.404media.co/youtube-enhances-comment-section-with-ai-generated-nonsense/\">YouTube “Enhances” Comment Section With AI-Generated Nonsense</a> - <em>Emanuel Maiberg</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.bbc.com/news/articles/cgk1333k0ypo\">New study on moons of Uranus raises chance of life</a> - <em>Pallab Ghosh</em></li>\n<li><a href=\"https://badastronomy.beehiiv.com/p/jwst-yup-the-universe-is-expanding-weirdly\">JWST: Yup, the Universe is expanding weirdly</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.sfgate.com/collegesports/article/bill-belichick-north-carolina-coach-old-19975754.php\">Old-ass Bill Belichick is going to suck as a college coach — and I cannot WAIT</a> - <em>Drew Magargal</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/24318644/podcast-election-vc-marketing-business-decoder-interview\">Decoder: Why every company wants a podcast now</a></li>\n<li><a href=\"https://www.searchengine.show/listen/search-engine-1/should-this-creepy-search-engine-exist\">Search Engine Podcast: Should this creepy search engine exist?</a></li>\n<li><a href=\"https://timharford.com/2024/05/cautionary-tales-ww2-how-britain-ignored-the-mother-of-all-secrets/\">Cautionary Tales: WW2: How Britain Ignored the Mother of All Secrets</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.hearingthings.co/spotify-wrapped-2024/\">Spotify Is Using You</a> - <em>Jill Mapes</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/12/11/escalating-child-care-costs-force-women-out-of-the-work-force/\">Escalating child care costs force women out of the work force</a> - <em>Stacey Vanek Smith</em></li>\n<li><a href=\"https://pluralistic.net/2024/12/11/nimby-yimby-fimby/#home-team-advantage\">The housing emergency and the second Trump term</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.currentaffairs.org/news/2022/11/on-slowing-down-to-cook#fn2-24494\">On Slowing Down to Cook</a> - <em>Lily Sánchez</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - 10 West</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/j1guHEWx3pk\" title=\"Chuck Ragan - 10 West\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-16T18:41:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/28/",
      "url": "https://kpwags.com/week-note/28/",
      "title": "Week Notes for December 8 - 14 (#28)",
      "content_html": "\n\t\t<p>My week notes for the week of December 8 - December 14.</p>\n<h2>Notes</h2>\n<h3>Hockey Playoff Elimination</h3>\n<p>Monday night I had my worst game in net all season and we were eliminated in the semi-finals. Feels bad, but gotta bounce back for the consolation round Monday.</p>\n<h3>Furniture Shopping is an Adventure</h3>\n<p>We're still trying to figure out what we want for our next couch and living room. After doing some searching, we found that the quality of furniture we'd get from 2 out of 3 of the first places we looked at would probably not exactly be all that great. We looked at other places and found some pieces we liked that had good reviews, but a much higher price point. We'll need to figure out how to balance price and longevity...especially since pets will likely be coming into the picture at some point.</p>\n<h3>Using Linux Again</h3>\n<p>I recently booted up my LinuxMint partition on my desktop and am using it more. It's been a long while since I've used anything other than MacOS as my primary driver at home and am curious as to how Linux fares nowadays as a primary desktop OS.</p>\n<h3>New Computer Development Blues</h3>\n<p>I mentioned how last week my work laptop got bricked by the Windows 11 upgrade. This week I ran into <a href=\"https://hachyderm.io/@kpwags/113645859673980518\">compatibility issues with .NET 9 and the database project within it</a>. Mastodon helpfully saved the day and I was able to get the <code>global.json</code> file to be recognized to force VisualStudio and Rider to use .NET 8 instead.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.bbc.com/news/articles/cgk1333k0ypo\">New study on moons of Uranus raises chance of life</a></h3>\n\t<div class=\"posted-by\">Pallab Ghosh</div>\n<p>It's crazy to think we're still getting data from the Voyager probes, and that same data can be revisited to find even more insights and information.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.hearingthings.co/spotify-wrapped-2024/\">Spotify Is Using You</a></h3>\n\t<div class=\"posted-by\">Jill Mapes</div>\n<p>We already know that streaming isn't really good for most artists and musicians. More reason to buy music and go to shows to support the bands you love.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-15T17:30:38Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/12/11/skipping-tests-in-xunit/",
      "url": "https://kpwags.com/posts/2024/12/11/skipping-tests-in-xunit/",
      "title": "Skipping Tests (Temporarily) in xUnit",
      "content_html": "\n\t\t<p>While it is almost always better to fix a failing test, there are occasionally times when you know the code is working, but you need time to correct the test. Thankfully xUnit provides a pretty simple way to tell it to skip a specific test.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span></span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Service_WorksCorrectly</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  …\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Just add <code>Skip</code> and then a reason as to why you’re skipping it.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span>Skip <span class=\"token operator\">=</span> “Need to figure how to mock PDF”<span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Service_WorksCorrectly</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  …\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I ran into this while figuring out how to best handle mocking a file system operation. I wanted to get the code up into dev so work could continue on the next part of the process. The issue wasn’t so much the functional code as it was the test code.</p>\n<p>I would highly recommend not leaving these hanging around as you want the tests to run, but if you’re in a pinch, it can be done. If you have todo tracking in your IDE, you can also add a todo comment to remind yourself to come back to it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-11T20:09:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/102/",
      "url": "https://kpwags.com/reading-log/102/",
      "title": "Reading Log - December 9, 2024 (#102)",
      "content_html": "\n\t\t<p>A bunch of social media stories following the UHC CEO assasination and A.I. companies slurping up Bluesky data.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13\">What's new in C# 13</a> - <em>The .NET Team</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.404media.co/brian-thompson-social-media-reactions-reddit-facebook-twitter/\">Moderators Across Social Media Struggle to Contain Celebrations of UnitedHealthcare CEO’s Assassination</a> - <em>Samantha Cole</em></li>\n<li><a href=\"https://www.techdirt.com/2024/12/04/elon-musk-should-be-shouting-about-the-florida-and-texas-social-media-laws-but-are-you-surprised-that-hes-not/\">Elon Musk Should Be Shouting About The Florida And Texas Social Media Laws (But Are You Surprised That He’s Not?)</a> - <em>Corbin Barthold</em></li>\n<li><a href=\"https://www.404media.co/bluesky-posts-machine-learning-ai-datasets-hugging-face/\">Your Bluesky Posts Are Probably In A Bunch of Datasets Now</a> - <em>Samantha Cole</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/a-total-meltdown-black-friday-zipcar-outage-strands-customers-in-random-places/\">‘A Total Meltdown’: Black Friday Zipcar Outage Strands Customers in Random Places</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/12/3/24312508/walmart-vizio-acquisition-complete\">Walmart bought Vizio</a> - <em>Emma Roth</em></li>\n<li><a href=\"https://sherwood.news/markets/sports-gambling-long-term-economic-investment-impacts/\">Today’s sports-betting boom may be tomorrow’s investment issue</a> - <em>Matt Phillips</em></li>\n<li><a href=\"https://arstechnica.com/information-technology/2024/12/company-claims-1000-percent-price-hike-drove-it-from-vmware-to-open-source-rival/\">Company claims 1,000 percent price hike drove it from VMware to open source rival</a> - <em>Scharon Harding</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://reasonstobecheerful.world/work-based-learning-drexel-university/\">From Classroom to Calling: How College Students Are Jumpstarting Their Careers</a> - <em>Olivia Sanchez</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - 1933</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/QWmnBcNijvo\" title=\"Frank Turner - 1933\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-09T23:09:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/27/",
      "url": "https://kpwags.com/week-note/27/",
      "title": "Week Notes for December 1 - 7 (#27)",
      "content_html": "\n\t\t<p>My week notes for the week of December 1 - December 7.</p>\n<h2>Notes</h2>\n<h3>Work Laptop Dying</h3>\n<p>Monday after I was done for the day, the IT department at the company I work for asked me to update my laptop to Windows 11. The update ended up bricking my computer and I had to get a new one overnight shipped to me. It's both annoying and satisfying to have a new machine starting over from scratch. The bad news is that it put me in a position where I'll now have to piece together all of the pull requests that I've been documenting over the last year for the big feature I'm working on.</p>\n<h3>Couch Shopping</h3>\n<p>My wife and I are in the process of revamping our living room, and the first big piece will be to replace our couch. We got this couch 12+ years ago second hand off Craigslist and it's served us well. But now it's time to find something new. It's our first time buying a piece of furniture too as all our furniture was hand me downs or craigslist finds. It's been an adventure so far.</p>\n<h3>Phantoms - Bears Game</h3>\n<p>Saturday night was the Lehigh Valley Phantoms Teddy Bear Toss game. If you're not aware, many minor league hockey teams have a teddy bear and stuffed animal drive in an ingenious way. Everyone brings stuffed animals and when the Phantoms score their first goal everyone throws the stuffed animals onto the ice. It's fun and for a good cause.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/KPr_wt2KIy-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/KPr_wt2KIy-1920.gif 1920w\" /><img alt=\"Teddy bears litter the ice at a hockey game\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/KPr_wt2KIy-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>Sadly the Phantoms lost the game 3-2 in overtime.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://reasonstobecheerful.world/work-based-learning-drexel-university/\">From Classroom to Calling: How College Students Are Jumpstarting Their Careers</a></h3>\n\t<div class=\"posted-by\">Olivia Sanchez</div>\n<p>I went to Drexel and did 3 co-ops or internships during my five years there. They were incredibly helpful getting me acclimated to the jobs I've had throughout my career and helped getting my foot in the door with some real experience.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.404media.co/bluesky-posts-machine-learning-ai-datasets-hugging-face/\">Your Bluesky Posts Are Probably In A Bunch of Datasets Now</a></h3>\n\t<div class=\"posted-by\">Samantha Cole</div>\n<p>Can't say I'm terribly surprised by this.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-08T23:24:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/12/03/november-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/12/03/november-2024-check-in/",
      "title": "November 2024 Check-In",
      "content_html": "\n\t\t<p>Well this month started out great with a nice long weekend in Cape May, but then we had to go and elect a fascist to the highest office and it took a quick nosedive from there.</p>\n<h2>Cape May, New Jersey</h2>\n<p>Lauren had a cross-stitch retreat in Cape May, NJ at the beginning of the month, so we made a long weekend out of it. We stayed at Congress Hall which was amazing as it always is.</p>\n<p>I spent some of the time I was alone walking around Cape May with my camera, sat out on the hotel's veranda enjoying the nice weather, and relaxing in general. The days after the retreat, Lauren and I ventured out to the local wineries and breweries. We also had a nice (late) anniversary dinner at The Ebbitt Room which is a fantastic restaurant in the heart of Cape May.</p>\n<h2>Writing</h2>\n<p>I wanted to hit 30,000 words this month and was doing well. Unfortunately the election of Mango Mussolini threw my mind for a loop and I had a hard time focusing on writing. I'm still trying to figure my thoughts out (other than the obvious disappointment, terror, and numbness). I did hit almost 12,000 words, so I guess that's something.</p>\n<h2>Fascism Comes to America</h2>\n<p>I was hoping we could to avoid this, but alas. I don't really have much more to say about this now other than this is bad.</p>\n<h2>Media Repository Rewrite</h2>\n<p>I have made some pretty good progress on the rewrite of the frontend. React is gone, it feels faster and the download size is smaller. But more importantly I'm getting back to the basics and the bones of the web. I can still respect what libraries like React can accomplish, but it's nice to focus on the basics.</p>\n<h2>Monthly Round-Up</h2>\n<h3>🏃🏼‍♂️ Fitness</h3>\n<ul>\n<li><strong>Running:</strong> 11 Runs - 40.15 miles</li>\n<li><strong>Walking:</strong> 4 Walks - 7.4 miles</li>\n<li><strong>Biking:</strong> Nope</li>\n<li><strong>Lifting:</strong> 9 Sessions - 162,735 lbs.</li>\n</ul>\n<h3>📚 Reading</h3>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/rogue-protocol-martha-wells/9861886\">Rogue Protocol</a> by Martha Wells</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/exit-strategy-martha-wells/9861961\">Exit Strategy</a> by Martha Wells</li>\n<li>Finished <a href=\"https://us.macmillan.com/books/9781250838865/homehabitatrangenicheterritory\">Home: Habitat, Range, Niche, Territory</a> by Martha Wells</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/battle-cry-of-freedom-the-civil-war-era-james-m-mcpherson/7413205?ean=9780195168952\">Battle Cry of Freedom: The Civil War Era</a> by James M. McPherson</li>\n<li>Started <a href=\"https://bookshop.org/p/books/nuclear-war-a-scenario-annie-jacobsen/20335598?ean=9780593476093\">Nuclear War: A Scenario</a> by Annie Jacobsen</li>\n</ul>\n<h3>✍🏻 Writing</h3>\n<h4>Reading Logs</h4>\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/98/\">November 11, 2024 (#98)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/99/\">November 18, 2024 (#99)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/100/\">November 25, 2024 (#100)</a></li>\n</ul>\n<h4>Week Notes</h4>\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/11/10/week-notes/\">October 27 - November 9</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/11/17/week-notes/\">November 10 - 16</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/11/24/week-notes/\">November 17 - 23</a></li>\n</ul>\n<h4>Everything Else</h4>\n<ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/11/03/moving-away-from-amazon/\">Amazon and the Washington Post</a></li>\n<li>Shared a <a href=\"https://kpwags.com/posts/2024/11/06/css-anchor-positioning-guide/\">guide for CSS anchor positioning</a></li>\n<li>Shared a <a href=\"https://kpwags.com/posts/2024/11/16/text-wrap-balance-on-icons-and-other-content/\">tip for text-wrap with CSS</a></li>\n<li>Pondered a silly question about <a href=\"https://kpwags.com/posts/2024/11/26/silly-question-star-trek-generations/\">Star Trek: Generations</a></li>\n</ul>\n<h3>🎮 Gaming</h3>\n<ul>\n<li>Finished <a href=\"https://www.playstation.com/en-us/games/the-last-of-us-part-ii-remastered/\">The Last of Us, Part II</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/god-of-war/\">God of War</a></li>\n</ul>\n<h3>📺 Watched</h3>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt1831804/\">The Stand</a></li>\n<li>Finished season 4 of <a href=\"https://www.imdb.com/title/tt11691774/\">Only Murderers in the Building</a></li>\n<li>Continued season 5 of <a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Started <a href=\"https://m.imdb.com/title/tt3581920/\">The Last of Us</a></li>\n</ul>\n<h3>🎬 Movies</h3>\n<ul>\n<li><a href=\"https://m.imdb.com/title/tt31852716\">Apollo 13 Survival</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0088930/\">Clue</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1160419/\">Dune: Part One</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-03T15:03:19Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/annie-jacobsen-nuclear-war/",
      "url": "https://kpwags.com/books/annie-jacobsen-nuclear-war/",
      "title": "Book Notes for Nuclear War: A Scenario",
      "content_html": "\n\t\t<p>I had heard about this book on an <a href=\"https://www.dancarlin.com/product/ep-29-the-handmaidens-of-the-apocalypse/\">episode</a> of Dan Carlin's Hardcore History Addendum podcast and quickly put a hold on it at on Libby.</p>\n<p>The book is an interesting look at what nuclear war might look like. She interviewed countless Department of Defense officials as well as others who at points in their lives were involved with our nuclear war planning.</p>\n<p>The insight she used from those interviews brought about an interesting story of what what might happen should nuclear war start. Explaining who the different people are and what their responsibilities would be. She goes through fantastic detail as to what could happen and what might be likely to happen.</p>\n<p>Given the state of the world right now, it was a scary, but captivating read (or in my case, listen). It's also a stark reminder of how powerful these doomsday weapons are and how nuclear war really can't be won.</p>\n<blockquote>\n<p>After nuclear war, who, if anyone, will know we were once here.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/101/",
      "url": "https://kpwags.com/reading-log/101/",
      "title": "Reading Log - December 2, 2024 (#101)",
      "content_html": "\n\t\t<p>This week I read about NASA and its Artemis lunar program, print magazines having a comeback, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://blakewatson.com/journal/alpinejs-for-home-cooked-apps/\">Alpine.js for home-cooked apps</a> - <em>Blake Watson</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.scientificamerican.com/article/why-is-it-so-much-harder-for-nasa-to-send-people-to-the-moon-now-than-it-was-during-the-apollo-era/\">Why Is It So Hard to Go Back to the Moon?</a> - <em>Sarah Scoles</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/11/nasa-begins-assembling-rocket-to-send-astronauts-around-far-side-of-the-moon/\">NASA is stacking the Artemis II rocket, implying a simple heat shield fix</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/business/autos/elon-musk-tesla-environment-1263cd60\">Musk Says He Wants to Save the Planet. Tesla’s Factories Are Making It Dirtier.</a> - <em>Susan Pulliam, Emily Glazer &amp; Becky Peterson</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1896\">.NET Rocks: Antifragility in Software with Barry O'Reilly</a></li>\n<li><a href=\"https://hanselminutes.com/942/innovation-in-accessibility-with-fables-kate-kalcevich\">Hanselminutes Podcast: Innovation in Accessibility with Fable's Kate Kalcevich</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/murderbot-she-wrote-martha-wells/\">Murderbot, She Wrote</a> - <em>Meghan Herbst</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/11/25/print-magazines-editorial-advertisments-mail-printing/\">Print magazines are having a moment, but who’s buying them?</a> - <em>Amy Scott &amp; Sofia Terenzio</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Orgy - Fiction (Dreams in Digital)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/NczLNctogZk\" title=\"Orgy - Fiction (Dreams in Digital)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-02T22:43:38Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/why-is-it-so-hard-to-go-back-to-the-moon/",
      "url": "https://kpwags.com/notes/why-is-it-so-hard-to-go-back-to-the-moon/",
      "title": "Why Is It So Hard to Go Back to the Moon?",
      "content_html": "\n\t\t<blockquote>\n<p>But the plan to use hardware from previous space programs is a bit cobbled together. The Space Launch System, for instance, was originally designed for the Constellation program, a strategy set up under the George W. Bush administration to finish building the International Space Station and to reestablish a human presence on the moon. Congress mandated that the rocket reuse technology from the then defunct space shuttle program. But Obama canceled Constellation in 2010, and in 2017 Trump anointed the Artemis program, with the goal of finally sending people back to the moon and paving the way for exploring Mars. Again, the new plan required that NASA use some of the technology that had been developed for Constellation, which in turn entailed repurposing old space shuttle technology. These mandates were pushed by congresspeople representing regions that housed manufacturing centers for shuttle parts. But the carryover and conversion of those technologies have proved difficult. According to a report from the NASA inspector general, bringing the rocket parts into the modern era—for instance, replacing asbestos parts—and retrofitting them for a new rocket system has cost much more than anticipated.</p>\n</blockquote>\n<p>Leave it to congress to throw a wrench in things.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-01T19:17:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/harpercollins-ai/",
      "url": "https://kpwags.com/notes/harpercollins-ai/",
      "title": "Harpercollins wants authors to sign away AI training rights",
      "content_html": "\n\t\t<blockquote>\n<p>As Rebecca Giblin and I write in our 2022 book <a href=\"https://chokepointcapitalism.com/\"><em>Chokepoint Capitalism</em></a>, giving more rights to a creative worker who has no bargaining power is like giving your bullied schoolkid more lunch money. No matter how much lunch money you give that kid, the bullies will take it and your kid will remain hungry. To get your kid lunch, you have to clear the bullies away from the gate. You need to make a structural change:</p>\n<p>Or, put another way: people with power can claim rights. But giving powerless people more rights doesn't make them powerful – it just transfers those rights to the people they bargain against.</p>\n<p>Or, put a third way: &quot;just because you're on their side, it doesn't follow that they're on your side&quot;</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-01T19:16:33Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/26/",
      "url": "https://kpwags.com/week-note/26/",
      "title": "Week Notes for November 24 - 30 (#26)",
      "content_html": "\n\t\t<p>My week notes for the week of November 24 - November 30.</p>\n<h2>Notes</h2>\n<h3>Progress on my Media Repository Rewrite</h3>\n<p>I finally was able to break through a few of my hurdles with my repository rewrite.</p>\n<p>One hurdle was how to handle a multiselect control. The <code>&lt;select&gt;</code> control supports multiple selection but I can't say I'm a fan of the look and feel of it. It feels clunky. I was looking for a good alternative and couldn't find one that fit what I was looking for. So many of them were built for jQuery and React, neither of which I have or want in this next version. In the meantime, I just kicked the can down the road and stuck with the built-in control for the time being. It works and I should be able to put something in later.</p>\n<p>The other hurdle was getting my star rating input control working cleanly in actual form. My star rating control is one of the first real web components I'm trying out, so there was definitely a bit of a learning curve for it.</p>\n<h3>Short Work Week</h3>\n<p>With Thanksgiving this week, it was a short three day work week. We're finally on the final stretch of the project I've been working on and we're still finding small pieces we need to account for. I'm looking forward to seeing it out and getting it out and deployed.</p>\n<h3>Thanksgiving</h3>\n<p>My wife and I hosted Thanksgiving this year having her immediate family over. I think it went well. We had some delicious food and I was able to make sure there was something other than turkey for myself. I'm just not a turkey fan, so I made a slow cooker brisket. It turned out amazing.</p>\n<h3>Black Friday Tradition Continues</h3>\n<p>For the last several years, my wife and I have had the tradition of going to <a href=\"https://www.bluebirddistilling.com/\">Bluebird Distilling</a> in Phoenixville every Black Friday. For reference, they have a whiskey release every year on Black Friday. This year it was a new variation of their Sportsman Bourbon Whiskey and two other new whiskeys. We bought a few bottles and stayed for a special cocktail.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.scientificamerican.com/article/why-is-it-so-much-harder-for-nasa-to-send-people-to-the-moon-now-than-it-was-during-the-apollo-era/\">Why Is It So Hard to Go Back to the Moon?</a></h3>\n\t<div class=\"posted-by\">Sarah Scoles</div>\n<p>This is an interesting look at some of the challenges NASA is facing with the Artemis lunar program. Some of it is self-inflicted, some is caused by congress, and others is just a change in public perception and tolerances. It's worth a read.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-12-01T19:13:41Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/james-m-mcpherson-battle-cry-of-freedom/",
      "url": "https://kpwags.com/books/james-m-mcpherson-battle-cry-of-freedom/",
      "title": "Book Notes for Battle Cry of Freedom: The Civil War Era",
      "content_html": "\n\t\t<p>As someone who enjoys reading about history, this was an in-depth look at one of the darkest periods in American history. The book is long, but it goes into so much depth about the battles, the characters involved, and the politics of both the Union and the Confederacy.</p>\n<p>So much was going on in the country during the Civil War and James M. McPherson did a great job talking about what was happening throughout. For many of the battles, there were maps to go along with what was happening to visually help figure out troop movements. I found these helpful in many cases to get a better idea of where the armies were.</p>\n<p>The political happenings on both sides was also well discussed which helped provide good context for how both Abraham Lincoln and Jefferson Davis were dealing with what was going on behind the scenes with public sentiment.</p>\n<p>This was a long read, but if you like history, well worth it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/11/26/silly-question-star-trek-generations/",
      "url": "https://kpwags.com/posts/2024/11/26/silly-question-star-trek-generations/",
      "title": "If the Enterprise D had Crashed on Mars, Could We See It From Earth?",
      "content_html": "\n\t\t<p>So here's a silly question, in the movie Star Trek: Generations, the Enterprise D crashes onto the planet Veridian III. The movie mentions that its neighboring planet, Veridian IV had a pre-warp civilization. It made me wonder something.</p>\n<p>If Earth was Veridian IV, and Mars was Veridian III, would we be able to detect it from Earth or could our orbiting telescopes? Obviously our Mars orbiters and Rovers could, but I don't know if any of our observatories on or around Earth could. I would suspect not, but I've been surprised by human ingenuity and our technical capabilities before.</p>\n<p>It's a silly question, but it makes me curious.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-26T00:35:09Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/100/",
      "url": "https://kpwags.com/reading-log/100/",
      "title": "Reading Log - November 25, 2024 (#100)",
      "content_html": "\n\t\t<p>Woo! 100 reading logs! This week is a little podcast heavy with topics ranging from nuclear war to legacy Node.js projects, more AI garbage and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://webdesignerdepot.com/why-responsive-design-is-failing-modern-users/\">Why Responsive Design is Failing Modern Users</a> - <em>Louise North</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://abdisalan.com/posts/tragedy-running-old-node-project/\">The Tragedy of Running an Old Node Project</a> - <em>Abdisalan Mohamud</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/11/19/device-makers-turned-off-buttons-but-now-theyre-back/\">Device makers turned off buttons, but now they’re back</a> - <em>Sarah Leeson</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.anildash.com/2024/11/19/dont-call-it-a-substack/\">Don't call it a Substack.</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://shkspr.mobi/blog/2024/11/an-easy-guide-to-bluesky-verification/\">An Easy Guide To BlueSky Verification</a> - <em>Terence Eden</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2024/11/18/rights-without-power/#careful-what-you-wish-for\">Harpercollins wants authors to sign away AI training rights</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.cnn.com/2024/11/21/science/mars-human-settlement-elon-musk/index.html\">Elon Musk has pledged to settle Mars. This book offers a reality check</a> - <em>Katie Hunt</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/11/as-nasa-increasingly-relies-on-commercial-space-there-are-some-troubling-signs/\">As NASA increasingly relies on commercial space, there are some troubling signs</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/11/20/24300617/doj-google-search-antitrust-chrome-breakup\">DOJ says Google must sell Chrome to crack open its search monopoly</a> - <em>Lauren Feiner</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/11/22/1214662577/title-pirate-insurance-kenigsberg-leto-fairfield\">Planet Money: Title insurance, title pirates, and a house built on someone else's land.</a></li>\n<li><a href=\"https://www.acquired.fm/episodes/microsoft\">Acquired Podcast: Microsoft: Volume I</a></li>\n<li><a href=\"https://dotnetcore.show/season-6/building-secure-software-unveiling-the-hidden-dependencies-with-niels-tanis/\">The Modern .NET Show: Building Secure Software: Unveiling the Hidden Dependencies with Niels Tanis</a></li>\n<li><a href=\"https://hanselminutes.com/941/foundations-of-design-for-developers-with-kathryn-grayson-nanz\">Hanselminutes Podcast: Foundations of Design for Developers with Kathryn Grayson Nanz</a></li>\n<li><a href=\"https://www.marketplace.org/shows/this-is-uncomfortable-reema-khrais/promise-of-a-miracle-cure/\">This is Uncomfortable: The promise of a miracle cure</a></li>\n<li><a href=\"https://www.techdirt.com/2024/11/20/techdirt-podcast-episode-405-regulating-speech-in-an-age-of-fake-news/\">Techdirt Podcast: Regulating Speech In An Age Of Fake News</a></li>\n<li><a href=\"https://www.dancarlin.com/product/ep-29-the-handmaidens-of-the-apocalypse/\">Hardcore History Addendum: The Handmaidens of the Apocalypse</a></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://defector.com/do-not-accept-an-unscientific-american\">Do Not Accept An Unscientific American</a> - <em>Sabrina Imbler</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.economist.com/international/2024/11/18/is-your-masters-degree-useless\">Is your master’s degree useless?</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Bricks</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/DGXaLl2US1s\" title=\"Dave Hause - Bricks\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-25T23:56:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/25/",
      "url": "https://kpwags.com/week-note/25/",
      "title": "Week Notes for November 17 - 23 (#25)",
      "content_html": "\n\t\t<p>My week notes for the week of November 17 - November 23.</p>\n<h2>Notes</h2>\n<h3>Back-to-Back Hockey Nights</h3>\n<p>Sunday and Monday I had hockey games. One for the team I captain. We played hard and walked away with a 3-3 tie. The second game Monday was another goalie battle that I unfortunately was on the losing side, losing 2-1. Team played well, just couldn't manage to squeak one more by to tie it up.</p>\n<p>Oddly enough, I was invited to sub for another team I occasionally play on Tuesday night as well. I really wanted to, but I was gassed. I ended up going to bed an hour early. Back-to-back late nights are getting harder as I get older.</p>\n<h3>Started an Audiobook, for the First Time in Forever</h3>\n<p>Back in high school and early college, I tried audiobooks and they just never took. I much preferred paper books and now eBooks as well. There's something about being able to page back and easily re-read lines or paragraphs as needed.</p>\n<p>Cut to this week and I've stuck with that preference. But after listening to a Hardcore History Addendum podcast, I found a book by the author being interviewed as one to add to my reading list. Sure enough my local library had it via Libby. The library had it as both an audiobook and as an eBook. Both were already loaned and I decided to place holds on both. As it turns out, the audiobook became quickly available to borrow, so guess what, I'm giving the audiobook version a try.</p>\n<p>I'm now about 35% through it and I don't hate it. I have to be selective as to when I listen because I really need to focus on it, so I've been listening to it while lifting, walking, and running. I definitely prefer reading books over listening to them, but it's nice to know that I can do audiobooks if that's how I can get them from the library.</p>\n<p>For reference, the book is called <a href=\"https://bookshop.org/p/books/nuclear-war-a-scenario-annie-jacobsen/20335598?ean=9780593476093\"><em>Nuclear War: A Scenario</em></a> by Annie Jacobsen. It provides an interesting, and scary look at how a Nuclear War might start and the machinations behind the US Government's war plans.</p>\n<h3>Finished The Last of Us, Part II</h3>\n<p>Saturday I finished <em>The Last of Us, Part II</em>. I think I liked it better than the first in terms of gameplay. The story for both were phenomenal and am planning on starting the TV show soon. I'd highly recommend the games to anyone.</p>\n<h3>Tweaking My Site Design</h3>\n<p>Over the week, I've been tweaking the look and feel of my site again, because of course I am.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.acquired.fm/episodes/microsoft\">Microsoft Volume I</a></h3>\n\t<div class=\"posted-by\">Acquired Podcast</div>\n<p>This was a great podcast episode talking about the founding and creation of Microsoft up through the mid-1990s. It's incredible how much history I just didn't know.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.dancarlin.com/product/ep-29-the-handmaidens-of-the-apocalypse/\">The Handmaidens of the Apocalypse</a></h3>\n\t<div class=\"posted-by\">Hardcore History Addendum</div>\n<p>This was a fascinating interview with Annie Jacobsen about her book <em>Nuclear War: A Scenario</em>.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.anildash.com/2024/11/19/dont-call-it-a-substack/\">Don't Call it a Substack</a></h3>\n\t<div class=\"posted-by\">Anil Dash</div>\n<p>Some good insight about the troublesome platform.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-24T20:48:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/99/",
      "url": "https://kpwags.com/reading-log/99/",
      "title": "Reading Log - November 18, 2024 (#99)",
      "content_html": "\n\t\t<p>.NET 9 is now out, Saquon Barkley is saving the Eagles, some Half-Life news, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://jeremybytes.blogspot.com/2024/11/the-c-field-keyword-and-visual-studio.html\">The C# &quot;field&quot; Keyword and Visual Studio Tooling</a> - <em>Jeremy Clark</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/\">Announcing .NET 9</a> - <em>The .NET Team</em></li>\n<li><a href=\"https://pmichaels.net/csharp-records/\">C# Records</a> - <em>Paul Michaels</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://htmlforpeople.com/\">HTML For People</a> - <em>Blake Watson</em></li>\n<li><a href=\"https://shkspr.mobi/blog/2024/10/you-can-use-text-wrap-balance-on-icons/\">You can use text-wrap: balance; on icons</a> - <em>Terence Eden</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/11/16/24298091/gabe-newell-half-life-2-documentary-why-hl-3-never-happened\">Gabe Newell says Half-Life 2: Episode 3 didn’t happen because he was ‘stumped’</a> - <em>Wes Davis</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/saquon-barkley-is-saving-jobs\">Saquon Barkley Is Saving Jobs</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/11/13/1212604199/indicator-problems-with-national-flood-insurance-program\">The Indicator: Why the government's flood insurance program is underwater</a></li>\n<li><a href=\"https://www.searchengine.show/listen/search-engine-1/why-are-there-so-many-illegal-weed-stores-in-new-york-city-part-2\">Search Engine Podcast: Why are there so many illegal weed stores in New York City? (Part 2)</a></li>\n<li><a href=\"https://www.searchengine.show/listen/search-engine-1/why-are-there-so-many-illegal-weed-stores-in-new-york-city-part-1\">Search Engine Podcast: Why are there so many illegal weed stores in New York City? (Part 1)</a></li>\n<li><a href=\"https://www.bazaaraudio.com/the-new-bazaar/is-the-introvert-economy-here-to-stay\">The New Bazaar: Is the Introvert Economy here to stay?</a></li>\n<li><a href=\"https://www.iheart.com/podcast/105-daniel-and-kellys-extraord-29862087/episode/death-from-the-skies-featuring-phil-228121126/\">Daniel and Kelly’s Extraordinary Universe: Death from the Skies! (featuring Phil Plait)</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.popehat.com/p/refuge-in-kakistocracy\">Refuge In Kakistocracy</a> - <em>Ken White</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Joey Cape - Tracks</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/s60bc0WT2Hc\" title=\"Joey Cape - Tracks\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-18T16:44:09Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/24/",
      "url": "https://kpwags.com/week-note/24/",
      "title": "Week Notes for November 10 - 16 (#24)",
      "content_html": "\n\t\t<p>My week notes for the week of November 10 to November 16.</p>\n<h2>Notes</h2>\n<h3>Goalie Battle Monday Night</h3>\n<p>Monday's hockey game felt like kind of a goalie battle. Myself and our opponent's goalie were both shellacked by shots and the game ended in a 1-1 tie. It was a fun game.</p>\n<h3>Trying to Write</h3>\n<p>I set a goal this month to write 30,000 words towards my novel. That sadly has not quite gone the way I had hoped. The US election results and news has really messed with my headspace. I'm getting some writing done, but I'm not sure how much I'll end up writing.</p>\n<h3>House Work &amp; Painting</h3>\n<p>I got the motivation to get back into painting the trim in the main living areas. Right now, all that's left is the trim around the one window in our dining room, and one 10 foot stretch behind furniture in our living room. Hoping to get to that one night this week. After that, the only trim left will be in the bedrooms, which we're okay with for the time being.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://shkspr.mobi/blog/2024/10/you-can-use-text-wrap-balance-on-icons/\">You can use text-wrap: balance; on icons</a></h3>\n\t<div class=\"posted-by\">Terence Eden</div>\n<p>Cool little trick for the browsers that support <code>text-wrap: balance</code>.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://defector.com/saquon-barkley-is-saving-jobs\">Saquon Barkley is Saving Jobs</a></h3>\n\t<div class=\"posted-by\">Ray Ratto</div>\n<p>Ray's not wrong here. Saquon Barkley has been fun to watch this year, and he's bailed the Eagles out of several games.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/\">Announcing .NET 9</a></h3>\n\t<div class=\"posted-by\">.NET Team</div>\n<p>Looks to be another solid release with some performance and ease-of-life improvements.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-17T23:18:36Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/11/16/text-wrap-balance-on-icons-and-other-content/",
      "url": "https://kpwags.com/posts/2024/11/16/text-wrap-balance-on-icons-and-other-content/",
      "title": "Text-Wrap: Balance on Icons &amp; Other Content",
      "content_html": "\n\t\t<p>I’ve been using <code>text-wrap: balance</code> by default on my headings for a little while now. I find that things look nicer and you deal less with hanging words. But thanks to a blog post by Terence Eden, I’ve discovered you can use it on other content as well.</p>\n<div class=\"view-link\"><a href=\"https://shkspr.mobi/blog/2024/10/you-can-use-text-wrap-balance-on-icons/\">Read More</a></div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-16T20:44:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/98/",
      "url": "https://kpwags.com/reading-log/98/",
      "title": "Reading Log - November 11, 2024 (#98)",
      "content_html": "\n\t\t<p>Between a long weekend and the election screwing me up, didn't read all that much. Either way, got some articles on CSS, 11ty, web performance and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2024/color-console-log/\">Grateful: Colors in console.log()</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://web.dev/articles/top-cwv\">The most effective ways to improve Core Web Vitals</a> - <em>web.dev</em></li>\n<li><a href=\"https://evilmartians.com/chronicles/html-best-practices-for-login-and-signup-forms\">11 HTML best practices for login &amp; sign-up forms</a> - <em>Andrey Sitnik</em></li>\n<li><a href=\"https://michaelengen.com/posts/my-eleventy-resume/\">Building My Resume in HTML using Eleventy</a> - <em>Michael Engen</em></li>\n<li><a href=\"https://mayank.co/blog/css-reset-layer/\">Your CSS reset should be layered</a> - <em>Mayank</em></li>\n<li><a href=\"https://www.stefanjudis.com/blog/on-being-a-javascript-framework-developer/\">On being a &quot;JavaScript framework developer&quot;...</a> - <em>Stefan Judis</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/10/29/some-slightly-biased-thoughts-on-the-state-of-decentralized-social-media/\">Some (Slightly Biased) Thoughts On The State Of Decentralized Social Media</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/10/29/dear-jeff-bezos-the-hard-truth-is-that-cowardice-like-yours-is-why-people-dont-trust-the-media/\">Dear Jeff Bezos: The ‘Hard Truth’ Is That Cowardice Like Yours Is Why People Don’t Trust The Media</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - Reel My Heart</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Htqk_WDOAAI\" title=\"Chuck Ragan - Reel My Heart\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-11T23:49:12Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/11/08/october-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/11/08/october-2024-check-in/",
      "title": "October 2024 Check-In",
      "content_html": "\n\t\t<p>October was a busy month for us. It really seemed like we had something going on just about every weekend.</p>\n<h2>Stroudsburg</h2>\n<p>The first weekend of the month was spent up in Stroudsburg, Pennsylvania for a <em>The Wonder Years</em> &amp; <em>Menzingers</em> concert. I’ve been wanting to see <em>The Wonder Years</em> for a very long time, and was finally able to see them live. I love their music. What made the show even better was that I was also able to see <em>The Menzingers</em>, also one of my favorite bands, and funnily enough, the band I’ve seen live the most. Either way the show was awesome and I’m glad we made it up there.</p>\n<p>We decided to make it a full weekend too. Stroudsburg has a cute main street with lots of little shops, restaurants, breweries, wineries and is walkable. We also ventured out to a <a href=\"https://www.sbdistillery.com/\">local distillery</a>.</p>\n<h2>Phantoms Home Opener</h2>\n<p>The second weekend was the Lehigh Valley Phantoms home opener up in Allentown. The game was kind of frustrating as a fan of the Phantoms, but odd in its own way. It really felt like the Phantoms were outmatched and constantly playing in their own zone. Oddly enough though, the final shot total was 49-25 in favor of the Phantoms. They almost doubled the shot total of the Hartford Wolf Pack. Despite shots not counting for all that much in the result of the game, they did win 4-3 in the shootout. It was still a fun night.</p>\n<h2>Anniversary Weekend</h2>\n<p>The following weekend was my wife’s an my 11th anniversary. We celebrated by going into Phoenixville and getting some drinks, snacks, and then dinner at the local distilleries and breweries. It was a low-key day which is what we were both looking for.</p>\n<h2>Working on Media Repository</h2>\n<p>This month I’ve been spending a good amount of time working on my media repository’s frontend. I’m starting from scratch, ripping out React and going with HTML/CSS/Vanilla JavaScript, with minimal dependencies. It’s something I haven’t done in a long while and I’m here for it. I’m dipping my toes into web components when they make sense. Parts of them do, but I haven’t had to deal with a lot of complications yet. Either way, it will add more tools to my toolbox.</p>\n<h2>Back into Lifting</h2>\n<p>One thing I haven’t done much of over the last few months is strength training. I’ve been spending more of my time running, which is good in its own right, but I figured it was time to hit the weights again. I ended up restarting the cycle I was on in my 5/3/1 program, dropping the weights slightly, and starting over. I feel a little weaker, but I’ll pick it back up I’m sure.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 57.31 Miles (15 Runs)</li>\n<li><strong>Walking:</strong> 0.00 Miles</li>\n<li><strong>Biking:</strong> 0.00 Miles</li>\n<li><strong>Lifting:</strong> 165,266 lbs. (8 Sessions)</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li><em>Finished</em> <a href=\"https://bookshop.org/p/books/zero-days/18899219\">Zero Days</a> by Ruth Ware</li>\n<li><em>Finished</em> <a href=\"https://bookshop.org/p/books/the-mercy-of-gods-james-s-a-corey/20886313?ean=9780316525572\">The Mercy of Gods</a> by James SA Corey</li>\n<li><em>Finished</em> <a href=\"https://bookshop.org/p/books/all-systems-red-martha-wells/7104100\">All Systems Red</a> by Martha Wells</li>\n<li><em>Finished</em> <a href=\"https://bookshop.org/p/books/artificial-condition-martha-wells/9858231\">Artificial Condition</a> by Martha Wells</li>\n<li><em>Started</em> <a href=\"https://bookshop.org/p/books/battle-cry-of-freedom-the-civil-war-era-james-m-mcpherson/7413205?ean=9780195168952\">The Battle Cry of Freedom: The Civil War Era</a> by James M. McPherson</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/94/\">October 7 (#94)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/95/\">October 14 (#95)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/96/\">October 21 (#96)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/97/\">October 28 (#97)</a></li>\n</ul>\n</li>\n<li>Week Notes\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/10/06/week-notes/\">September 29 - October 5</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/10/13/week-notes/\">October 6 - 12</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/10/20/week-notes/\">October 13 - 19</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/10/27/week-notes/\">October 20 - 26</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/10/01/teaching-myself-web-components/\">teaching myself web components</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/10/07/figuring-out-links-on-my-site/\">sharing links on my site</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/10/16/home-cooked-apps/\">Home Cooked Apps</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/10/27/kamala-harris-for-president/\">endorsing Kamala Harris</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/10/28/handling-page-layouts-without-a-framework/\">building sites without a framework</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>None</li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt11691774/\">Only Murders in the Building</a></li>\n<li><a href=\"https://www.imdb.com/title/tt12930534/\">Challenger: Final Flight</a></li>\n<li><a href=\"https://www.imdb.com/title/tt2395695/\">Cosmos</a></li>\n<li><a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0092455/\">Star Trek: The Next Generation</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li>None</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-08T00:27:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/legacy-code/",
      "url": "https://kpwags.com/notes/legacy-code/",
      "title": "Legacy Code",
      "content_html": "\n\t\t<blockquote>\n<p>But, what does it actually mean to work in an medium that is so temporary? How does it shape us? When your work can literally disappear at any given moment, how do you reason with the effort that went into producing it?</p>\n</blockquote>\n<p>Sometimes our work is fleeting.</p>\n<blockquote>\n<p>It's funny that, as developers, we often talk about &quot;legacy code&quot;. For us though, the word &quot;legacy&quot; isn't used in terms of something to preserve the past. More often than not, &quot;legacy code&quot; is something to be refactored, replaced or removed altogether in the name of progress. Without necessarily realising it, we have unconsciously accepted the temporary nature of our work into the language of our industry.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-06T19:46:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/11/06/css-anchor-positioning-guide/",
      "url": "https://kpwags.com/posts/2024/11/06/css-anchor-positioning-guide/",
      "title": "CSS Anchor Positioning Guide",
      "content_html": "\n\t\t<p>I stumbled across this excellent guide by Juan Diego Rodríguez for using the new CSS anchor positioning syntax.</p>\n<div class=\"view-link\"><a href=\"https://css-tricks.com/css-anchor-positioning-guide/\">Read More</a></div>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-06T19:09:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/11/03/moving-away-from-amazon/",
      "url": "https://kpwags.com/posts/2024/11/03/moving-away-from-amazon/",
      "title": "Some Thoughts on the Washington Post Endorsement Kerfluffle and My Continued Use of Amazon Products",
      "content_html": "\n\t\t<p>Two weeks ago, Jeff Bezos personally stepped in and stopped the Washington Post Editorial Board from endorsing Kamala Harris. That raised some issues for me, and apparently over <a href=\"https://www.npr.org/2024/10/28/nx-s1-5168416/washington-post-bezos-endorsement-president-cancellations-resignations\">200,000 subscribers</a>. I can pretty easily guess why Bezos did it, but I’m not sure how much thought he really put into it.</p>\n<p>Bezos probably remembers the spats between the Post and Trump for the last 8 years. He’s also clearly aware that Trump is vindictive as all hell and will use that vindictiveness against anyone who is perceived to be against him. Bezos also runs Blue Origin and already has some contracts with the federal government. Should Trump win, you’d have to figure he’d put the squeeze on Bezos because of his perception of the Post. Cancelling the the endorsement is one way to appease the wannabe dictator.</p>\n<p>And it’s funny too because Bezos’ later op-ed justifying his decision completely misses the point.</p>\n<quote-link-block source=\"Mike Masnick\" href=\"https://www.techdirt.com/2024/10/29/dear-jeff-bezos-the-hard-truth-is-that-cowardice-like-yours-is-why-people-dont-trust-the-media/\">\nBut this isn’t actually about the decision not to publish an endorsement. The real issue is **you stepping in as owner to block the endorsement** at the perfect time to show that you capitulated in advance to an authoritarian bully who has attacked your business interests in the past and has indicated he has a plan to exact revenge on all who wronged him.\n<p>The principled response to such threats is to <em>continue doing good journalism and not back down</em>. The cowardly shit is to suddenly come up with an excuse for not publishing an endorsement that had already been planned.</p>\n<p>...</p>\n<p>And for what? Do you think that MAGA folks are suddenly going to come rushing to subscribe to the Washington Post now? Do you think this built up your credibility with a crew of folks who have made it clear they only wish to surround themselves with propaganda and bullshit? Is that who you want credibility with? If so, hire a propagandist and fire your journalists.\n</p></quote-link-block><p></p>\n<p>I can definitely understand why Post subscribers are cancelling. I don’t have a subscription to the Post to cancel, but I do have an Amazon Prime subscription. And while I have in the past wrestled with keeping it, the ease of it has always kept me away from the cancel page.</p>\n<p>With how important this election is, to have a billionaire newspaper owner personally step in and interfere with the paper’s editorial board really rubs me the wrong way. As awful as it is, it’s giving me the kick in the ass I need to finally do something.</p>\n<p>Let’s look at the services I use or have used in the past.</p>\n<h2>Amazon Prime Video</h2>\n<p>My wife and I when we have our movie nights will often go through Amazon Prime Video for movie options. If I get rid of my subscription, we’ll lose access.</p>\n<p><strong>Verdict:</strong> Eh, who cares, plenty of other streaming services</p>\n<h2>Amazon Music</h2>\n<p>I’ve been focusing more on purchasing more of the music I listen to. I still do stream music though. My cell phone plan provides a subscription to Apple Music though, so I don’t even use this. I have in the past purchased MP3s from Amazon. I can switch to Bandcamp or iTunes easily enough.</p>\n<p><strong>Verdict:</strong> Nope, See ya!</p>\n<h2>AWS</h2>\n<p>I used to host my blog on AWS when it was written with Jekyll years ago. Now I don’t use it at all as my blog is hosted on Netlify. If I would ever need a cloud provider, there are plenty of options.</p>\n<p><strong>Verdict:</strong> Nope. Goodbye.</p>\n<h2>Kindle</h2>\n<p>This one is most certainly going to be the hardest for me. I am an avid reader and my eBook reader is the first generation Kindle PaperWhite. I have bought so many Kindle books over the years and I don’t know how many of them are DRM free. If I were to lose access to the books I bought because of DRM, I’d be annoyed, angry even. I could still read them on my phone or iPad via the app, but it would suck to not have all of them in one place.</p>\n<p>I’ve been passively looking at what my next eBook reader would be when my Kindle either dies or needs replacing. I don’t particularly want to stick with Kindle given the state of things. My preference right now would be to get a Kobo reader, although I’m not sure which one.</p>\n<p>The other thing I’d need to figure out as well was how Kobo works with Libby. Libby is the app I use to borrow eBooks from my library. Libby works seamlessly with my Kindle as I can easily send the book to my Kindle for me to read. It seems like there’s an app for it on Kobo though, so hopefully it will still work.</p>\n<p><strong>Verdict:</strong> This is probably the hardest switching cost for me, but push comes to shove, I can keep my Kindle around solely for library books.</p>\n<h2>Amazon Prime Itself</h2>\n<p>Oh boy. Buying on Amazon is easy. <em><strong>Really fucking easy.</strong></em> It’s way too easy to realize you need something and just open the app or website and place an order. More often than not, it’s at my door within 2 days. But the overwhelming fact of the matter is that most of what I end up needing or wanting is exclusive to Amazon. Amazon just happens to be the easiest source. Ditching Prime, and ditching the free shipping would be a cost, but it might not be a bad one.</p>\n<p>Too often I buy something on a whim from Amazon because, hey, free shipping. If all of a sudden that goes away, it would definitely give me the kick in the ass I probably need to start reconsidering some of my purchases. It might even move me to do better price comparison shopping. I’ll freely admit that I don’t always look around to see what other merchants are selling whatever I’m looking for for. I might end up having to pay for shipping, but maybe it’ll mean my money going to “better” storefronts rather than Bezos’ pockets.</p>\n<p><strong>Verdict:</strong> Might actually be better for me to move away from Amazon.</p>\n<h2>Conclusion</h2>\n<p>At the end of the day, cancelling my Prime subscription it probably the best move for me. The only item that still has open questions is my Kindle and the ability for me to maintain access to my books as well as access to my public library. And even with those open questions, cancelling my subscription doesn’t really affect that. In the end I’d save some money and give Bezos the finger, even if it doesn’t move the needle all that much. Sounds like a win to me.</p>\n<p><em>Edit 11/6/2024: It was 200,000 subscribers, not 2,000</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-11-03T18:32:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/on-being-a-javascript-framework-developer/",
      "url": "https://kpwags.com/notes/on-being-a-javascript-framework-developer/",
      "title": "On being a &quot;JavaScript framework developer&quot;...",
      "content_html": "\n\t\t<blockquote>\n<p>A dev knowing the web platform will produce great websites regardless of the tech stack. At the end, there's &quot;just&quot; web stuff below all the framework magic, right?</p>\n<p>A framework developer, on the other hand, might have a hard time switching frameworks, reaching for simple solutions or delivering high-quality websites without the entire JavaScript ecosystem. And I've seen this exact problem plenty of times.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-29T23:27:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/10/28/handling-page-layouts-without-a-framework/",
      "url": "https://kpwags.com/posts/2024/10/28/handling-page-layouts-without-a-framework/",
      "title": "Handling Page Layouts Without a Framework",
      "content_html": "\n\t\t<p>I’m currently working on my media repository, what will hopefully be version 1.0 of sorts. What makes this stand out for me is the fact that it’s the first front end project I’m building that will not use a framework in 10+ years. So far it’s going well, I’m making good progress on it and I’m actually pretty happy with where things are with it. The one thing that I haven’t quite figured out though is the base layout.</p>\n<p>Let’s face it, most sites have some form of a base layout that all their pages share. If you look at my personal site, all pages share the header and the footer.</p>\n<div class=\"padded-image\">\n  <picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/J4rZPuCwEv-1538.webp 1538w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/J4rZPuCwEv-1538.gif 1538w\" /><img alt=\"A screen capture of my about page showing that each page has a header and footer with content between them.\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/J4rZPuCwEv-1538.jpeg\" width=\"1538\" height=\"1474\" /></picture>\n</div>\n<p>The content in between them might change, but the header and footer are always there, and always the same. I really don’t want to have to copy and paste the header and footer onto every page of my site. If I make a change, say by adding a new page to the footer, that would mean I’d have to update the footer on every page of the site. For my personal site, that’d be <em><strong>hundreds</strong></em> of pages. Fortunately I use <a href=\"https://www.11ty.dev/\">11ty</a> for my personal site and it does that automatically.</p>\n<pre class=\"language-liquid\" tabindex=\"0\"><code class=\"language-liquid\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token liquid language-liquid\"><span class=\"token delimiter punctuation\">{%</span> <span class=\"token keyword\">include</span> <span class=\"token string\">\"header.html\"</span> <span class=\"token delimiter punctuation\">%}</span></span>\n  <span class=\"token liquid language-liquid\"><span class=\"token delimiter punctuation\">{{</span> content <span class=\"token delimiter punctuation\">}}</span></span>\n  <span class=\"token liquid language-liquid\"><span class=\"token delimiter punctuation\">{%</span> <span class=\"token keyword\">include</span> <span class=\"token string\">\"footer.html\"</span> <span class=\"token delimiter punctuation\">%}</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>I built a file called <code>footer.html</code> and put the code for the footer in it. So every page is built with the footer HTML automatically loaded at the bottom of the page. Same goes for the header.</p>\n<p>But since I’m not using a framework or 11ty for my media repository, I’d have to add the HTML to every page. My media repository is made up of a little over a dozen pages, so while not as bad as my personal site, it’s also not great.</p>\n<div>\n  <picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/pzWTSGtgLa-400.webp 400w\" /><img alt=\"Not Great Bob\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/pzWTSGtgLa-400.gif\" width=\"400\" height=\"219\" /></picture>\n</div>\n<p>My solution for my media repository is a web component for the header and the footer. This feels less than ideal as I’m not sure web components are particularly the best fit for page layouts.</p>\n<p>For my media repository, it does make it a little simpler and does help make something like my sidebar a little more dynamic. Instead of copying and pasting my sidebar into every file, pages now look like this.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>wags-media-header</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>wags-media-header</span><span class=\"token punctuation\">></span></span>\n  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>page-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>wags-media-sidebar</span> <span class=\"token attr-name\">activeLink</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>system-video-services<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>wags-media-sidebar</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>main</span><span class=\"token punctuation\">></span></span>\n      ...\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>main</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>I have both my header and my sidebar<a href=\"https://kpwags.com/posts/2024/10/28/handling-page-layouts-without-a-framework/#footnote-1\" class=\"footnote-link\" aria-describedby=\"footnote-1\">1</a> as web components. The downside to this is that JavaScript needs to be enabled in order for the page to work. For my media repository, that’s not a big deal at all as it’s built only for me and I will be using JavaScript to handle a lot of the site and will have JS enabled. For something like my personal site, that’s kind of a deal breaker<a href=\"https://kpwags.com/posts/2024/10/28/handling-page-layouts-without-a-framework/#footnote-2\" class=\"footnote-link\" aria-describedby=\"footnote-2\">2</a>.</p>\n<p>I think HTML imports used to be a thing, but they’re definitely not available anymore. I’m kind of at a loss as to what the best way to handle this is. I could definitely integrate 11ty into this, but part of what I want to do for this project as it is, is to intentionally build it without any frameworks, without any tooling. It’d be nice to know that I won’t have to worry about any npm dependencies failing later down the road.</p>\n<p>Right now I’m going to move forward with the solution I have as this site is only for me, so I can be fine with it only working with JS enabled. I wouldn’t mind a better solution in the future, so if there’s a technology or methodology I’m missing, please let me know.</p>\n<hr />\n<h2 class=\"footnotes\">Footnotes</h2>\n<ol class=\"footnotes\">\n  <li id=\"footnote-1\">You can view the code as it currently stands <a href=\"https://gist.github.com/kpwags/0ae373f1bef4f9f3ff0dcf68f95338cc\">here</a>. It does allow me to dynamically highlight what page is active so it has some benefits. It just feels a little “bulky” to me.</li>\n  <li id=\"footnote-2\">My personal site’s primary focus is on blog posts and articles. No one should need JavaScript enabled to read articles. Most of the content on my site works without JS, although I have a few “niceties” available only to those with JS enabled.</li>\n</ol>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-28T23:22:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/web-components-are-okay/",
      "url": "https://kpwags.com/notes/web-components-are-okay/",
      "title": "Web Components are Okay",
      "content_html": "\n\t\t<blockquote>\n<p>Again, I find these debates a bit tiresome. I think the fundamental issue, as I’ve previously said, is that people are talking past each other because they’re building different things with different constraints. It’s as if a salsa dancer criticized ballet for not being enough like salsa. There is more than one way to dance!</p>\n</blockquote>\n<p>Nolan makes some good points talking about where web components work well, and where they fall short. &quot;It depends&quot; is an oft-used statement and I think far too often we miss the point that there are multiple ways to build things. Some methods and tooling are better than others in certain use cases, some are not. Rather than constantly arguing with one another over the minutia, we should go with what works best for us at the given time.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-28T23:16:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/97/",
      "url": "https://kpwags.com/reading-log/97/",
      "title": "Reading Log - October 28, 2024 (#97)",
      "content_html": "\n\t\t<p>A lot of articles on web components, fallout from the LA Times and Washington Post's cowardly decisions, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2024/10/super-web-components-sunshine/\">Where web components shine</a> - <em>Dave Rupert</em></li>\n<li><a href=\"https://nolanlawson.com/2024/09/28/web-components-are-okay/\">Web components are okay</a> - <em>Nolan Lawson</em></li>\n<li><a href=\"https://gomakethings.com/web-components-vs.-state-based-ui/\">Web Components vs. State-Based UI</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://gomakethings.com/the-role-of-web-components-in-your-site-or-app/\">The role of Web Components in your site or app</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://piccalil.li/blog/a-guide-to-destructuring-in-javascript/\">A guide to destructuring in JavaScript</a> - <em>Mat “Wilto” Marquis</em></li>\n<li><a href=\"https://robinrendle.com/notes/hire-html-people/\">Hire HTML and CSS People</a> - <em>Robin Rendle</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/10/css-min-all-the-things/\">CSS min() All The Things</a> - <em>Victor Ayomipo</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://robbowen.digital/wrote-about/legacy-code/\">Legacy Code</a> - <em>Robb Owen</em></li>\n<li><a href=\"https://nolanlawson.com/2024/10/20/why-im-skeptical-of-rewriting-javascript-tools-in-faster-languages/\">Why I’m skeptical of rewriting JavaScript tools in “faster” languages</a> - <em>Nolan Lawson</em></li>\n<li><a href=\"https://css-tricks.com/aggregating-my-distributed-self/\">Aggregating my distributed self</a> - <em>Geoff Graham</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://open-web-advocacy.org/blog/its-time-for-a-fairer-more-competitive-app-ecosystem/\">It's time for a fairer, more competitive app ecosystem</a> - <em>OWA</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.palladiummag.com/2024/10/18/its-time-to-build-the-exoplanet-telescope/\">It’s Time to Build the Exoplanet Telescope</a> - <em>Casey Handmer</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://defector.com/how-public-stadiums-keep-some-profits-private\">How Public Stadiums Keep Some Profits Private</a> - <em>David Gardner &amp; Diana Moskovitz</em></li>\n<li><a href=\"https://www.citationneeded.news/i-am-my-own-legal-department/\">I am my own legal department: the promise and peril of “just go independent”</a> - <em>Molly White</em></li>\n<li><a href=\"https://www.marketplace.org/2024/10/21/ecoa-equal-credit-opportunity-act-legacy-impact-women-credit-lending-mortgage/\">50 years ago, it was legal to deny a woman credit without a male co-signer</a> - <em>Savannah Peters</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://softwareengineeringdaily.com/2024/03/26/c-compiler-and-language-design-at-microsoft-with-jared-parsons/\">Software Engineering Daily: C# Compiler and Language Design at Microsoft with Jared Parsons</a></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/10/28/how-the-cowardice-of-the-la-times-and-washington-post-highlights-the-danger-of-the-link-taxes-they-demand-and-their-hypocrisy/\">How The Cowardice Of The LA Times And Washington Post Highlights The Danger Of The Link Taxes They Demand, And Their Hypocrisy</a> - <em>Cathy Gellis</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://charity.wtf/2024/10/11/how-hard-should-your-employer-work-to-retain-you/\">How Hard Should Your Employer Work to Retain You?</a> - <em>Charity Majors</em></li>\n<li><a href=\"https://randsinrepose.com/archives/your-writing/\">Your Writing</a> - <em>Michael Lopp</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Tim Hause - Summerkiss</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/l1uMFIuFgwQ\" title=\"Tim Hause - Summerkiss\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-28T23:01:26Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/22/",
      "url": "https://kpwags.com/week-note/22/",
      "title": "Week Notes for October 20 - 26 (#22)",
      "content_html": "\n\t\t<p>My week notes for the week of October 20 through 26, 2024.</p>\n<h2>Notes</h2>\n<h3>Accessibility Work at Work</h3>\n<p>I spent most of my week at work fixing the accessibility issues that got flagged in our internal review. I think I got most of them addressed, but a follow-up review is still forthcoming.</p>\n<h3>Beautiful, if Dry, Weather</h3>\n<p>The weather over the past week has been amazing and it’s allowed me to enjoy evenings sitting out on the porch with my laptop writing or working on my media repository. I’m not sure how long this will last so I plan on taking advantage of it as much as I can. We really could use some rain though.</p>\n<h3>Hockey a Mixed Bag</h3>\n<p>Played two games this week. Tied the first one 2-2 with me in net. Thought the team and I played well, we just couldn’t sneak one more past their goalie, and they got some good tic-tac-toe passes to sneak one past my back side twice. The other game was just a blowout in our opponent’s favor. My sub-par play didn’t help matters. Oh well, shake things off and come back stronger next games.</p>\n<h3>Used Book Stores are Dangerous</h3>\n<p>Saturday my wife and I went to our local used book store. That was probably our first “mistake” of the day as I walked out with more than I intended to purchase. Oh well, I’ll read them.</p>\n<div class=\"padded-image\">\n  <picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/FxalWfqK-e-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/FxalWfqK-e-1440.gif 1440w\" /><img alt=\"A stack of books. Ancillary Justice &amp; Ancillary Sword by Ann Leckie. The Blighted Stars &amp; The Fractured Dark by Megan E. O’Keefe. The Splendid and the Vile &amp; In the Garden of Beasts by Erik Larson\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/FxalWfqK-e-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture>\n</div>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://www.citationneeded.news/i-am-my-own-legal-department/\">I am my own legal department: the promise and peril of “just go independent”</a></h3>\n\t<div class=\"posted-by\">Molly White</div>\n<p>A good reminder that going independent is not always the end-all-be-all we sometimes think it can be. I appreciate Molly’s writing and would highly recommend subscribing to her work, as well as other independent writers if you are able.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://robinrendle.com/notes/hire-html-people/\">Hire HTML and CSS people</a></h3>\n\t<div class=\"posted-by\">Robin Rendle</div>\n<p>If you have a good grasp and understanding of HTML and CSS, the rest can fall into place.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://softwareengineeringdaily.com/2024/03/26/c-compiler-and-language-design-at-microsoft-with-jared-parsons/\">C# Compiler and Language Design at Microsoft with Jared Parsons</a></h3>\n\t<div class=\"posted-by\">Software Engineering Daily</div>\n<p>It’s often amazing to hear about how much goes into making the C# language. It’s one of my primary languages and it really is impressive all the work the team at Microsoft puts in to make sure that everything continues to work as they advance the language.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-27T20:26:57Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/c-sharp-compiler-design-jaren-parsons/",
      "url": "https://kpwags.com/notes/c-sharp-compiler-design-jaren-parsons/",
      "title": "C# Compiler and Language Design at Microsoft with Jared Parsons",
      "content_html": "\n\t\t<blockquote>\n<p>In terms of the language, which is where I'm more centered up, breaking changes is a very big deal. One of the things I drive home for the compiler team that's very much on my mottos is the number one feature of C# is compatibility. It's like, we very much want the experience of you are not afraid to move to new version of .NET. You're not afraid to buy a new version of Visual Studio, because you know your code is going to keep compiling. We will not break you. We will make sure that unless you have done something absolutely extreme, it's just going to work. That is indeed our number one feature.</p>\n</blockquote>\n<p>As a .NET developer, I greatly appreciate how much work the C# language team puts in to making sure your apps just keep working when you update .NET. The app I work on at work started out as a .NET Core 3.1 Web API. We have since updated it to .NET 6, and now .NET 8. Both updates were smooth with minimal, if any issues.</p>\n<p>It really is kind of amazing that we were able to take advantage of all the performance benefits of .NET 6 and then .NET 8 without having to do a lot of work.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-26T21:55:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/96/",
      "url": "https://kpwags.com/reading-log/96/",
      "title": "Reading Log - October 21, 2024 (#96)",
      "content_html": "\n\t\t<p>This week it's a deep dive into the HTML <code>blockquote</code> element, some accessibility tips, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://jeremydmiller.com/2024/09/25/critter-stack-2025/\">Critter Stack 2025</a> - <em>Jeremy Miller</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://ryanmulligan.dev/blog/password-input-components/\">Web Components for Password Input Enhancements</a> - <em>Ryan Mulligan</em></li>\n<li><a href=\"https://heydonworks.com/article/the-blockquote-element/\">The blockquote element</a> - <em>Heydon Pickering</em></li>\n<li><a href=\"https://piccalil.li/blog/practical-accessibility-tips-you-can-apply-today/\">Practical Accessibility Tips You Can Apply Today</a> - <em>Kevin Andrews</em></li>\n<li><a href=\"https://chrisyoong.com/blog/20-uncomfortable-messages-to-tell-younger-self-about-accessibility\">20 uncomfortable messages that I would tell my younger self about working within Digital Accessibility</a> - <em>Chris Yoong</em></li>\n<li><a href=\"https://macwright.com/2024/09/19/the-extra-rules-of-hooks.html\">The unspoken rules of React hooks</a> - <em>Tom MacWright</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.simplethread.com/legacy-code/\">Working With Legacy Code</a> - <em>Quintus Flannagan</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://modem.io/blog/blog-monetization/\">How to Monetize a Blog</a> - <em>Tyler</em></li>\n<li><a href=\"https://m.youtube.com/watch?v=MTaeVVAvk-c&amp;feature=youtu.be\">Fighting for Our Web</a> - <em>Molly White</em></li>\n<li><a href=\"https://pluralistic.net/2024/10/16/keep-it-really-simple-stupid/#read-receipts-are-you-kidding-me-seriously-fuck-that-noise\">You should be using an RSS reader</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.marketplace.org/2024/10/14/poker-bots-russia-online-game-gambling-ai/\">Poker bots have invaded online gambling</a> - <em>Aleezeh Hasan &amp; Sean McHenry</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://drdevonprice.substack.com/p/you-might-not-recover-from-burnout?fbclid=IwZXh0bgNhZW0CMTEAAR0ZtSlqNT-I_Hl7iVE11vhby4uBh-3cJvG1lkymFsjIqeca7OywMuG6xyA_aem_9gd_MbOoACi42NcCwUY7WQ\">You Might Not Recover from Burnout. Ever.</a> - <em>Devon Price</em></li>\n<li><a href=\"https://geoffgraham.me/you-might-not-recover-from-burnout-ever/\">You Might Not Recover from Burnout. Ever.</a> - <em>Geoff Graham</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://99percentinvisible.org/episode/toyetic/\">99% Invisible: Toyetic</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/immigration-and-the-border-the-real-story\">The New Bazaar: Immigration and the border: the real story</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.hearingthings.co/confessions-of-a-spotify-vandal/\">Confessions of a Spotify Vandal</a> - <em>Andy Crush</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/tech-policy/2024/10/ftc-click-to-cancel-rule-seeks-to-end-free-trial-traps-sneaky-auto-enrollments/\">FTC “click to cancel” rule seeks to end free trial traps, sneaky auto-enrollments</a> - <em>Ashley Belanger</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://paulitaylor.com/2024/10/20/the-anatomy-of-a-bad-idea/\">The Anatomy of a Bad Idea</a> - <em>Paul Taylor</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Arsenic</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/VDkaESeX4T8\" title=\"Dave Hause - Arsenic\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-21T22:39:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/21/",
      "url": "https://kpwags.com/week-note/21/",
      "title": "Week Notes for October 13 - 19 (#21)",
      "content_html": "\n\t\t<p>My week notes for the week of October 13 through 19, 2024.</p>\n<h2>Notes</h2>\n<h3>Accessibility Work</h3>\n<p>My week at work consisted of continuing to go through the accessibility audit of the project I’ve been working on. I was able to take care of most of the low hanging easy stuff, and am now working on cleaning up the custom controls I had to build. Some of it has been tough, but I’m learning and I feel like that’s the important part.</p>\n<h3>Second Hockey League Starts Back Up</h3>\n<p>Monday night, my second hockey league started back up. The team I play on started off well winning 4-1. Wish I could say I helped, but I let in one of the only few shots I faced...whomp, whomp. Either way, back to multiple games a week!</p>\n<h3>Trying to Make a Dent in my Podcast Queue</h3>\n<p>My podcast queue right now is over 600 episodes long. I’m not sure I’ll ever get through it all with more episodes being added. I was able to listen to a bunch this past week, hoping to make some progress.</p>\n<h3>Celebrating 11 Years</h3>\n<p>Saturday Lauren and I celebrated our 11th wedding anniversary. We spent the day in Phoenixville walking around and enjoying the local distilleries and breweries. It was gorgeous weather and a beautiful day for a nice occasion.</p>\n<h2>Interesting Links</h2>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://defector.com/where-should-the-rays-play\">Where Should the Rays Play</a></h3>\n\t<div class=\"posted-by\">Ray Ratto</div>\n<p><em>Hurricane Milton</em> ripped the roof of the Tampa Bay Rays’ stadium, <em>Tropicana Field</em>. Since the repair will cost a lot of money combined with the owner trying to swindle Florida residents out of tax income for a new stadium, there’s question as to whether it will even be repaired. So that leaves a fun thought experiment as to where the Rays will play? Will they take over Oakland after the A’s left? Will they swoop in with a deal with Vegas to keep the A’s out?</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://m.youtube.com/watch?v=MTaeVVAvk-c\">Fighting for Our Web</a></h3>\n\t<div class=\"posted-by\">Molly White</div>\n<p>This is a great talk by Molly talking about the wonder that the early web was and how we can hopefully re-claim it.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-20T23:44:17Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/10/16/home-cooked-apps/",
      "url": "https://kpwags.com/posts/2024/10/16/home-cooked-apps/",
      "title": "Home-Cooked Apps",
      "content_html": "\n\t\t<p><a href=\"https://rachsmith.com/\">Rach Smith</a> recently posted about her building <a href=\"https://rachsmith.com/home-cooked-web-apps/\">home-cooked web apps</a>. I think it’s an interesting and fun thing to do.</p>\n<p>We all have our ways of doing things. Sometimes it’s analog, sometimes it’s digital. And in many cases, there’s not necessarily that one app or that one tool that does exactly what you want it to just the way you want it to. Often you’re left with trying to shoehorn a solution into something that is close to what you’re looking for. It might be good enough, it might still leave you wanting more.</p>\n<p>For software developers, that might open things up for us to create our own solutions that fit our own needs.</p>\n<p>Just about every side project I’ve started on stemmed from a need I wanted in my own life. I wanted a better way to organize and manage my media and links? I built my <a href=\"https://kpwags.com/posts/2024/08/25/building-my-media-repository/\">media repository</a>. I wanted a better way to share recipes with my wife? I started to build <a href=\"https://github.com/kpwags/digital-family-cookbook\">digital family cookbook</a>.</p>\n<p>I started several projects and didn’t really complete a lot of them. I joke about it sometimes, but I think part of it is that when I started building them, I started too large. Instead of building them just for me, I started to build them thinking that others might want to as well. It caused me to start at a grander scale which I think doomed them.</p>\n<p>What I should have done is build them for me, and only me from the beginning. Build the tools to suit my own specific needs. I can have fun building it. I can build it the way I want. The code can be as clean or as hacked together as I want...but hopefully the former. I do have some pride after all. Either way, the final product is my own and I can be as creative or as functional as I want.</p>\n<p>For what it’s worth, I do have the code for my media repository on <a href=\"https://github.com/kpwags/wags-media-repository\">GitHub</a>. Anyone is free to fork it and modify it to suit their needs. I just won’t be taking any pull requests as it’s really only for me.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-16T00:15:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/95/",
      "url": "https://kpwags.com/reading-log/95/",
      "title": "Reading Log - October 14, 2024 (#95)",
      "content_html": "\n\t\t<p>This week it's looking at the debate around web components, a SpaceX milestone, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://kristoff.it/blog/static-site-paradox/\">The Static Site Paradox</a> - <em>Loris Cro</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/10/build-static-rss-reader-fight-fomo/\">Build A Static RSS Reader To Fight Your Inner FOMO</a> - <em>Karin Hendrikse</em></li>\n<li><a href=\"https://garrettdimon.com/journal/posts/the-neverending-story\">The Neverending Story</a> - <em>Garrett Dimon</em></li>\n<li><a href=\"https://lea.verou.me/blog/2024/wcs-vs-frameworks/\">Web Components are not Framework Components — and That’s Okay</a> - <em>Lea Verou</em></li>\n<li><a href=\"https://www.voorhoede.nl/en/blog/the-popover-api-your-new-best-friend-for-tooltips/\">The Popover API: Your New Best Friend for Tooltips</a> - <em>Sjoerd Beentjes</em></li>\n<li><a href=\"https://css-tricks.com/clever-polypane-debugging-features-im-loving/\">Clever Polypane Debugging Features I’m Loving</a> - <em>Ryan Trimble</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/09/how-manage-dangerous-actions-user-interfaces/\">How To Manage Dangerous Actions In User Interfaces</a> - <em>Victor Ponamariov</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/the-world-were-designing/\">The world we're designing</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2024/10/10/software-based-car/#based\">Cars bricked by bankrupt EV company will stay bricked</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://spectrum.ieee.org/fukushima-reactor\">How a Robot Is Grabbing Fuel From a Fukushima Reactor</a> - <em>Tim Hornyak</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/10/spacex-catches-returning-rocket-in-mid-air-turning-a-fanciful-idea-into-reality/\">SpaceX catches returning rocket in mid-air, turning a fanciful idea into reality</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/do-paid-data-removal-services-pay-off/\">Marketplace Tech: Do paid data-removal services pay off?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://daringfireball.net/2024/09/the_things_they_carried\">The Things They Carried</a> - <em>John Gruber</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Hot Water Music - Much Love</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/iwdZxc26WmI\" title=\"Hot Water Music - Much Love\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-14T23:11:23Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/20/",
      "url": "https://kpwags.com/week-note/20/",
      "title": "Week Notes for October 6 - 12 (#20)",
      "content_html": "\n\t\t<p>My week notes for the week of October 6 through 12, 2024.</p>\n<h2>Notes</h2>\n<h3>Accessibility Learnings</h3>\n<p>At work, the accessibility review for the work I did several months ago came back and I'm going through all the different results and recommendations. Got a decent amount of work to do, but I don’t mind. I’m learning a lot about accessibility in the process, which I appreciate. I'm also appreciative that the company I work for cares enough to do this.</p>\n<h3>Getting Back into Lifting</h3>\n<p>With all the running I did over the last two months, my lifting routine has taken a hit. I think I only lifted once, maybe twice in September. While cardio is certainly important, I want to get back into strength training as well. This week I tried to start where I left off and realized that while my strength certainly hasn’t disappeared, it might be better to lessen the weights a tad. I ended up stopping the cycle I was on, de-loading slightly, and starting a new cycle. It seemed to work well enough through the 2 sessions I’ve done so far. I was able to hit most of my lifts. My legs and core muscles are a little sore, but it was to be expected since they haven’t been worked in a little while as they were this week.</p>\n<h3>Lehigh Valley Phantoms Season Opener</h3>\n<p>On Saturday, Lauren and I went up to Allentown to see the Lehigh Valley Phantoms season opener. They’re the American Hockey League (AHL) affiliate of the Philadelphia Flyers. We started the evening like we normally do by having dinner and drinks at <a href=\"https://thebrewworks.com/\">Fegley’s Brew Works</a>, followed by the short walk across the street to the arena.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/hgAHw4BfCV-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/hgAHw4BfCV-1920.gif 1920w\" /><img alt=\"The Lehigh Valley Phantoms and the Hartford Wolf Pack at the opening faceoff at center ice at a hockey rink\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/hgAHw4BfCV-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>The game was kind of a weird one. The Phantoms seems tired and off most of the night. They were playing the Hartford Wolf Pack (AHL affiliate of the New York Rangers) and it always seemed like Hartford was threatening in the Phantoms zone the entire game. Despite that, the Phantoms outshot the Wolf Pack 49-25 and won in a shootout 4-3. (Goes to show you that shots don’t mean much) If you had hidden the shot totals and team goals, I would’ve guessed the results would be reversed. Oh well, a win is a win, and it’s only the first game. Hopefully it’s just a bit of rust they can shake off.</p>\n<h3>Interesting Links</h3>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://lea.verou.me/blog/2024/wcs-vs-frameworks/\">Web Components are not Framework Components — and That’s Okay</a></h3>\n\t<div class=\"posted-by\">Lea Verou</div>\n<p>Lately there’s been a fair amount of debate over the state of web components. Some are arguing strenuously in favor of web components, others not so much. Lea I think does a good job here talking about how what web components are and what they can do, as well as the other use cases are and why the two can’t always be compared equally.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-13T21:20:31Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-neverending-story/",
      "url": "https://kpwags.com/notes/the-neverending-story/",
      "title": "The Neverending Story",
      "content_html": "\n\t\t<blockquote>\n<p>Applets. ActiveX. Flash. Flex. Silverlight. Angular. React.</p>\n<p>Through all of it, Web Standards continue to thrive. HTML, CSS, and JavaScript have never moved fast enough because collaboration and agreement isn’t easy or fast. Web Standards aren’t thriving because of any magical feature or capability. They’re thriving because of agreement and compromise.</p>\n</blockquote>\n<blockquote>\n<p>Through it all, HTML, CSS, and vanilla JavaScript have been constant. The ease with which any human on the planet can reliably access and read a web document from thirty years ago on any device with a browser today is beyond beautiful.</p>\n<p>On the other hand, when creations from less than a year ago require making changes to the original document, untangling and upgrading a rat’s nest of conflicting dependencies, installing a specific version of a runtime or build tool, and then figuring out how to open it on a device that may or may not support it, isn’t a formula for success.</p>\n</blockquote>\n<p>Libraries come and go. HTML standards roll out slowly but better stand the test of time.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-10T15:48:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/web-components-are-not-framework-components-and-thats-okay/",
      "url": "https://kpwags.com/notes/web-components-are-not-framework-components-and-thats-okay/",
      "title": "Web Components are not Framework Components — and That’s Okay",
      "content_html": "\n\t\t<blockquote>\n<p>Web platform features operate under a whole different set of requirements and constraints:</p>\n<ul>\n<li>They need to last <em>decades</em>, not just until the next major release.</li>\n<li>They need to not only cater to the current version of the web platform, but <em>anticipate</em> its future evolution and be compatible with it.</li>\n<li>They need to be <em>backwards compatible</em> with the web as it was 20 years ago.</li>\n<li>They need to be compatible with a slew of accessibility and internationalization needs that userland libraries often ignore at first.</li>\n<li>They are developed in a distributed way, by people across many different organizations, with different needs and priorities.</li>\n</ul>\n</blockquote>\n<blockquote>\n<p>Usually, the result is <em><strong>more robust, but takes a lot longer</strong></em>. That’s why I’ve often said that web standards are <em>“product work on hard mode”</em> — they include most components of regular product work (collecting user needs, designing ergonomic solutions, balancing impact over effort, leading without authority, etc.), but with the added constraints of a distributed, long-term, and compatibility-focused development process that would make most PMs pull their hair out in frustration and run screaming.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-10T15:47:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/facial-recognition-meta-smart-glasses/",
      "url": "https://kpwags.com/notes/facial-recognition-meta-smart-glasses/",
      "title": "Someone Put Facial Recognition Tech onto Meta&#39;s Smart Glasses to Instantly Dox Strangers",
      "content_html": "\n\t\t<blockquote>\n<p>A pair of students at Harvard have built what big tech companies refused to release publicly due to the overwhelming risks and danger involved: smart glasses with facial recognition technology that automatically looks up someone’s face and identifies them. The students have gone a step further too. Their customized glasses also pull other information about their subject from around the web, including their home address, phone number, and family members.</p>\n</blockquote>\n<p>Oh boy. Having read <a href=\"https://kpwags.com/books/kashmir-hill-your-face-belongs-to-us/\">Your Face Belongs to Us</a> by Kashmir Hill last year, this doesn't surprise me. The genie is out of the bottle and I'm not quite sure how best to go about protecting ourselves from stuff like this.</p>\n<p>I feel like a federal privacy law is a definite need, but I'm not sure how much that would go about stopping the dangers associated with this.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-08T17:52:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/10/07/figuring-out-links-on-my-site/",
      "url": "https://kpwags.com/posts/2024/10/07/figuring-out-links-on-my-site/",
      "title": "Figuring Out Links on My Site",
      "content_html": "\n\t\t<p>If you haven’t noticed, I have a few places where I share interesting links I find across my different feeds. I’m not sure if I should condense them, or if I should leave them as is.</p>\n<h2>Links Page</h2>\n<p>I have my <a href=\"https://kpwags.com/links/\">links page</a> where I pull from my media repository and just list the links. I provide no context as to why I liked the link or why it’s shared. Sometimes I’m not sure that’s really needed. These are available as an RSS feed as well, but currently not included in my full feed as when I first set that up I was dealing with errors I couldn’t solve at the time. I have an issue set up now to correct that.</p>\n<h2>Reading Logs</h2>\n<p>(Almost) Every Monday I release a <a href=\"https://kpwags.com/reading-logs/\">reading log</a> that is a weekly digest of the links I share on my links page. It’s a one stop shop for people who might not want to deal with a (more) constant deluge of links. It also has the advantage of the links being broken up into categories. I’ve been doing this for a couple years now and just released the 94th issue.</p>\n<h2>Notes</h2>\n<p>I have my <a href=\"https://kpwags.com/notes/\">notes page</a> where I share links that I find where I want to share some context or some of my own thoughts. This is more meant for links that might not warrant a full blog post, but a short blurb. Especially since I don’t want to take away from the source content.</p>\n<h2>Week Notes</h2>\n<p>I toyed with, and still am toying with the idea of adding a few links to my <a href=\"https://kpwags.com/tag/week-notes/\">week notes posts</a> of links I found particularly interesting. I’m not sure I’ll always have links, but it’s yet another place.</p>\n<h2>How Many Places is Too Many Places?</h2>\n<p>How many places is too many places? It all started with my reading logs, then  notes so I could add some of my own commentary on it (like a retweet), then to just a firehose of links I’ve read. The thought of adding links to my week notes  is more to highlight links that really stand out to me, but should I just put them in notes instead? Maybe?</p>\n<p>At the end of the day, I just enjoy sharing the interesting things I find and maybe adding more of them isn’t so bad. I just don’t want to oversaturate things or repeat myself too much.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-07T23:50:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/94/",
      "url": "https://kpwags.com/reading-log/94/",
      "title": "Reading Log - October 7, 2024 (#94)",
      "content_html": "\n\t\t<p>This week it's discussion of web components, SpaceX rescuing Boeing astronauts, trucks becoming too large, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://frontendmasters.com/blog/web-components-are-bad-good-and-ok/\">Web Components are Bad, Good, and OK</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2024/personal-website-vulnerability/\">Personal Websites Are As Vulnerable As Us</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://adactio.com/journal/21405\">What price?</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://www.theverge.com/2024/9/30/24258333/hurricane-helene-quartz-chip-mining-north-carolina-spruce-pine\">Hurricane Helene barreled through a crucial chip mining area in North Carolina</a> - <em>Emma Roth</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/09/spacex-set-to-launch-mission-to-bring-starliner-astronauts-back-to-earth/\">SpaceX launches mission to bring Starliner astronauts back to Earth</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/10/7/24264129/halo-unreal-engine-5-halo-studios-announcement\">The future of Halo is being built with Unreal Engine 5</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/15871215-moderation-has-a-well-known-reality-bias\">Ctrl-Alt-Speech Podcast: Moderation has a Well-Known Reality Bias</a></li>\n<li><a href=\"https://shoptalkshow.com/603/\">ShopTalk Show: Deno, React Alternatives, and Copilot Concerns with Triple Threat Josh Collinsworth</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1885\">.NET Rocks: Improving Your CSS Game with Martine Dowden</a></li>\n<li><a href=\"https://www.marketplace.org/2024/10/02/how-the-relationship-between-government-and-economy-has-changed-since-the-great-society/\">Marketplace Podcast: How the relationship between government and economy has changed since “The Great Society”</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.economist.com/interactive/united-states/2024/08/31/americans-love-affair-with-big-cars-is-killing-them\">American’s Love Affair with Big Cars is Killing Them</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>American Aquarium - The Curse of Growing Old</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/9Wm4D-Txe_Q\" title=\"American Aquarium - The Curse of Growing Old\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-07T18:29:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/19/",
      "url": "https://kpwags.com/week-note/19/",
      "title": "Week Notes for September 29 - October 5 (#19)",
      "content_html": "\n\t\t<p>My week notes for the week of September 29 through October 5.</p>\n<h2>Notes</h2>\n<h3>Back to the Grind</h3>\n<p>It was nice to have a week off from the real world and I had a good vacation, but damn it sucks to have to start waking up and going back to work.</p>\n<h3>Media Repository Up and Running on my NAS</h3>\n<p>I was able to finally get my Node and React version up and running on my NAS. It means that I can now use my PC in whatever OS I need and will still have a good place to store what I'm reading, listening, and watching.</p>\n<h2>A Weekend in Stroudsburg, Pennsylvania</h2>\n<p>Lauren and I spent the weekend in Stroudsburg, Pennsylvania up in the Poconos. We stayed in a hotel right on the main street and were able to walk to different shops, bars, restaurants and breweries. We also ventured out to <a href=\"https://www.sbdistillery.com/\">Silverback Distillery</a> for a tasting. It was a fun weekend.</p>\n<h2>The Wonder Years &amp; The Menzingers in Concert</h2>\n<p>The weekend trip's culminated with a concert. Two of my favorite bands, <em>The Wonder Years</em> and <em>The Menzingers</em> played a show together and it was amazing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-06T00:48:03Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/personal-websites-are-as-vulnerable-as-us/",
      "url": "https://kpwags.com/notes/personal-websites-are-as-vulnerable-as-us/",
      "title": "Personal Websites Are As Vulnerable As Us",
      "content_html": "\n\t\t<blockquote>\n<p>I look at some people’s personal websites and think, “Stupendous! If I ever reach that zenith of personal web design, I will call it quits.”</p>\n<p>Then I read a post by them later and they say something like, “Gah! I just really don’t like where I’m at with my personal website.”</p>\n</blockquote>\n<p>I'm not a design wizard. I can often tell good design from bad, but I'm always wishing I could do better, and try to.</p>\n<blockquote>\n<p>It’s like our personal websites are a mirror to ourselves — a place where the mind’s eye must reconcile with the optical eye’s perception of reality.</p>\n<p>It’s a torturous affair, to be sure.</p>\n<p>And yet, people still publish those personal sites, those redesigns, those half-baked ideas.</p>\n</blockquote>\n<p>I love this. Personal sites are awesome and I'm always trying to better mine. I love seeing others do the same.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-03T23:07:20Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/10/03/september-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/10/03/september-2024-check-in/",
      "title": "September 2024 Check-In",
      "content_html": "\n\t\t<p>September has already come and gone. This month was a blur to me. The first half of the month was me looking forward to my vacation at the end of the month, then vacation came and went much faster than I wanted.</p>\n<p>One interesting thing this month was my old Sony WH-1000XM4 noise cancelling headphones died. Every time I tried to play music they just whistled very loudly in my year. It was deafening so I took advantage of a significant discount on the Apple AirPods Max and got them. As it turns out, Apple refreshed them shortly afterwards, but other than USB-C, doesn't seem like much was improved. I got plenty of lightning cables lying around so no big deal. I like them. The sound quality is great as is the noise cancellation.</p>\n<h2>A LOT of Running</h2>\n<p>My Apple Watch's monthly fitness challenge for me was to run at least 2.6 miles a day 14 times. I ended up hitting that goal and then some. I was just kind of in a running mood all month and ended up running at least 3.25 miles every day this month...literally. Even on vacation I ran every morning along the promenade (Cape May's version of a boardwalk). It was nice running along the beach as a change of scenery from my neighborhood.</p>\n<h2>Vacation</h2>\n<p>At the end of the month, Lauren and I went to Cape May, New Jersey for a week to get away from the hustle and bustle. It's our happy place. The weather, while kind of cloudy, was still good.</p>\n<p>We spent the week relaxing, visiting the local breweries and wineries, including a brand new one for us. We had heard about <a href=\"https://www.ludlamisland.com/\">Ludlam Island Brewing</a> and I'd had some of their beers at Cape May bars, but we had never visited. As it turns out they opened a new headquarters and we enjoyed some beer there. They do barbecue. Both Lauren and I had their brisket cheesesteak. Holy moley that was delicious. It wasn't your typical Philly cheesesteak, but it was amazing.</p>\n<h2>My Media Repository</h2>\n<p>I've mentioned it before, but I rebuilt my media repository in Node.js and React. I was able to finish this up and should have it up and running on my NAS very soon so my PC will be available again for gaming. I'm looking forward to its next build using <a href=\"https://kpwags.com/posts/2024/10/01/teaching-myself-web-components/\">web components</a>.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 107.60 miles ⬆️</li>\n<li><strong>Walking:</strong> 1.54 miles ⬇️</li>\n<li><strong>Biking:</strong> Nope</li>\n<li><strong>Lifting:</strong> 22,015 lbs. ⬇️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/liar-in-a-crowded-theater-freedom-of-speech-in-a-world-of-misinformation-jeff-kosseff/19780472?ean=9781421447322\">Liar in a Crowded Theater: Freedom of Speech in a World of Misinformation</a> by Jeff Kosseff</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-demon-of-unrest-a-saga-of-hubris-heartbreak-and-heroism-at-the-dawn-of-the-civil-war-erik-larson/20335359\">The Demon of Unrest: A Saga of Hubris, Heartbreak, and Heroism at the Dawn of the Civil War</a> by Erik Larson</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/station-eleven-emily-st-john-mandel/586327?ean=9780804172448\">Station Eleven</a> by Emily St. John Mandel</li>\n<li>Finished <a href=\"https://bookshop.org/books/the-good-neighbor-the-life-and-work-of-fred-rogers-9781419735165/9781419735165\">The Good Neighbor: The Life and Work of Fred Rogers</a> by Maxwell King</li>\n<li>Started <a href=\"https://bookshop.org/p/books/zero-days/18899219\">Zero Days</a> by Ruth Ware</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/91/\">September 9, 2024 (#91)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/92/\">September 16, 2024 (#92)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/93/\">September 30, 2024 (#93)</a></li>\n</ul>\n</li>\n<li>Week Notes\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/09/08/week-notes/\">September 1 - 7</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/09/15/week-notes/\">September 8 - 14</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/09/29/week-notes/\">September 15 - 28</a></li>\n</ul>\n</li>\n<li>Wrote about how <a href=\"https://kpwags.com/posts/2024/09/04/the-internet-isnt-really-that-old/\">the Internet isn’t really that old</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/09/17/my-media-repo-react-and-next-steps/\">my media repository, React, &amp; next steps</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/09/19/the-lunacy-of-artemis/\">the Lunacy of Artemis</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.nintendo.com/us/store/products/super-mario-rpg-switch/\">Super Mario RPG</a></li>\n<li>Continued <a href=\"https://www.playstation.com/en-us/games/the-last-of-us-part-ii-remastered/\">The Last of Us, Part II</a></li>\n<li>Continued <a href=\"https://www.ea.com/games/nhl/nhl-24\">NHL 24</a></li>\n<li>Continued <a href=\"https://www.ea.com/games/madden-nfl/madden-nfl-25\">Madden 25</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt1831804/\">The Stand</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt11691774/\">Only Murderers in the Building</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt12930534/\">Challenger: Final Flight</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt2024432/\">Identity Thief</a></li>\n<li><a href=\"https://www.imdb.com/title/tt7681902\">Won’t You Be My Neighbor</a></li>\n<li><a href=\"https://www.imdb.com/title/tt14849194/\">The Holdovers</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-03T23:03:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/10/01/teaching-myself-web-components/",
      "url": "https://kpwags.com/posts/2024/10/01/teaching-myself-web-components/",
      "title": "Teaching Myself Web Components",
      "content_html": "\n\t\t<p>I've mentioned before that when I rebuilt my media repository, the end goal was to use web components and stick closer to web standards. Well the time has come and I'm starting what will become the 1.0 version of my media repository.</p>\n<p>When I moved my blog off of <a href=\"https://nextjs.org/\">Next.js</a> in December over to <a href=\"https://www.11ty.dev/\">11ty</a>, my primary reason for doing so was to lessen the JavaScript sent down to the browser and to get closer to the bare bones of the web. For something like my personal site, I still can’t see myself not using some build tool like 11ty to turn all my content into HTML. But for my media repository where there aren’t that many static pages and it’s much more data driven, standard html files should work perfectly. JavaScript will still be required, but I wouldn't need a build step. To be honest, part of me feels like I’m going back to my PHP days as the final version of the media repository frontend will be just drag and drop into the web folder on my NAS.</p>\n<p>My knowledge of web components is somewhat limited so I figure this will be a good learning experience for me. I'm probably going to make mistakes, over-engineer do things the wrong way at first, but that's all part of the fun of learning new tooling and building things.</p>\n<p>I figure there's a lot of resources out there and I'm ready to start digging in.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-10-01T22:33:48Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/there-are-two-kinds-of-advertising/",
      "url": "https://kpwags.com/notes/there-are-two-kinds-of-advertising/",
      "title": "There are two kinds of advertising",
      "content_html": "\n\t\t<blockquote>\n<p>Go to The Verge (just to poke at a site I generally like) without an ad blocker, open up the Network panel in DevTools and just let ‘er rip. I’m seeing 400+ requests. That’s tracking at work. You can even just sit there and watch it continue to make requests over time, even while you’re doing nothing. JavaScript is whirring, soaking up whatever data it can, setting cookies, and blasting data along with your precious IP address to god-knows-where. All those requests are slowing down the site, costing you bandwidth, laughing at your privacy, and causing legislation that at least you have to click a giant content-blocking banner with a <em><strong>“yes, this is fine.”</strong></em> button.</p>\n</blockquote>\n<p>This is why I run an ad blocker. Contextual ads as Chris alludes to aren’t bad, they are often quite relevant to what you’re looking at. I however don’t need my web experience worsened and what little privacy I have on the web invaded for some random company to display some ad that <a href=\"https://www.mi-3.com.au/26-06-2024/data-delusion-does-using-data-target-specific-audiences-advertising-actually-make\">might not even be all that effective</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-30T22:36:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/lets-bring-back-browsing/",
      "url": "https://kpwags.com/notes/lets-bring-back-browsing/",
      "title": "Let&#39;s Bring Back Browsing",
      "content_html": "\n\t\t<blockquote>\n<p>The journey towards information is important. Humans retain information better they had to put effort in to get. Aimlessly browsing to find things you may not have heard of yet is as important as discovery is exciting.</p>\n<p>I love getting lost on Wikipedia, going from one weird fact to another.</p>\n<p>I used to love that on YouTube before everyone and their pet wanted to become an influencer and follow formulaic and manipulative patterns to create their content.</p>\n</blockquote>\n<p>I remember first getting the internet at home in the mid-1990s and aimlessly browsing different sites on a super slow dialup connection. I’ve continued to do that of late, checking out the various blogs of the developer communities I follow on Mastodon and Bluesky. The web needs more of this.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-30T22:36:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/93/",
      "url": "https://kpwags.com/reading-log/93/",
      "title": "Reading Log - September 30, 2024 (#93)",
      "content_html": "\n\t\t<p>Double issue this week since I was on vacation last week.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.milanjovanovic.tech/blog/improving-code-quality-in-csharp-with-static-code-analysis\">Improving Code Quality in C# With Static Code Analysis</a> - <em>Milan Jovanovic</em></li>\n<li><a href=\"https://andrewlock.net/simplifying-theory-test-data-with-xunit-combinatorial/\">Simplifying - [Theory] test data with Xunit.Combinatorial</a> - <em>Andrew Lock</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/smart-layouts-with-container-queries/\">“Smart” Layouts With Container Queries</a> - <em>Kevin Powell</em></li>\n<li><a href=\"https://frontendmasters.com/blog/what-if-you-used-container-units-for-everything/\">What if you used Container Units for… everything?</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://adrianroselli.com/2024/09/semi-annual-reminder-to-learn-and-hire-for-web-standards.html\">Semi-Annual Reminder to Learn and Hire for Web Standards</a> - <em>Adrian Roselli</em></li>\n<li><a href=\"https://hidde.blog/re-global-design-system/\">Comparing design systems to find the best qualities</a> - <em>Hidde de Vries</em></li>\n<li><a href=\"https://frontendmasters.com/blog/patterns-for-memory-efficient-dom-manipulation/\">Patterns for Memory Efficient DOM Manipulation with Modern Vanilla JavaScript</a> - <em>Frontend Masters</em></li>\n<li><a href=\"https://spin.atomicobject.com/react-testing-library-unit-tests/\">Tips for Using React Testing Library to Write Unit Tests</a> - <em>Pavan Policherla</em></li>\n<li><a href=\"https://blog.sentry.io/how-to-make-your-web-page-faster-before-it-even-loads/\">How to make your web page faster before it even loads</a> - <em>Salma Alam-Naylor</em></li>\n<li><a href=\"https://codehike.org/blog/build-time-components\">Build-time Components</a> - <em>Rodrigo Pombo</em></li>\n<li><a href=\"https://webkit.org/blog/15865/webkit-features-in-safari-18-0/\">WebKit Features in Safari 18.0</a> - <em>Jen Simmons</em></li>\n<li><a href=\"https://www.11ty.dev/blog/eleventy-font-awesome/\">11ty is Joining Font Awesome</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://piccalil.li/blog/how-i-build-a-button-component/\">How I build a button component</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://kizu.dev/fit-to-width/\">Fit-to-Width Text: A New Technique</a> - <em>Roman Komarov</em></li>\n<li><a href=\"https://mxb.dev/blog/buildless/\">Going Buildless</a> - <em>Max Böck</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://apievangelist.com/2024/08/27/rest-is-mess-just-like-us-humans/\">REST is Messy Just Like Us Humans</a> - <em>Kin Lane</em></li>\n<li><a href=\"https://www.zachleat.com/web/symbiotic-open-source/\">Open Source Needs to be Financially Symbiotic</a> - <em>Zach Leatherman</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://robinrendle.com/notes/ideas-are-vulnerable/\">Ideas are Vulnerable</a> - <em>Robin Rendle</em></li>\n<li><a href=\"https://robinrendle.com/notes/we-dont-need-a-boss-we-need-a-process/\">We don’t need a boss, we need a process</a> - <em>Robin Rendle</em></li>\n<li><a href=\"https://maxschmitt.me/posts/toasts-bad-ux\">Toasts are Bad UX</a> - <em>Max Schmitt</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://chriscoyier.net/2024/08/14/there-are-two-kinds-of-advertising/\">There are two kinds of advertising</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://erinkissane.com/fediverse-governance-drop\">Fediverse Governance Drop</a> - <em>Erin Kissane</em></li>\n<li><a href=\"https://birchtree.me/blog/choose-your-fightebillionaire/\">Choose your fighte…billionaire!</a> - <em>Matt Birchler</em></li>\n<li><a href=\"https://christianheilmann.com/2024/09/15/lets-bring-back-browsing/\">Let’s bring back browsing</a> - <em>Christian Heilmann</em></li>\n<li><a href=\"https://www.techdirt.com/2024/09/17/twitters-pre-musk-plans-mirrored-elons-vision-until-he-abandoned-trashed-or-ignored-them/\">Twitter’s Pre-Musk Plans Mirrored Elon’s Vision—Until He Abandoned, Trashed Or Ignored Them</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pxlnv.com/blog/permissions-pollution/\">Permissions Pollution</a> - <em>Nick Heer</em></li>\n<li><a href=\"https://daringfireball.net/2024/08/the_mac_is_a_power_tool\">The Mac Is a Power Tool</a> - <em>John Gruber</em></li>\n<li><a href=\"https://www.theverge.com/2024/9/20/24249770/microsoft-three-mile-island-nuclear-power-plant-deal-ai-data-centers\">Microsoft wants Three Mile Island to fuel its AI power needs</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.texasmonthly.com/news-politics/othram-forensic-genetic-genealogy-catherine-edwards-murder/?src=longreads\">Inside the Texas Crime Lab That’s Cracked Hundreds of Cold Cases</a> - <em>Michael Hardy</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.scientificamerican.com/article/why-is-it-so-much-harder-for-nasa-to-send-people-to-the-moon-now-than-it-was-during-the-apollo-era/\">Why Is It So Hard to Go Back to the Moon?</a> - <em>Sarah Scoles</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/interest-rates-inflation-and-the-american-consumer/\">Interest rates, inflation and the American consumer</a> - <em>Make Me Smart</em></li>\n<li><a href=\"https://stratechery.com/2024/friendly-google-and-enemy-remedies/\">Friendly Google and Enemy Remedies</a> - <em>Ben Thompson</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/ode-on-an-ass-hat-oakland-athletics-last-game\">Never Forget What Killed The Oakland A’s</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://www.inquirer.com/eagles/a/philadelphia-eagles-nfl-concussions-settlement-compensation-20240909.html\">The Final Penalty</a> - <em>David Gambacorta</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/09/14/nx-s1-5108843/exercise-fat-healthy-weight-obesity\">People who exercise have healthier belly fat, new study finds</a> - <em>Maria Godoy</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://unhandledexceptionpodcast.com/posts/0065-madst-danr-scotth/\">The Unhandled Exception: C# and Blazor - with Mads Torgersen, Dan Roth, and Scott Hunter!</a></li>\n<li><a href=\"https://www.npr.org/2024/09/23/1201324613/gps-america-outside-in-russia-ukraine-china-europe\">The Indicator: Could you live without GPS? It's OK, the economy can't, either</a></li>\n<li><a href=\"https://www.npr.org/2024/09/16/1199975711/bad-economics-smart-politics\">The Indicator: Bad economics, smart politics</a></li>\n<li><a href=\"https://timharford.com/2024/02/cautionary-tales-supersonic-nazi-vengeance-v2-rocket-part-1/\">Cautionary Tales: Supersonic Nazi Vengeance: V2 Rocket (Part 1)</a></li>\n<li><a href=\"https://timharford.com/2024/02/cautionary-tales-into-the-black-lair-v2-rocket-part-2/\">Cautionary Tales: Into the Black Lair: V2 Rocket (Part 2)</a></li>\n<li><a href=\"https://timharford.com/2024/03/cautionary-tales-buried-evil-v2-rocket-part-3/\">Cautionary Tales: Buried Evil: V2 Rocket (Part 3)</a></li>\n<li><a href=\"https://darknetdiaries.com/episode/142/\">Darknet Diaries: Axact</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://everythingchanges.us/blog/make-kin-not-nets/\">Make kin not nets</a> - <em>Mandy Brown</em></li>\n<li><a href=\"https://www.theverge.com/2024/9/12/24242802/lego-mclaren-p1-hypercar-full-size\">This life-size Lego McLaren P1 can hit almost 40mph</a> - <em>Andrew Liszewski</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - You're The Reason I Don't Want the World to End</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HFRxGQ7wfOk\" title=\"The Wonder Years - You're The Reason I Don't Want the World to End\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-30T22:29:01Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/18/",
      "url": "https://kpwags.com/week-note/18/",
      "title": "Week Notes for September 15 - 28 (#18)",
      "content_html": "\n\t\t<p>My week notes for the weeks of September 15 through September 21 &amp; September 22 through September 28. This is a double issue due to vacation.</p>\n<h2>Week at the Shore</h2>\n<p>I spent the week down at the shore in Cape May, New Jersey. My wife and I rented a condo for the week and enjoyed the peace and quiet of the shore after the busy season.</p>\n<h2>Nick Siriani, What Are You Thinking?</h2>\n<p>Sunday we ventured out to a local bar to watch our Eagles take on the Saints. I’m not quite sure how we walked out of that game with a win, but we did, squeaking past the saints 15-12. The game was frustrating with more Jalen Hurts turnovers and some boneheaded decisions by Eagles head coach Nick Siriani. Our defense played very well though (probably saving the game for us) holding the Saints to only a field goal for most of the game. A win is a win, but I wish I felt better about it.</p>\n<h2>Finished Node/React Version of Media Repository</h2>\n<p>I finished up my Node/React rewrite of my media repository. It's a shame I couldn't stick with Blazor, but given my hosting options, it made the most sense. Either way, I'm happy with how it turned out. I made the UI a little bit nicer and added a few niceties I was planning on adding to the Blazor version.</p>\n<p>I still do intend on rebuilding it once more using web components and using more standard HTML/CSS/JS rather than React.</p>\n<h2>Jessie Creek Winery</h2>\n<p>Monday, we spent the afternoon at <a href=\"https://jessiecreekwinery.com/\">Jessie Creek Winery</a>. I spent some of the time writing a few blog post drafts and had a good time relaxing and tasting a flight of the local wines.</p>\n<h2>Beer Tasting</h2>\n<p>Tuesday, we stopped by <a href=\"https://www.behrbrewing.com/\">Behr Brewing</a> and then <a href=\"https://capemaybrewery.com/\">Cape May Brewwing</a> for lunch and some beers. Since New Jersey laws make it difficult for breweries to serve food, most breweries are BYOF (Bring Your Own Food), so we made some sandwiches, grabbed some fruit and spent the afternoon trying some beers at Behr and Cape May Brewery.</p>\n<p>Behr we had only been to right after it opened and I didn’t remember much of what I had. The beers I had this time around were good. I really enjoyed their <em>Behrfest</em>, a take on a Märzen style beer.</p>\n<p>I’ve had plenty of beers from Cape May Brewery, but they always keep certain brews exclusively at their tasting room. I had their <em>Sea Seeker</em> IPA and it was delicious.</p>\n<h2>More Beer</h2>\n<p>Wednesday we ventured further north and had lunch at <a href=\"https://www.ludlamisland.com/\">Ludlam Island Brewing</a> for lunch. Their kitchen does barbecue and it was delicious. The beer was good as well. I had a flight with several IPAs and they were all delicious.</p>\n<p>After Ludlam Island, we traveled down to <a href=\"https://www.slacktidebrewingco.com/\">Slack Tide Brewing</a>. I tried their pineapple milkshake IPA and their pineapple, tangerine &amp; coconut fruited sour. Both were delicious.</p>\n<p>Our final stop was <a href=\"https://www.gustobrewco.com/\">Gusto Brewing</a>. I had a New England IPA and a black IPA. Both were tasty.</p>\n<h2>Interesting Links</h2>\n<p>I think in the future I’m going to share some of the links I’ve read and why I liked them.</p>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://christianheilmann.com/2024/09/15/lets-bring-back-browsing/\">Let’s Bring Back Browsing</a></h3>\n\t<div class=\"posted-by\">Christian Heilmann</div>\n<p>Chris talks about aimlessly surfing the web at the beginning of the internet age and how we’ve slowly moved away from it. I, like him, remember the early days of the internet and would love to see more of that come back to today’s web.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://daringfireball.net/2024/08/the_mac_is_a_power_tool\">The Mac is a Power Tool</a></h3>\n\t<div class=\"posted-by\">John Gruber</div>\n<p>I haven’t upgraded to MacOS Sequoia yet, but have heard about some of its decisions regarding alerts about screen recording. John talks about alert fatigue and the balance between making sure those less technical can get alerted  for permission checks while allowing the advanced users freedom to not have to worry about constantly being nagged by the OS about things they’re fully aware of.</p>\n</div>\n<div class=\"shared-link\">\n\t<h3><a href=\"https://defector.com/ode-on-an-ass-hat-oakland-athletics-last-game\">Never Forget What Killed The Oakland A’s</a></h3>\n\t<div class=\"posted-by\">Ray Ratto</div>\n<p>The Oakland Athletics are no more. For the next 3 seasons they will be in Sacramento, then who knows. As a sports fan, I feel bad for Oakland fans. In the past several years they went from having 3 major sports teams, to now none. Thanks to greed from the owners, they all left. I guess the one upside is that their tax dollars aren't paying for a new stadium, but it still sucks.</p>\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-29T22:25:58Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/09/19/the-lunacy-of-artemis/",
      "url": "https://kpwags.com/posts/2024/09/19/the-lunacy-of-artemis/",
      "title": "The Lunacy of Artemis",
      "content_html": "\n\t\t<p>I recently read a great <a href=\"https://idlewords.com/2024/5/the_lunacy_of_artemis.htm\">article</a> breaking down the issues NASA is facing with its Artemis Program. I have known for a while now that this program has its issues which has been disheartening as a fan of space and human space exploration. I was originally going to post this as a note, but I realized I had more to say about it, so here goes.</p>\n<blockquote>\n<p>But where Apollo 17 launched on a single rocket and cost $3.3 billion (in 2023 dollars), the first Artemis landing involves a dozen or two heavy rocket launches and costs so much that NASA refuses to give a figure (one veteran of NASA budgeting estimates it at $7-10 billion). The single-use lander for the mission will be the heaviest spacecraft ever flown, and yet the mission's scientific return—a small box of rocks—is less than what came home on Apollo 17. And the whole plan hinges on technologies that haven't been invented yet becoming reliable and practical within the next eighteen months.</p>\n</blockquote>\n<p>I’ve been interested in space since I was a kid. I remember being in awe of the videos and photos from the Mercury, Gemini and Apollo missions, the excitement seeing the Space Shuttle launches, and so much more. When it was announced that we were moving on from the Shuttle and towards returning to the moon, I was excited to see what we as a nation could do.</p>\n<blockquote>\n<p>The jewel of Artemis is a big orange rocket with a flavorless name, the Space Launch System (SLS). SLS looks like someone started building a Space Shuttle and ran out of legos for the orbiter. There is the familiar orange tank, a big white pair of solid rocket boosters, but then the rocket just peters out in a 1960’s style stack of cones and cylinders.  The best way to think of SLS is as a balding guy with a mullet: there are fireworks down below that are meant to distract you from a sad situation up top.</p>\n</blockquote>\n<p>Needless to say, the main rocket sounds very familiar. The good news is that the foam falling off shouldn’t be an issue anymore as the manned craft is attached to the top rather than affixed tot the side.</p>\n<p>Unfortunately, the problems don’t stop there.</p>\n<blockquote>\n<p>To start with the obvious, HLS [Human Landing System] looks more likely to tip over than the last two spacecraft to land on the moon, which tipped over. It is a fifteen story tower that must land on its ass in terrible lighting conditions, on rubble of unknown composition, over a light-second from Earth. The crew are left suspended so high above the surface that they need a folding space elevator (not the cool kind) to get down. And yet in the end this single-use lander carries less payload (both up and down) than the tiny Lunar Module on Apollo 17. Using Starship to land two astronauts on the moon is like delivering a pizza with an aircraft carrier.</p>\n</blockquote>\n<p>Look, space is hard. It is a completely inhospitable environment that constantly wants to kill everyone who ventures into it. I’m not trying to make light of the challenges NASA (or anyone else who wants to venture to the moon or the stars) has to face. I’m just wondering if NASA is going about this in the right way.</p>\n<blockquote>\n<p>Costs on SLS have reached the point where private industry is now able to develop, test, and launch an entire rocket program for less than NASA spends on a single engine.</p>\n</blockquote>\n<p>And as the article says, it’s not simply the cost. Space travel is expensive. I just think NASA could probably do better to spend their money differently. Instead of tying themselves to rocket technology that is 40 years old at its core, they might better spend the money innovating something new that might be more sustainable. And yes, I know some of this decision making is out of NASA’s hands as the U.S. Congress has stipulated (IMHO too much) rules for how to complete the mission ahead of them. So the blame doesn’t fall on NASA alone, but (surprise?) Congress as well.</p>\n<blockquote>\n<p>Advocates for Artemis insist that the program is more than Apollo 2.0. But as we’ll see, Artemis can't even measure up to Apollo 1.0. It costs more, does less, flies less frequently, and exposes crews to risks that the steely-eyed missile men of the Apollo era found unacceptable. It's as if Ford in 2024 released a new model car that was slower, more accident-prone, and ten times more expensive than the Model T.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-19T22:22:26Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/09/17/my-media-repo-react-and-next-steps/",
      "url": "https://kpwags.com/posts/2024/09/17/my-media-repo-react-and-next-steps/",
      "title": "My Media Repository, React, &amp; Next Steps",
      "content_html": "\n\t\t<p>As I’ve mentioned in a previous <a href=\"https://kpwags.com/posts/2024/09/03/august-2024-check-in/\">post</a>, I’m rebuilding my media repository in Node.js and React since my Blazor implementation is unable to run on my Synology NAS model. It was an unfortunate oversight on my part, but I still had fun building it and it’s working well for me running off my desktop. I’d stick with it, but that’s not really a long-term solution for my needs.</p>\n<h2>Choosing React</h2>\n<p>I’ve built projects in React before and while it would seem to be a logical choice of tool, I did want to try sticking more with web standards and see about really digging into web components. I started work that way and realized it was going to be more of an undertaking than I had originally planned. Because of that, and wanting to make sure that I had access to the Windows side of my PC, I decided to go with React for familiarity so that I could get a quicker turnaround.</p>\n<p>So far, this seems to be the right call. I’m almost done this next version of my repository. Almost all the pages are built and working, the API is doing its thing, and hopefully in the next couple of weeks I can get this up and running on my NAS. (And yes, after the first page was built, I quickly tested this on my NAS to see if it could run, and while there were some hiccups, it did run.)</p>\n<p>My intention with my choice for using React was to make it a stop-gap measure so I could move hosting off my PC. I figure the Node API wouldn’t need to change, so half of what I’m building new would be able to continue to be used.</p>\n<h2>Next Steps</h2>\n<p>My next steps for my media repository after I get the React version would be to go back to the drawing board and rebuild the frontend using web standards, less JavaScript, and no React.</p>\n<p>The only thing I haven’t fully decided on is whether I want to see about bringing <a href=\"https://www.11ty.dev/\">11ty</a> into the mix, or if I want to go without a framework of any kind. My inclination now is to keep things simple and go purely out of a folder like I used to do way back in the day...No build systems or anything. I think that would be fun, and more importantly, a good learning experience for me. Web components have been on my radar for a long while now, and it’s about time I dig into them more.</p>\n<p>I figure it will give me a lot to learn, write about and share with the world in hopes of someone else learning from my experiences.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-17T22:11:41Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/erik-larson-the-demon-of-unrest/",
      "url": "https://kpwags.com/books/erik-larson-the-demon-of-unrest/",
      "title": "Book Notes for The Demon of Unrest: A Saga of Hubris, Heartbreak, and Heroism at the Dawn of the Civil War",
      "content_html": "\n\t\t<p>This is the second book of Erik Larson's I've read and it was again well written.</p>\n<p>The trigger that started what would become the Civil War was the Confederacy's siege of Fort Sumter by Charleston, South Carolina.</p>\n<p>Larson does a good job going through what happened leading up to the shelling as the newly seceded states wanted to take control of U.S. forts and armories since they declared their independence from the Union.</p>\n<p>Larson uses historical records as well as diaries kept by those involved to go through the different people's motivations and perceived thoughts about what was happening both in Washington and in South Carolina and the Confederacy.</p>\n<p>As someone who has gotten more interested in history as I've gotten older, I would recommend this to anyone wanting to learn more about the Civil War and the run up to the hostilities.</p>\n<blockquote>\n<p>Here lay the greatest of ironies: In thirty-four hours of some of the fiercest bombardment the world had ever seen, no one was killed or even seriously injured, yet this bloodless attack would trigger a war that killed more Americans than any other conflict in the country's history.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/92/",
      "url": "https://kpwags.com/reading-log/92/",
      "title": "Reading Log - September 16, 2024 (#92)",
      "content_html": "\n\t\t<p>A lot of podcasts this week, some useful CSS tricks, the court's ruling against the Internet Archive, and more.</p>\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://alvaromontoro.com/blog/68055/ten-css-one-liners-for-almost-every-project\">CSS One-Liners to Improve (Almost) Every Project</a> - <em>Alvaro Montoro</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://stackoverflow.blog/2024/09/05/the-hidden-cost-of-speed/\">The hidden cost of speed</a> - <em>Brayden A. Hord</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://uxdesign.cc/nikes-25b-blunder-shows-us-the-limits-of-data-driven-ad30b6e3d938\">Nike’s $25B blunder shows us the limits of “data-driven”</a> - <em>Pavel Samsonov</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.citationneeded.news/hachette-v-internet-archive/\">Big publishers think libraries are the enemy</a> - <em>Molly White</em></li>\n<li><a href=\"https://www.techdirt.com/2024/09/05/second-circuit-says-libraries-disincentivize-authors-to-write-books-by-lending-them-for-free/\">Second Circuit Says Libraries Disincentivize Authors To Write Books By Lending Them For Free</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/9/5/24235874/apple-pay-10-years-open-nfc-ios\">10 years later, Apple Pay is amazing — and about to change</a> - <em>David Pierce</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/09/after-starliner-nasa-has-another-big-human-spaceflight-decision-to-make/\">After Starliner, NASA has another big human spaceflight decision to make</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://www.theverge.com/2024/9/12/24241904/boeing-starliner-nasa-iss-spacex-crew-dragon\">Why NASA is sticking with Boeing</a> - <em>Georgina Torbet</em></li>\n<li><a href=\"https://defector.com/neither-elon-musk-nor-anybody-else-will-ever-colonize-mars\">Neither Elon Musk Nor Anybody Else Will Ever Colonize Mars</a> - <em>Albert Burneko</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.techspot.com/news/104722-study-suggests-sec-visits-may-tipping-off-insiders.html\">Study suggests SEC visits as tracked by following mobile location data may be tipping off insiders</a> - <em>Zo Ahmed</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/end-this-farce\">End this Farce</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://99percentinvisible.org/episode/the-double-kick/\">99% Invisible: The Double Kick</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/episodes/15750024-blunder-from-down-under\">Ctrl-Alt-Speech: Blunder from Down Under</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/brian-ketelsen.html\">Coffee &amp; Open Source: Brian Ketelsen</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/project-2025-and-the-fate-of-the-federal-workforce/\">Make Me Smart: Project 2025 and the fate of the federal workforce</a></li>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/articles/not-an-internet-error-how-404-media-aims-to-shake-up-online-journalism\">On the Media: Not an Internet Error: How 404 Media Aims to Shake Up Online Journalism</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1881\">.NET Rocks: .NET Aspire with David Fowler</a></li>\n<li><a href=\"https://www.npr.org/2024/09/09/1198642620/miami-medicare-fraud-malcolm-gladwell\">The Indicator: How Medicare fraud became Miami's vice</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/angie-jones.html\">Coffee &amp; Open Source: Angie Jones</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1880\">.NET Rocks: .NET 8 Migration with Jimmy Bogard</a></li>\n<li><a href=\"https://unhandledexceptionpodcast.com/posts/0064-gitkraken/\">Unhandled Exception: GitKraken - with Justin Roberts and Eric Amodio</a></li>\n<li><a href=\"https://shoptalkshow.com/598/\">ShopTalk Show: Jen Simmons on Interop, WebKit Releases, and New CSS Features in Safari</a></li>\n<li><a href=\"https://www.wtfpod.com/podcast/episode-1503-billie-joe-armstrong\">WTF Podcast: Billie Joe Armstrong</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Green Day - When I Come Around</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/i8dh9gDzmz8\" title=\"Green Day - When I Come Around\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-16T20:29:08Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-hidden-cost-of-speed/",
      "url": "https://kpwags.com/notes/the-hidden-cost-of-speed/",
      "title": "The Hidden Cost of Speed",
      "content_html": "\n\t\t<blockquote>\n<p>Months later, marketing and management requests have continued non-stop and (of course) you’ve had no time to lace everything up. You think back to that fateful decision to implement a quick fix, not anticipating that the organization would utilize it on a daily basis, requiring constant updates for every unique sales avenue. In your haste, you built a system that is functionally not operable within the rest of the ecosystem—and you are now subject to that decision. As the requests take longer and longer to work, questions start to arise: <em>“Is our developer losing his touch? Why is this taking so long when it used to take minutes?”</em></p>\n</blockquote>\n<p>I feel this on a deep spiritual level. All too often we are asked to get features out the door as soon as possible to meet an immediate business need and are not always given the time later to clean the code up to make the system better.</p>\n<p>Tech debt is real, and eventually comes for us all.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-15T20:06:14Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/17/",
      "url": "https://kpwags.com/week-note/17/",
      "title": "Week Notes for September 8 - 14 (#17)",
      "content_html": "\n\t\t<p>My week notes for the week of September 8 through September 14.</p>\n<h2>Progress on Media Repository</h2>\n<p>I've been making great progress on building out my media repository in Node.js and React. Books are almost done, and all that'll be left after that will be my music. I'm happy with how it's going, how it's working, and where things are. It's mostly just a direct copy of the Blazor version, but with some niceties added.</p>\n<h2>Running</h2>\n<p>I've been running every day this month. I've run at least 3.25 miles every day this month, and this past week is no different. What started as taking advantage of some good weather, and then continued as an excuse to skip legs day at the gym has now turned into a 2-week running streak combined with 24 runs in the last 26 days. I'm running more and it's feeling good.</p>\n<p>I did finally do that legs day at the gym Friday and felt it heavily for today's run. My legs are sore and it wasn't even that heavy a day...just the first in a long while...so ow!</p>\n<h2>Hockey Season Starts Anew</h2>\n<p>Tuesday was my hockey team's Fall/Winter season opener. We won 5-2, played a solid team game, and I even tallied 2 goals. Which is weird since I was playing defense. I'm still happy about it though, especially with the win to back it up. I did struggle at the position as I'm more comfortable at wing when I skate out. I got caught flat footed a few too many times, but thankfully my defensive partner and our goalie were able to bail me out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-15T20:01:53Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/91/",
      "url": "https://kpwags.com/reading-log/91/",
      "title": "Reading Log - September 9, 2024 (#91)",
      "content_html": "\n\t\t<p>Two weeks worth of articles this week. A lot of CSS articles this week.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/making-visual-studio-a-bit-more-visual/\">Making Visual Studio a bit more visual</a> - <em>Mads Kristensen</em></li>\n<li><a href=\"https://medium.com/codex/getting-started-with-c-records-7dec761a87b5\">Getting Started with C# Records</a> - <em>Anton Martyniuk</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://dbushell.com/2024/06/22/no-no-javascript/\">No No-JavaScript</a> - <em>David Bushell</em></li>\n<li><a href=\"https://thenewstack.io/5-javascript-security-best-practices-for-2024/\">5 JavaScript Security Best Practices for 2024</a> - <em>Alexander T. Williams</em></li>\n<li><a href=\"https://css-tricks.com/html-web-components-make-progressive-enhancement-and-css-encapsulation-easier/\">HTML Web Components Make Progressive Enhancement and CSS Encapsulation Easier!</a> - <em>Kev Bonett</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/06/what-are-css-container-style-queries-good-for/\">What Are CSS Container Style Queries Good For?</a> - <em>Juan Diego Rodríguez</em></li>\n<li><a href=\"https://css-tricks.com/css-functions-and-mixins-module-notes/\">CSS Functions and Mixins Module Notes</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://css-irl.info/the-problem-with-surveys/\">The Problem With Surveys (and Why You Should Take This One)</a> - <em>Michelle Barker</em></li>\n<li><a href=\"https://piccalil.li/blog/styling-tables-the-modern-css-way/\">Styling Tables the Modern CSS Way</a> - <em>Michelle Barker</em></li>\n<li><a href=\"https://cssgridgenerator.io/\">CSS Grid Generator</a> - <em>Kristjan Retter</em></li>\n<li><a href=\"https://web.dev/blog/at-property-baseline?hl=en\">@property: Next-gen CSS variables now with universal browser support</a> - <em>Una Kravets</em></li>\n<li><a href=\"https://css-tricks.com/css-selectors/\">CSS Selectors</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://frontendmasters.com/blog/the-pitfalls-of-in-app-browsers/\">The Pitfalls of In-App Browsers</a> - <em>Paul Esch-Laurent</em></li>\n<li><a href=\"https://www.travis-ci.com/blog/react-router-demystified-a-developers-guide-to-efficient-routing/\">React Router Demystified: A Developer’s Guide to Efficient Routing</a> - <em>Eliud Kay</em></li>\n<li><a href=\"https://frontendmasters.com/blog/script-integrity/\">Script Integrity</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.code4it.dev/architecture-notes/webapi-vs-rest-vs-pseudo-rest/#wrapping-up\">Davide's Code and Architecture Notes - Web APIs vs REST APIs vs pseudo-REST APIs</a> - <em>Davide Bellone</em></li>\n<li><a href=\"https://www.bennadel.com/blog/4693-code-isnt-magical-its-just-a-series-of-commands.htm\">Code Isn't Magical, It's Just A Series Of Commands</a> - <em>Ben Nadel</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://uxplanet.org/principles-of-spacing-in-ui-design-a-beginners-guide-to-the-4-point-spacing-system-6e88233b527a\">Principles of Spacing in UI Design: A Beginner’s Guide to the 4-Point Spacing System</a> - <em>Bryson M.</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.mnot.net/blog/2024/08/25/feeds\">What RSS Needs</a> - <em>Mark Nottingham</em></li>\n<li><a href=\"https://www.theverge.com/2024/9/3/24234811/nanowrimo-ai-stance-classist-ableist-criticism\">NaNoWriMo is in disarray after organizers defend AI writing tools</a> - <em>Jess Weatherbed</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/security/2024/09/yubikeys-are-vulnerable-to-cloning-attacks-thanks-to-newly-discovered-side-channel/\">YubiKeys are vulnerable to cloning attacks thanks to newly discovered side channel</a> - <em>Dan Goodin</em></li>\n<li><a href=\"https://shkspr.mobi/blog/2024/09/some-thoughts-on-the-yubikey-eucleak-vulnerability/\">Some thoughts on the YubiKey EUCLEAK Vulnerability</a> - <em>Terence Eden</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/incredible-shots-mercury-bepicolumbo-steals-energy\">Incredible shots of Mercury as BepiColumbo steals some of its energy</a> - <em>Philip Plait</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/08/nasas-second-large-launch-tower-has-gotten-stupidly-expensive/\">NASA has to be trolling with the latest cost estimate of its SLS launch tower</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://stackoverflow.blog/2024/07/15/the-ghost-jobs-haunting-your-career-search/\">The ghost jobs haunting your career search</a> - <em>Eira May</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://primecuts.philpearlman.com/p/find-exercise-enjoy\">Find Exercise You Enjoy</a> - <em>Philip Pearlman</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/08/23/1197961495/the-trade-fraud-detective\">Planet Money: The trade fraud detective</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/15632153-chatgpt-told-us-not-to-say-this-but-yolo\">Ctrl-Alt-Speech: ChatGPT Told Us Not to Say This, but YOLO</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/15671677-the-platform-to-prison-pipeline\">Ctrl-Alt-Speech: The Platform to Prison Pipeline</a></li>\n<li><a href=\"https://www.techdirt.com/2024/08/27/techdirt-podcast-episode-401-how-fact-checking-fails/\">Techdirt Podcast: How Fact Checking Fails</a></li>\n<li><a href=\"https://offthemainthread.tech/episode/big-build-bool-bonanza/\">Off the Main Thread: The Big Build Bool Bonanaza II</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.bryanbraun.com/2024/07/31/capability-makes-your-life-simpler/\">Capability makes your life simpler</a> - <em>Bryan Braun</em></li>\n<li><a href=\"https://fev.al/posts/work-journal/\">Use A Work Journal To Recover Focus Faster And Clarify Your Thoughts</a> - <em>Charles Féval</em></li>\n<li><a href=\"https://www.theguardian.com/world/article/2024/aug/28/bald-eagle-injured-raccoon\">‘Injured’ Missouri bald eagle actually ‘too fat to fly’ after gorging on raccoon</a> - <em>Richard Luscombe</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - I Swear</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/BPtZdrgyqRM\" title=\"Dave Hause - I Swear\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-09T22:41:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/code-isnt-magical/",
      "url": "https://kpwags.com/notes/code-isnt-magical/",
      "title": "Code Isn’t Magical, It’s Just a Series of Commands",
      "content_html": "\n\t\t<blockquote>\n<p>If you need to change a line of code, simply ask yourself two questions:</p>\n<ul>\n<li>Where did I get the inputs?</li>\n<li>Who relies on the outputs?</li>\n</ul>\n<p>Answering these questions might not be simple; but, considering the code in this light removes the air of mystery and reduces the problem down to a set of quantifiable values.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-08T18:37:45Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/capability-makes-your-life-simpler/",
      "url": "https://kpwags.com/notes/capability-makes-your-life-simpler/",
      "title": "Capability Makes Your Life Simpler",
      "content_html": "\n\t\t<blockquote>\n<p>Capability makes your life simpler. Tolerance, skills, knowledge, and health are always with you, wherever you go. They are assets but they take up no space. They are stored in your body.</p>\n<p>Some lack capability through no fault of their own, but anyone can increase their capability. It’s an investment that pays dividends every day.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-08T18:36:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/an-ipod-and-no-recommendations/",
      "url": "https://kpwags.com/notes/an-ipod-and-no-recommendations/",
      "title": "An iPod and no recommendations are all I have wanted for my listening habits in 2024",
      "content_html": "\n\t\t<blockquote>\n<p>I listen to my music and no calls can interrupt me. No notifications can interrupt me. No in-the-moment actions can pause my music. I can take an earbud out and there's no algorithm that pauses or unpauses my music. I can't ask Siri about a song.</p>\n<p>This is calm.</p>\n</blockquote>\n<p>I definitely understand where Tom is coming from. While there is definitely some awesomeness to AirPods and the like, there’s still something awesome about the old school iPod.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-08T18:34:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/misfire/",
      "url": "https://kpwags.com/notes/misfire/",
      "title": "Misfire",
      "content_html": "\n\t\t<blockquote>\n<p>This is why &quot;give us your email address for 30% discount&quot; popups and account signup forms are suddenly everywhere. Email addresses are stable, long-lived reidentifiers. Overt mechanisms like this are already replacing third-party cookies. Make no mistake: post-removal, tracking will continue for long as reidentification has perceived positive economic value. The only way to change that equation is legislation; anything else is a band-aid.</p>\n</blockquote>\n<p>I’m kind of curious as to how much email aliases can help with this, and I don’t mean the ‘+’ in the email trick. I use FastMail for my email and can create truly unique emails for services I sign up for. Granted they all share the same domain, but they’re still different. It’s obviously not a panacea, but maybe something?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-08T18:32:12Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/16/",
      "url": "https://kpwags.com/week-note/16/",
      "title": "Week Notes for September 1 - 7 (#16)",
      "content_html": "\n\t\t<p>My week notes for the week of September 1 through September 7.</p>\n<h2>Continued Work on Media Repository Rewrite</h2>\n<p>I spent a fair amount of time working on my media repository rewrite. I was making good progress but stumbled when starting to work with nested queries. I found my way around it, but it makes me miss C#’s way of handling it.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> getGenres <span class=\"token operator\">=</span> _repository<span class=\"token punctuation\">.</span><span class=\"token function\">getGenres</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> getServices <span class=\"token operator\">=</span> _repository<span class=\"token punctuation\">.</span><span class=\"token function\">getServices</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">await</span> Task<span class=\"token punctuation\">.</span><span class=\"token function\">WhenAll</span><span class=\"token punctuation\">(</span>getGenres<span class=\"token punctuation\">,</span> getServices<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> genres <span class=\"token operator\">=</span> getGenres<span class=\"token punctuation\">.</span>Result<span class=\"token punctuation\">;</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> services <span class=\"token operator\">=</span> getServices<span class=\"token punctuation\">.</span>Result<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// the rest of the processing...</span></code></pre>\n<p>Instead, I have to work through callbacks in Node.js with the sqlite3 library.</p>\n<pre class=\"language-js\" tabindex=\"0\"><code class=\"language-js\">repository<span class=\"token punctuation\">.</span><span class=\"token function\">GetGenres</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error<span class=\"token punctuation\">,</span> genres</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\tconsole<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\trepository<span class=\"token punctuation\">.</span><span class=\"token function\">GetServices</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error2<span class=\"token punctuation\">,</span> services</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\tconsole<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span>error2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\n\t\t<span class=\"token comment\">// the rest of the processing...</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I really only have to deal with at most 4 levels deep but I wish there was a better way. If I’m missing something, please reach out.</p>\n<p>Either way, I’m making good progress and I’ve already tested it on my NAS. I ran into a few hiccups, but nothing that looks like a deal breaker.</p>\n<h2>Running</h2>\n<p>The weather has been nice so I’ve been taking advantage of it and getting out, often over lunch for some runs. It’s nice to get some fitness in while breaking up the work day. I find that my mood for the afternoon often tends to be much better when I can get a workout in. I’ve run around 90 miles over the last month and while my legs are feeling it, it feels good. I really should get back to lifting some though.</p>\n<h2>Back on the Ice...Kind of</h2>\n<p>This past week I’ve taken part in some hockey practices and scrimmages. I rented an hour of ice on Wednesday for my team to get some practice and drills in. One of my teammates coaches his kids’ teams and another is familiar with coaching so I asked them to come up with some drills to help out and it was fun and hopefully will help this upcoming season.</p>\n<p>Friday I was asked to play in net for a scrimmage between 2 teams in the division I play on and was able to get more practice in with my new leg pads as well as try out my new pants. The leg pads as it turns out, slide much better on the ice which will take more getting used to. I didn’t see it at the practice 2 weeks ago, but I definitely felt it Friday night.</p>\n<h2>Gorgeous Weather</h2>\n<p>This past week has had some gorgeous weather and along with the runs, I’ve taken advantage of it by sitting out on the porch in the evenings and afternoons. It’s nice to get some fresh air.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-08T18:29:56Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/jeff-kosseff-liar-in-a-crowded-theater/",
      "url": "https://kpwags.com/books/jeff-kosseff-liar-in-a-crowded-theater/",
      "title": "Book Notes for Liar in a Crowded Theater: Freedom of Speech in a World of Misinformation",
      "content_html": "\n\t\t<p>To say I've been upset at the lies, misinformation, and disinformation we see on social media and various TV channels would be an understatement. It makes me angry that people are duped about COVID, voting rights, and who knows what else. But as angry as I might be, the 1st Amendment allows for the speech, and that's the right call.</p>\n<p>Kosseff does a good job going through past legal cases regarding speech. He explains what the cases were about and why the rulings made were decided the way they were and their importance.</p>\n<p>I appreciated his way of explaining the cases and pointing out some of the finer points and nuance of the decisions. He explains why we might not like the decisions, but why they're better than the alternatives.</p>\n<p>It might be a little infuriating, but it's important and a good read.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/after-the-rupture/",
      "url": "https://kpwags.com/notes/after-the-rupture/",
      "title": "After the Rupture",
      "content_html": "\n\t\t<blockquote>\n<p>Not to diminish the harm that can come from layoffs—they can absolutely be traumatic and devastating, and we desperately need better safety nets. But I also want to name the sense of relief and opportunity that often emerges after a big rupture, the generative combination of <em>fuck it</em> and <em>what’s possible now?</em> energy that leads people in directions they had long considered impractical but which now seem ripe for exploration. I see this experience a bit like what happens after an intense fire burns a stretch of forest down to ash: seeds that were dormant and waiting for just that moment suddenly germinate and stretch up to the clear, bright sun.</p>\n</blockquote>\n<blockquote>\n<p>A secret I share about these transitions is that big changes only make sense in hindsight. Some day, years from now most likely, you’ll look back and tell a beautiful story of getting laid off or fired or whathaveyou, and how from that dark and terrible moment came a new beginning. But when you are in the thick of it, when you don’t yet have the gift of a rearview mirror, it won’t feel anything like providence. You’ll feel like you’re flailing about and you’ll want to scream or cry or both at the same time. Your boots will stick in the mud and your ropes will fray and you’ll lose your flint on the coldest night. It will be chaos. But it was chaos that birthed the universe. It is from chaos that many great stories begin. You’ll tell yours in time. First, you have to live it.</p>\n</blockquote>\n<p>Just a thought about tough times...</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-04T22:17:51Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/thoughts-on-yubikey-vulnerability/",
      "url": "https://kpwags.com/notes/thoughts-on-yubikey-vulnerability/",
      "title": "Some thoughts on the YubiKey EUCLEAK Vulnerability",
      "content_html": "\n\t\t<blockquote>\n<p>It looks like everyone's favourite FIDO token provider might have an unpatchable vulnerability! Much <em>Sturm und Drang</em> from the usual sources. But how bad is it really? Not so bad - but it does expose some weaknesses in the very idea of having physical tokens.</p>\n</blockquote>\n<p>It also looks like the attacker will need:</p>\n<ul>\n<li>Physical access to key</li>\n<li>Username &amp; password tied to account protected by key</li>\n<li>$11,000 worth of equipment</li>\n</ul>\n<p>So yes, it doesn’t seem to be an “easy” attack, but geez…it’s always something.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-04T22:15:36Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/cars-are-rolling-computers/",
      "url": "https://kpwags.com/notes/cars-are-rolling-computers/",
      "title": "Cars Are Rolling Computers Now. So What Happens When They Stop Getting Updates?",
      "content_html": "\n\t\t<blockquote>\n<p>Samsung and Google provide Android OS updates and security updates for seven years. Apple halts servicing products seven years after they stop selling them.</p>\n<p>That might not cut it in the auto world, where the average age of cars on US roads is only going up. A recent report found that cars and trucks just reached a new record average age of 12.6 years, up two months from 2023. That means the car software hitting the road today needs to work—and maybe even improve—beyond 2036. The average length of smartphone ownership is just 2.8 years.</p>\n</blockquote>\n<p>It’s not something that you might think about, but with all the technology in cars, how long will the tech be supported? Cars can last a long time if well maintained. Tech seems to be somewhat expendable.</p>\n<p>My Honda Civic is now 10 years old and I don’t plan on getting rid of it anytime soon. The only “tech” I have in my car is the standard entertainment system, but newer cars have a whole lot more between cellular connectivity and much more.</p>\n<p>Is it all going to be maintained and supported? Are security updates going to continue for the life of the car? What will GM, Ford, Honda and others consider the “life of the car”?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-04T22:14:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/09/04/the-internet-isnt-really-that-old/",
      "url": "https://kpwags.com/posts/2024/09/04/the-internet-isnt-really-that-old/",
      "title": "The Internet Isn’t Really that Old",
      "content_html": "\n\t\t<p>I’ve been reading <a href=\"https://bookshop.org/p/books/liar-in-a-crowded-theater-freedom-of-speech-in-a-world-of-misinformation-jeff-kosseff/19780472?ean=9781421447322\">Liar in a Crowded Theater</a> by Jeff Kosseff and he was talking about how some state laws in the early 2000s around speech were written in such a way that did or did not include the Internet. Cases that are super similar, but if done on the internet might not qualify for coverage under the law. It made me think and realize that the Internet is not really that old.</p>\n<p>Nowadays, the Internet is ubiquitous in our lives, but 30 years ago, it was only in its infancy. I remember getting dialup internet as a teenager and just being amazed by it. I’m only in my early forties, but the early part of my life, the Internet wasn’t a thing. There are adults that have lived their whole lives with access to the internet.</p>\n<p>I guess this isn’t really a novel thought, it just struck me last night and I felt like sharing.</p>\n<p>As for the laws mentioned above, I’d wager they’ve been updated.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-04T22:13:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/09/03/august-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/09/03/august-2024-check-in/",
      "title": "August 2024 Check-In",
      "content_html": "\n\t\t<p>August came and went pretty quickly. I ran a lot, finished redesigning my site, did some house work, and felt like I had a productive month.</p>\n<h2>Hockey Season Comes to an End</h2>\n<p>The spring and summer hockey seasons have come to an end so I'm in a slight lull from playing. Both teams I play full time on made it to the playoffs, but were eliminated. We played well and still had fun which is all I really want.</p>\n<p>I ended up taking a few pucks off my knee and thigh late in the season so I ended up getting new (to me) leg pads off Sideline Swap, and new pants to hopefully help keep me better protected next season. I was able to try out the leg pads in a practice and thankfully they feel just like my old ones, but with better protection. I was slightly worried I would have to adjust more to new gear, so it's nice that they feel the same.</p>\n<h2>Finished Redesign</h2>\n<p>I ended up finishing <a href=\"https://kpwags.com/posts/2024/08/23/a-wild-redesign-has-appeared/\">my redesign</a> and am happy with how it turned out. It was on my radar for a while and I'm glad I was able to get it out. Also, my build times have been shrunk since I moved to my local media repository. Instead of build times taking close to a minute from fetching all the data from Notion, the builds take maybe 10 seconds for the first render, and then seconds after. I love how flexible 11ty is. (For the record, the build times were as long as they were, not because of 11ty, but because of reaching out to Notion every build.)</p>\n<h2>My Media Repository Done...and Then Not</h2>\n<p>I finished building my repository, got it containerized so it could run on Docker, logged into my NAS...only to then find that Docker was not compatible with my NAS. <em><strong>Oof!</strong></em> I got it running on my Linux box for the time being, and while I spend more time on Linux than I do on Windows, it's not ideal as it would be inaccessible if I want to play games on Windows. There are guides on how to get Docker running on my NAS, but I'm not certain how far I want to go to run things in an unsupported manner.</p>\n<p>So, I'm starting a new version. I'll keep the Sqlite database I created through .NET, but am building the API in Node.js. It's been a long while since I've really worked with Node, but I've been making good progress so far.</p>\n<p>I was originally going to build the frontend with web components and basic HTML/CSS/JavaScript, but I decided that I wanted to get this up and running fast and went with React since it wouldn't be as much of a learning curve as I have not used web components extensively. Yes, I know it's a cop out, and once the initial version is out there, I do intend to remove React and go with more web standards and less JS. I just want something up and running fast, and React allows me to do just that.</p>\n<h2>Running...a Lot</h2>\n<p>Early in the month, there was a week where it was in the high-60s, low-70s. I took advantage of the beautiful weather to get outside and run. Well those runs continued even when the temperatures climbed back into the low-80s. I was feeling good so I just kept going. In the end I ran just shy of 70 miles. My lifting has taken a hit, but I'm not mad about it.</p>\n<h2>House Work</h2>\n<p>Throughout the month I ended up taking care of a bunch of work around the house. When we moved in almost 10 years ago, we took down the wallpaper and painted, but let the trim be. Needless to say, it needed a refresh so I started going through all the main rooms of the house and putting a fresh coat of paint on. We're considering adopting another dog and cat and figure it'll be easier to do the painting now rather than when furry friends start wandering around.</p>\n<p>We also have quite hard water. A little over a year ago, I noticed that it didn't seem like our water softener was working properly. After some debugging with my Dad, we still couldn't quite figure it out. My Dad did have a theory that the exit tube was clogged and the water softener couldn't get the suction going to eject the water. Sure enough, when I had the water softener eject the water into buckets, it seemed to work as it was supposed to. I had to dig up part of my front garden, but found the tube, and sure enough, the connection was loose and the one tube had split. I replaced the tubing, and ran another cycle and it worked! I ended up cleaning out the entire tub and replaced all the salt. So hopefully that can be crossed off my to-do list for a while.</p>\n<h2>Monthly Round-Up</h2>\n<h3>🏃🏼‍♂️ Fitness</h3>\n<ul>\n<li><strong>Running:</strong> 68.33 miles ⬆️</li>\n<li><strong>Walking:</strong> 2.00 miles ⬆️</li>\n<li><strong>Biking:</strong> 0 miles ➡️</li>\n<li><strong>Lifting:</strong> 116,043 ⬇️</li>\n</ul>\n<h3>📚 Reading</h3>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-blood-telegram-nixon-kissinger-and-a-forgotten-genocide-gary-j-bass/9789502?ean=9780307744623\">The Blood Telegram: Nixon, Kissinger, and a Forgotten Genocide</a> by Gary J. Bass</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-firm-john-grisham/7309328?ean=9780385319058\">The Firm</a> by John Grisham</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-internet-con-how-to-seize-the-means-of-computation-cory-doctorow/18771891?ean=9781804291245\">The Internet Con: How to Seize the Means of Computation</a> by Cory Doctorow</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/gentle-writing-advice-how-to-be-a-writer-without-destroying-yourself-chuck-wendig/18825636?ean=9781440301209\">Gentle Writing Advice: How to Be a Writer Without Destroying Yourself</a> by Chuck Wendig</li>\n<li>Started <a href=\"https://bookshop.org/p/books/liar-in-a-crowded-theater-freedom-of-speech-in-a-world-of-misinformation-jeff-kosseff/19780472?ean=9781421447322\">Liar in a Crowded Theater: Freedom of Speech in a World of Misinformation</a> by Jeff Kosseff</li>\n</ul>\n<h3>✍🏻 Writing</h3>\n<ul>\n<li>Reading Logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/87/\">August 5 (#87)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/88/\">August 12 (#88)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/89/\">August 19 (#89)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/90/\">August 26 (#90)</a></li>\n</ul>\n</li>\n<li>Week Notes\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/08/04/week-notes/\">July 28 - August 3</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/08/11/week-notes/\">August 4 - 10</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/08/18/week-notes/\">August 11 - 17</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/08/25/week-notes/\">August 18 - 24</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/09/01/week-notes/\">August 25 - 31</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/08/07/switching-to-obsidian/\">switching to Obsidian</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/08/23/a-wild-redesign-has-appeared/\">my site redesign</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/08/25/building-my-media-repository/\">building my media repository</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/08/28/rate-limiting-apple-watch-notifications/\">being annoyed by my watch activity reminders</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/08/28/containerizing-an-existing-blazor-project/\">containerizing a Blazor app</a></li>\n</ul>\n<h3>🎮 Gaming</h3>\n<ul>\n<li>Finished <a href=\"https://www.playstation.com/en-us/games/ratchet-and-clank-rift-apart/\">Ratchet &amp; Clank: A Rift Apart</a></li>\n<li>Finished <a href=\"https://www.playstation.com/en-us/games/the-last-of-us-remastered/\">The Last of Us</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/games/the-last-of-us-part-ii-remastered/\">The Last of Us, Part II</a></li>\n<li>Started <a href=\"https://www.ea.com/games/nhl/nhl-24\">NHL 24</a></li>\n<li>Started <a href=\"https://www.ea.com/games/madden-nfl/madden-nfl-25\">Madden 25</a></li>\n</ul>\n<h3>📺 Watched</h3>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt26227818/\">Turning Point: The Bomb and the Cold War</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt1831804/\">The Stand</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt11691774/\">Only Murderers in the Building</a></li>\n</ul>\n<h3>🎬 Movies</h3>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt14230388/\">Asteroid City</a></li>\n<li><a href=\"https://www.imdb.com/title/tt3397884/\">Sicario</a></li>\n<li><a href=\"https://www.imdb.com/title/tt4995540/\">Being the Ricardos</a></li>\n<li><a href=\"https://www.imdb.com/title/tt2140479/\">The Accountant</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-03T23:35:13Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/15/",
      "url": "https://kpwags.com/week-note/15/",
      "title": "Week Notes for August 25 - 31 (#15)",
      "content_html": "\n\t\t<p>My week notes for the week of August 25 through August 31.</p>\n<h2>House Work</h2>\n<p>It's Labor Day weekend here in the US and I'm spending part of the long weekend taking care of house projects. I was able to clean out and restart the water softener, and started painting the baseboards in the living room. We figure we'll open our house and heart to pets again, and it'll be easier to paint now than later.</p>\n<h2>Conversion to Node.js &amp; React</h2>\n<p>After not being able to get my .NET/Blazor media repository running on my NAS, I started converting my media repository over to Node.js &amp; React. I'm pretty sure Node is supported as I was able to get it installed. I'll have to get an MVP up and running quickly to prove it.</p>\n<p>I originally wanted to build it using web components, but I opted to push that to the next version. To free up my desktop and make it easier to do some PC gaming, I want to get the next version built ASAP. Once it's up and running, then I'll worry about stripping out React. It's not ideal, but oh well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-09-01T20:51:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/08/28/containerizing-an-existing-blazor-project/",
      "url": "https://kpwags.com/posts/2024/08/28/containerizing-an-existing-blazor-project/",
      "title": "Containerizing an Existing Blazor Project",
      "content_html": "\n\t\t<p>I've been working on a .NET 8 Blazor Web App and needed to create a docker image of it so I can deploy it to my Synology NAS. I ran into several hiccups during the process and figured I'd share what I learned about the process.</p>\n<h2>A Little Bit About the Project</h2>\n<p>The project I'm containerizing to is the media repository I've been working on. The project is in .NET 8 and it consists of several projects.</p>\n<ul>\n<li><strong>WagsMediaRepository.Web</strong> - The Blazor Web App</li>\n<li><strong>WagsMediaRepository.Application</strong> - The interface definitions for the project</li>\n<li><strong>WagsMediaRepository.Domain</strong> - The models for the project</li>\n<li><strong>WagsMediaRepository.Infrastructure</strong> - The repositories and Entity Framework definitions to interface with the database</li>\n</ul>\n<p>I mention this first because the multiple projects in the solution was the biggest hiccup I ran into.</p>\n<h2>Building My Knowledge</h2>\n<p>It’s safe to say that coming into this, I knew <strong>just enough</strong>* about Docker to be dangerous. I haven’t really used it all that extensively other than getting some images up and running for both work and personal projects.</p>\n<p>I know what Docker is and why it can be useful, but my actual working knowledge is lacking.</p>\n<h2>Building Out the Docker File</h2>\n<p>The hardest part of my process was handling the different libraries my Blazor web app relies on. So many of the tutorials that I went through were simple apps with a single .NET project in them. When I went to try to build the docker image, it would error out saying it couldn’t find the project references.</p>\n<p>After some searching and digging, I found that I needed to add some <code>COPY</code> instructions to copy the additional libraries.</p>\n<pre class=\"language-docker\" tabindex=\"0\"><code class=\"language-docker\"><span class=\"token instruction\"><span class=\"token keyword\">FROM</span> mcr.microsoft.com/dotnet/aspnet:8.0 <span class=\"token keyword\">AS</span> base</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 80</span>\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 443</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> mcr.microsoft.com/dotnet/sdk:8.0 <span class=\"token keyword\">AS</span> build</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /src</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> [<span class=\"token string\">\"WagsMediaRepository.Web/WagsMediaRepository.Web.csproj\"</span>, <span class=\"token string\">\"WagsMediaRepository.Web/\"</span>]</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> [<span class=\"token string\">\"WagsMediaRepository.Application/WagsMediaRepository.Application.csproj\"</span>, <span class=\"token string\">\"WagsMediaRepository.Application/\"</span>]</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> [<span class=\"token string\">\"WagsMediaRepository.Domain/WagsMediaRepository.Domain.csproj\"</span>, <span class=\"token string\">\"WagsMediaRepository.Domain/\"</span>]</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> [<span class=\"token string\">\"WagsMediaRepository.Infrastructure/WagsMediaRepository.Infrastructure.csproj\"</span>, <span class=\"token string\">\"WagsMediaRepository.Infrastructure/\"</span>]</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> dotnet restore <span class=\"token string\">\"WagsMediaRepository.Web/WagsMediaRepository.Web.csproj\"</span></span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> <span class=\"token string\">\"/src/WagsMediaRepository.Web\"</span></span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> dotnet build <span class=\"token string\">\"WagsMediaRepository.Web.csproj\"</span> -c Release -o /app/build</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> build <span class=\"token keyword\">AS</span> publish</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> dotnet publish <span class=\"token string\">\"WagsMediaRepository.Web.csproj\"</span> -c Release -o /app/publish</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> base <span class=\"token keyword\">AS</span> final</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">publish</span></span> /app/publish .</span>\n<span class=\"token instruction\"><span class=\"token keyword\">ENTRYPOINT</span> [<span class=\"token string\">\"dotnet\"</span>, <span class=\"token string\">\"WagsMediaRepository.Web.dll\"</span>]</span></code></pre>\n<h2>Actually Building the Image</h2>\n<p>The next wall I hit was running the <code>docker build</code> command. When I ran it in the <code>WagsMediaRepository.Web</code> directory, it failed because it couldn’t find the class libraries.</p>\n<p>What I found from searching is that I had to run the docker build command from one directory up (where all the project folders were).</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"token function\">docker</span> build <span class=\"token parameter variable\">-t</span> wags-media-repository <span class=\"token parameter variable\">-f</span> WagsMediaRepository.Web/Dockerfile <span class=\"token builtin class-name\">.</span></code></pre>\n<p>I ran it in the parent directory and specified the docker file, and sure enough, it found all the class libraries and the image built.</p>\n<h2>Deploying</h2>\n<p>This part never happened. As it turns out, my NAS doesn’t officially support Docker since it runs on an ARM chip. I’ve found some instructions on how to get Docker up and running anyway, but I’m a little worried about screwing my NAS up. I ended up just having it run as a service on my LinuxMint desktop so all of this was for naught. Either way though, maybe it will still help someone.</p>\n<p>Thanks to <a href=\"https://chrissainty.com/\">Chris Sainty</a> &amp; <a href=\"https://josiahmortenson.dev/\">Josiah Mortenson</a> for their <a href=\"https://chrissainty.com/containerising-blazor-applications-with-docker-containerising-a-blazor-server-app/\">blog</a> <a href=\"https://josiahmortenson.dev/blog/2020-06-08-aspnetcore-docker-https\">posts</a> that helped me figure this out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-28T18:23:37Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/08/28/rate-limiting-apple-watch-notifications/",
      "url": "https://kpwags.com/posts/2024/08/28/rate-limiting-apple-watch-notifications/",
      "title": "Rate Limiting Apple Watch Fitness Notifications",
      "content_html": "\n\t\t<p>I <a href=\"https://kpwags.com/posts/2024/05/23/finding-a-new-way-to-run/\">wrote about how I adjusted the way I run</a> back in May. I also mentioned that my watch can help me keep track of my heart rate and alert me of what zone I’m in. That alert is starting to be a little annoying.</p>\n<p>Hear me out. I appreciate the alerts as it allows me to passively keep tabs on my heart rate. What’s annoying is when I’m on the border of the zone. What happens here is that I will often get alerts every five seconds or so. “Above zone…in zone…above zone…in zone…” and so on. Okay, great, I now know I’m right on the cusp of either too high or too low.</p>\n<p>I wish I could rate limit the alerts. I don’t need the constant alerts. I’m not sure what the right amount is, but no more than 1-2 a minute would be necessary I would think.</p>\n<p>It’s not a huge thing, but it’s annoying when I’m trying to listen to a podcast only to have the alert voice constantly interrupting the podcast.</p>\n<p>/end rant</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-28T00:13:39Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/90/",
      "url": "https://kpwags.com/reading-log/90/",
      "title": "Reading Log - August 26, 2024 (#90)",
      "content_html": "\n\t\t<p>More <em>Why Your Team Sucks</em>, a rant on front-end development, what the web would be like with out women (spoiler: it'd suck), and more.</p>\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.poppastring.com/blog/primary-constructors-class-vs-record\">Primary constructors - class vs record</a> - <em>Mark Downie</em></li>\n<li><a href=\"https://www.telerik.com/blogs/aspnet-core-basics-documenting-apis\">ASP.NET Core Basics: Documenting APIs</a> - <em>Assis Zang</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.speedcurve.com/blog/15-neglected-page-speed-optimizations/\">15 page speed optimizations that sites ignore (at their own risk)</a> - <em>Tammy Everts</em></li>\n<li><a href=\"https://afixt.com/a-brief-introduction-to-keyboard-accessibility/\">A Brief Introduction to Keyboard Accessibility</a> - <em>Karl Groves</em></li>\n<li><a href=\"https://blog.frankmtaylor.com/2024/06/20/a-rant-about-front-end-development/\">A Rant about Front-end Development</a> - <em>Frank M Taylor</em></li>\n<li><a href=\"https://developer.mozilla.org/en-US/blog/javascript-set-methods/\">New JavaScript Set methods</a> - <em>Brian Smith</em></li>\n<li><a href=\"https://www.telerik.com/blogs/react-usedebugvalue-hook\">The React useDebugValue Hook</a> - <em>Hassan Djirdeh</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.travis-ci.com/blog/unit-testing-vs-integration-testing/\">Unit Testing vs Integration Testing: What is Best for You</a> - <em>Amr Essam</em></li>\n<li><a href=\"https://nowebwithoutwomen.com/\">No Web Without Women</a> - <em>A Selman Project</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/06/mdx-or-how-i-learned-love-multimedia-writing/\">How I Learned To Stop Worrying And Love Multimedia Writing</a> - <em>Frederick O’Brien</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://tools.keithjgrant.com/theme-machine/\">Theme Machine</a> - <em>Keith J. Grant</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.stefanjudis.com/blog/web-content-and-copyrights/\">Web content, the social contract and copyrights</a> - <em>Stefan Judis</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/08/20/heres-why-the-debate-over-open-source-ai-matters-for-us-humans/\">Here’s why the debate over open source AI matters for us humans</a> - <em>Matt Levin</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-philadelphia-eagles\">Why Your Team Sucks 2024: Philadelphia Eagles</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-miami-dolphins\">Why Your Team Sucks 2024: Miami Dolphins</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-los-angeles-rams\">Why Your Team Sucks 2024: Los Angeles Rams</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-pittsburgh-steelers\">Why Your Team Sucks 2024: Pittsburgh Steelers</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/the-new-wave-of-private-school-vouchers/\">Make Me Smart: The new wave of private school vouchers</a></li>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/new-online-age-verification-tools-could-exclude-lots-of-adults/\">Marketplace Tech: New online age-verification tools could exclude lots of adults</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - The Devil in My Bloodstream (Live)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/pD0pupxdkco\" title=\"The Wonder Years - The Devil in My Bloodstream (Live)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-26T21:52:30Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/08/25/building-my-media-repository/",
      "url": "https://kpwags.com/posts/2024/08/25/building-my-media-repository/",
      "title": "Building My Media Repository",
      "content_html": "\n\t\t<p>Over the course of the last several months, I’ve been building a new web app to store content for my site rather than Notion. I’ve been wanting to own my data and this allows me to keep control of my gain better control. I’ve mentioned this before, but figured I’d go through some of the technical details behind it so far.</p>\n<h2>Technology Choices</h2>\n<h3>Blazor</h3>\n<p>I’ve been using Blazor a lot at my job and have been using it for side projects so it made sense to stick with it for this. So far, it’s been easy for me to pick up and build out. Granted part of this is my familiarity with .NET, but the other part is how familiar this is with my React background.</p>\n<p>I originally started to build it with just the standard controls that were built into Blazor and .NET. Part way through, I’ve started integrating the <a href=\"https://blazor.radzen.com/\">Radzen</a> component library for some of the controls due to ease and better usability. I might very well tie more of that into the app, but for the moment, I am limiting what I use Radzen for as I want to get this out, up and running before I see what all it can do for me. for me to pick up and build out.</p>\n<h3>Entity Framework</h3>\n<p>Microsoft built Entity Framework to be a full-fledged ORM for databases for .NET. For simple applications like my media repository, it’s the perfect tool. I was able to define the database in code and deploy it to the Sqlite file from the console.</p>\n<p>There’s been debate about Entity Framework performance on larger, more complex projects, but for my needs, it’s a fantastic tool.</p>\n<h3>Sqlite</h3>\n<p>When I first started laying things out, I was going back and forth as to whether I wanted to use a database like MySQL, Microsoft SQL, or PostgreSQL, or something more simple like Sqlite.</p>\n<p>I ultimately chose Sqlite because I felt like it would be the easiest to keep backed up. The downside of owning your data is that you have to maintain it and back it up. (Note that that can be a mixed blessing as well because you know that it is actually being backed up. I assume Notion has data recovery setup, but I can’t say with 100% certainty it does.)</p>\n<p>I also figured my database structure was simple and the use case simple enough that a full fledged DB would be overkill. Sqlite seemed a good choice and so far, I’m happy with my decision.</p>\n<h2>Importing Data</h2>\n<p>The one challenge I’m going to have to handle is importing the data from Notion into my new repository. I can export the data easily enough, but then I’d have to import it as well as handle the different foreign key constraints. Doable, but could be tricky.</p>\n<p>Instead, I added a console application to take advantage of the code I wrote for the web app as well as the code I’ve already written to integrate Notion’s API for my reading logs. I was able to take the code that pulls from my Notion Link Database and adapted it to pull from my media databases as well.</p>\n<p>I’ll also fully admit that the import tool feels kind of janky. It’s definitely not production ready code, but it does the job I need it to do.</p>\n<h2>Exporting Data to 11ty</h2>\n<p>The final part of this is to make sure that I can generate the JSON files 11ty needs to generate the content. For this I added an API controller to the Blazor project and built a console app that fires off a few HTTP requests to grab the data and then save it to disk in a JSON file.</p>\n<h2>Issues with Deployment</h2>\n<p>Originally I was going to build a Docker image for this and have it run on my Synology NAS. I unfortunately didn’t realize that my NAS doesn’t support Docker, officially anyway. I did find some instructions on how to install it anyway, but I’m hesitant. Instead, I have it hosted on my desktop. The only downside with that is that I dual boot my desktop for gaming. When I’m in Windows for games, my media repository would be unavailable as it’s on my LinuxMint partition. The good news is that I’m on Linux far more than Windows, but it is something I’m concerned with.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-25T15:45:50Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/14/",
      "url": "https://kpwags.com/week-note/14/",
      "title": "Week Notes for August 18 - 24 (#14)",
      "content_html": "\n\t\t<p>My week notes for the week of August 10 through August 17.</p>\n<h2>Finished My Redesign</h2>\n<p>If you're reading this on my site, you might notice that <a href=\"https://kpwags.com/posts/2024/08/23/a-wild-redesign-has-appeared/\">it looks a bit different</a>. Along with my media repository being done, I took advantage of the switch of the media files to also tweak the site. I have a few last things I want to tweak, but that's minor.</p>\n<h2>New Leg Pads</h2>\n<p>I ended up buying new (to me) goalie leg pads for hockey. After taking the puck off the knee (lucky shot, really) I decided a newer pair would be better. I found a pair on Sideline Swap at a good price and now I'm excited to give them a try Monday night.</p>\n<h2>Even More Running</h2>\n<p>The weather this week was amazing...taking advantage, I ran even more this week than last, totaling a little over 19.5 miles. The runs went well and I think the weather really helped allow me to keep a decent pace.</p>\n<h2>Figured Out My Water Softener Issues (Finally)</h2>\n<p>Our water softener hasn't been working for the last year or so. It's been an item on my to-do list for a while to try to fix it. Last year I tried completely emptying it and cleaning the filter. That didn't fix it. Finally, thanks to help from my Dad, we tracked the likely issue to be a clogged exit tube. Sure enough, if I had the water softener expel the water into buckets, it worked properly. After digging up the hose outside, sure enough the hose had snapped and got clogged with dirt. I replaced the hose and sured up the hose connector, ran the water softener through a cycle, and it all seems to be working. Last step will be to empty it and replace the salt, but I <em>hope</em>, I found the problem.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-25T15:23:18Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/a-rant-about-front-end-development/",
      "url": "https://kpwags.com/notes/a-rant-about-front-end-development/",
      "title": "A Rant about Front-end Development",
      "content_html": "\n\t\t<blockquote>\n<p>Chances are, the things you don’t like about CSS are the things you haven’t bothered to understand about it.</p>\n</blockquote>\n<p>I will say, I did have gripes with CSS early in my career. The more I’ve used it though, the more I’ve grown to understand it. It can take some time to wrap your head around it. Dismissing it out of hand is not the answer.</p>\n<blockquote>\n<p>My brothers and sisters in Christ I want you to know that I care about your souls enough to share these truths with you:</p>\n<ul>\n<li>You don’t need JavaScript to make a web page.</li>\n<li>You don’t need JavaScript to write styles.</li>\n<li>You don’t need JavaScript to make an animation</li>\n<li>You don’t need JavaScript just to show content.</li>\n</ul>\n</blockquote>\n<p>I take pride in that my site limits its use of JavaScript. JS certainly has its place and I do use it, but boy do some developers rely on it for tasks that just don’t need it.</p>\n<blockquote>\n<p><em>You don’t need a framework to render static content to the end user. Stop creating complex solutions to simple problems</em></p>\n</blockquote>\n<p>Amen.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-23T20:26:48Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/08/23/a-wild-redesign-has-appeared/",
      "url": "https://kpwags.com/posts/2024/08/23/a-wild-redesign-has-appeared/",
      "title": "A Wild Redesign has Appeared!",
      "content_html": "\n\t\t<p>You might have noticed some changes in the look and feel of the site. Over the last month I spent time rebuilding my site to hopefully make it look a little nicer.</p>\n<p>I had been considering this for a little while, I wanted to improve some of the typography, spacing, and the look and feel.</p>\n<p>The impetus to do it now was that I had just finished my media repository and I was going to have to adjust the media pages to pull from the generated JSON rather than the Notion API anyway, so it seemed as good a time as any.</p>\n<p>I took advantage of the redesign to clean up older CSS, combine CSS, and remove a lot of code that was either duplicated or extraneous. It was nice to see a bunch of CSS and even some JS files disappear.</p>\n<h2>New Features</h2>\n<p>This wasn't just a redesign in that I gave it a new skin. I also added some additional features to my site in the process.</p>\n<h3>Better Dialogs for My Ratings and Thoughts</h3>\n<p>On my <a href=\"https://kpwags.com/bookshelf/\">bookshelf</a>, <a href=\"https://kpwags.com/tv/\">TV</a>, <a href=\"https://kpwags.com/movies/\">movies</a>, and <a href=\"https://kpwags.com/video-games/\">video games</a> pages, there are buttons (assuming you have JS enabled) that pop up a dialog with some additional thoughts I have on the movie, TV show, book, or video game. That's still there, but now I make sure to show a little more in the dialog to make it clear which item the thoughts are tied to.</p>\n<h3>Music Albums Now Clickable</h3>\n<p>You can now click on the albums on the <a href=\"https://kpwags.com/music/\">music</a> page to see more info about the album, including my thoughts if I have any of note.</p>\n<h3>Filtering</h3>\n<p>I have added filtering on both my books and video game pages. You can filter the books based on genre as well as fiction/non-fiction. Video games can be filtered by platform, genre, as well as completion status.</p>\n<h2>Next Steps</h2>\n<p>The next steps are mostly simple. Keep writing and adding content. Maybe some tweaks here and there.</p>\n<p>Also, if you see anything weird, let me know. Definitely possible I missed something or introduced a bug.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-23T20:20:34Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/89/",
      "url": "https://kpwags.com/reading-log/89/",
      "title": "Reading Log - August 19, 2024 (#89)",
      "content_html": "\n\t\t<p>More <em>Why Your Team Sucks</em>, some CSS tricks, and attempt to keep baseball in Oakland, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://endler.dev/2024/the-dying-web/\">The Dying Web</a> - <em>Matthias Endler</em></li>\n<li><a href=\"https://csscade.com/a-background-image-trick-most-people-dont-know-about/\">A background-image trick most people dont know about</a> - <em>Robin Rendle</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2018/06/placeholder-attribute/\">Don’t Use The Placeholder Attribute</a> - <em>Eric Bailey</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/05/modern-css-layouts-no-framework-needed/\">Modern CSS Layouts: You Might Not Need A Framework For That</a> - <em>Brecht De Ruyte</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://drewdevault.com/2024/07/16/2024-07-16-So-you-want-to-compete-with-FOSS.html\">So you want to compete with or replace open source</a> - <em>Drew DeVault</em></li>\n<li><a href=\"https://stackoverflow.blog/2024/06/19/the-real-10x-developer-makes-their-whole-team-better/\">The real 10x developer makes their whole team better</a> - <em>Eira May</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/08/06/why-im-joining-the-bluesky-board-to-support-a-vision-of-a-more-open-decentralized-internet/\">Why I’m Joining The Bluesky Board To Support A Vision Of A More Open, Decentralized Internet</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.theverge.com/2024/8/13/24218868/flipboard-fediverse-inside-app\">Flipboard is going to let you follow fediverse accounts right inside the app</a> - <em>Jay Peters</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.theringer.com/mlb/2024/8/13/24216407/oakland-ballers-pro-sports-startup-athletics\">How to Start a Professional Sports Team, Win Games, and Save the Town</a> - <em>Dan Moore</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-seattle-seahawks\">Why Your Team Sucks 2024: Seattle Seahawks</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-jacksonville-jaguars\">Why Your Team Sucks 2024: Jacksonville Jaguars</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-cincinnati-bengals\">Why Your Team Sucks 2024: Cincinnati Bengals</a> - <em>Sarah York</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-indianapolis-colts\">Why Your Team Sucks 2024: Indianapolis Colts</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://99percentinvisible.org/episode/empire-of-the-sum/\">99% Invisible: Empire of the Sun</a></li>\n<li><a href=\"https://dot-social.simplecast.com/episodes/john-battelle\">Dot Social Podcast: Overcoming the ‘Extraordinary Inertia’ of the Web We've Built, with Author John Battelle</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1876\">.NET Rocks: Agile Application Security with Laura Bell Main</a></li>\n<li><a href=\"https://www.tetragrammaton.com/content/trentreznor-podcast\">Tetragrammaton Podcast: Trent Reznor</a></li>\n<li><a href=\"https://www.tetragrammaton.com/content/tom-hanks-podcast\">Tetragrammaton Podcast: Tom Hanks</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>New Found Glory - Part of Your World</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/KuxZUwq9LFA\" title=\"New Found Glory - Part of Your World\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-19T11:55:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/13/",
      "url": "https://kpwags.com/week-note/13/",
      "title": "Week Notes for August 11 - 17 (#13)",
      "content_html": "\n\t\t<p>My week notes for the week of August 10 through August 17.</p>\n<h2>End of the Hockey Season</h2>\n<p>The hockey team I captain was sadly eliminated in the playoffs in a tight 4-3 loss. Was definitely a good, fun season, but a disappointing end. Oh well, next season starts mid-September.</p>\n<h2>Media Repository Up &amp; Running</h2>\n<p>I got my media repository up and running on my Linux Mint desktop. I can easily access it within my home network which is what I’m going for. It’d be nice to have more global reach, I’m home most of the time and it saves me from having to add authentication to the app.</p>\n<p>I’ll need to re-jigger the JSON generator to support it, and I do want to revamp the UI. To start, I just wanted a working system, and I was able to get it up and running quickly with the thought of going back in later and improving it.</p>\n<h2>Lots of Running</h2>\n<p>I was in the mood to run this week, ended up running a little over 17.5 miles. The runs went well and I felt like I was able to generally keep a decent pace.</p>\n<h2>Website Redesign</h2>\n<p>I've made fantastic work on my website redesign. I have all the major pages rebuilt, and am now just going through some final cleanup. It'll be nice to have it done to limit the differences between the two versions. The new version runs completely off my media repository while the current version still runs off Notion. The build time difference is extreme and I'm looking forward to the quicker builds working off the pre-built JSON.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-18T22:06:42Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/88/",
      "url": "https://kpwags.com/reading-log/88/",
      "title": "Reading Log - August 12, 2024 (#88)",
      "content_html": "\n\t\t<p>More <em>Why Your Team Sucks</em>, details about .NET 9, and Elon being awful as per usual.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://visualstudiomagazine.com/Articles/2024/06/20/net-9-preview-5.aspx\">New .NET 9 Templates for Blazor Hybrid, .NET MAUI</a> - <em>David Ramel</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/its-time-to-talk-about-css5/\">It’s Time To Talk About “CSS5”</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://www.jameskerr.blog/posts/3-types-of-css-utility-classes/\">The 3 Types of CSS Utility Classes</a> - <em>James Kerr</em></li>\n<li><a href=\"https://gomakethings.com/the-many-ways-to-hide-things-in-the-dom/\">The many ways to hide things in the DOM</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://piccalil.li/blog/its-about-time-i-tried-to-explain-what-progressive-enhancement-actually-is/?ref=main-rss-feed\">It’s about time I tried to explain what progressive enhancement actually is</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/08/07/it-always-gets-dumber-elon-sues-the-ad-coalition-he-just-rejoined-because-he-thinks-its-illegal-to-not-advertise-on-extwitter/\">It Always Gets Dumber: Elon Sues The Ad Coalition He Just Rejoined Because He Thinks It’s Illegal To Not Advertise On ExTwitter</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-las-vegas-raiders\">Why Your Team Sucks 2024: Las Vegas Raiders</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-denver-broncos\">Why Your Team Sucks 2024: Denver Broncos</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-minnesota-vikings\">Why Your Team Sucks 2024: Minnesota Vikings</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-new-york-jets\">Why Your Team Sucks 2024: New York Jets</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-chicago-bears\">Why Your Team Sucks 2024: Chicago Bears</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-atlanta-falcons\">Why Your Team Sucks 2024: Atlanta Falcons</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-tennessee-titans\">Why Your Team Sucks 2024: Tennessee Titans</a> - <em>Mike Tanier</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/15559376-should-speech-cost-a-garm-and-a-leg\">Ctrl-Alt-Speech Podcast: Should Speech Cost a GARM and a Leg?</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>American Aquarium - Messy as a Magnolia</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bYOSULYl4Q0\" title=\"American Aquarium - Messy as a Magnolia\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-12T22:53:40Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/12/",
      "url": "https://kpwags.com/week-note/12/",
      "title": "Week Notes for August 4 - 10 (#12)",
      "content_html": "\n\t\t<p>My week notes for the week of August 4 through August 10.</p>\n<h2>Puck Off the Knee</h2>\n<p>Monday I was supposed to play 2 hockey games. Unfortunately, late in the 3rd period a puck managed to sneak past my leg pads and nailed me on the knee. My knee pads helped a little bit, but that was still the end of my night. Got a nice bruise from it, but thankfully the damage wasn't as bad as it could've been.</p>\n<h2>Good Progress on Redesign</h2>\n<p>I've been spending a good amount of time on my site redesign and am making really good progress. I've cleaned up some code that's been floating around and overall things are looking nice. I've even been able to add some new features that I've been wanting to add. I'm hoping to have it done in the next week or two.</p>\n<h2>A Hang-Up in my Media Repository</h2>\n<p>I was planning on getting docker set up on my  Synology NAS for my media repository to run on. That got shot down as apparently Docker is not supported on my NAS due to the wrong chipset. I spent Tuesday evening trying to figure out a workaround I felt comfortable with. I found instructions on how to do it, but said there could be unintended side effects so I'm not sure what my next steps are. I've gotten my LinuxMint desktop up and running and have considered hosting it there, but since I occasionally boot into Windows for gaming, it wouldn't be up all the time. Kind of annoyed, but I'll figure something out.</p>\n<h2><em>Turning Point: The Bomb and the Cold War</em></h2>\n<p>My wife and I finished this 9-episode <a href=\"https://www.imdb.com/title/tt26227818/\">documentary</a> on <a href=\"https://www.netflix.com/title/81614129\">Netflix</a> and thought it was interesting and informative. I'd recommend it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-11T21:26:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/08/07/switching-to-obsidian/",
      "url": "https://kpwags.com/posts/2024/08/07/switching-to-obsidian/",
      "title": "Switching to Obsidian as My Primary Notes and Writing App",
      "content_html": "\n\t\t<p>For the last several months I’ve been going back and forth between iA Writer and Obsidian as my notes app on all my devices. Recently I started playing around more with Obsidian and think I’m going to jump in.</p>\n<h2>The Killer Feature for Me</h2>\n<p>I think the killer feature for me is the ability to create templates and be able to insert them at will. I have templates for my blog posts, notes, book notes, recipes and several other common notes I end up writing. The ability to launch the command menu, select insert template and pre-populate the common fields is time saving and quite helpful. I use front matter for notes to help with organization and it’s nice to just be able to just insert that as a template.</p>\n<h2>The Most Important Part</h2>\n<p>Finally, the most important thing is that like iA Writer, Obsidian just writes plain markdown files. This means that I can just get up and go at any point without any issue and move to another app. If I decide to go back to iA, it’s no big deal, just select all files and copy them back into iA’s directory.</p>\n<p>I’m not locked into an app which is what I didn’t want from the start.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-07T17:17:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/08/06/july-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/08/06/july-2024-check-in/",
      "title": "July 2024 Check-In",
      "content_html": "\n\t\t<p>I heard on a podcast the other day that you know you’re getting older when the months start to fly by. I kind of get that after realizing that it’s August already.</p>\n<h2>Spending Time on My Gaming Backlog</h2>\n<p>I’ve spent a fair amount of time playing video games. I was able to finish up the <em>Mass Effect Trilogy</em>. After many starts and stops over the years, I was able to finally go through and play the three games. Overall I enjoyed the series. I was a little saddened by the ending, but I also felt like it was fitting for how the story went. I did end up watching some YouTube videos of the different endings since so much of what happens is triggered by your actions across the various games.</p>\n<h2>Finishing Up My Media Repository</h2>\n<p>I was able to get pretty close to finishing up my media repository. I have the initial version ready and working. I need to figure out how to get it running on my NAS as I believe it is possible and would be the way to go. The storage and retrieval is good to go though.</p>\n<h2>Blog Redesign</h2>\n<p>I’ve been toying with the idea of giving my site a refresh. When I converted my site over to 11ty, I limited the design tweaks to make the switch as quick as possible. I‘m using the switch to my media repository as an excuse to update the look and feel of my site.</p>\n<h2>Fitness</h2>\n<p>Due to the multiple heat waves keeping temperatures in the mid to high 90s, my ability to run was limited. Instead I took the time to focus on my lifting routine. I was happily able to get through the latest 4-week cycle of my 5/3/1 program and nailing all my lifts to bump up my training maxes.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 25.61 miles ⬇️</li>\n<li><strong>Walking:</strong> 1.51 miles ⬆️</li>\n<li><strong>Biking:</strong> 0 miles ⬇️</li>\n<li><strong>Lifting:</strong> 263,336 lbs. ⬆️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/wayward-chuck-wendig/17746477?ean=9780593158791\">Wayward</a> by Chuck Wendig</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-blood-telegram-nixon-kissinger-and-a-forgotten-genocide-gary-j-bass/9789502?ean=9780307744623\">The Blood Telegram: Nixon, Kissinger, and a Forgotten Genocide</a> by Gary J. Bass</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/82/\">July 1 (#82)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/83/\">July 8 (#83)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/84/\">July 15 (#84)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/85/\">July 22 (#85)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/86/\">July 28 (#86)</a></li>\n</ul>\n</li>\n<li>Week Notes\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/07/07/week-notes/\">June 30 - July 6</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/07/14/week-notes/\">July 7 - 13</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/07/21/week-notes/\">July 14 - 20</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/07/28/week-notes/\">July 21 - 27</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/07/08/balancing-being-informed-and-my-mental-health/\">balancing being informed with my mental health</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Completed <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 3</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/games/ratchet-and-clank-rift-apart/\">Ratchet &amp; Clank: A Rift Apart</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt5296406/\">Designated Survivor</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt6548228/\">Castle Rock</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt1831804/\">The Stand</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt26227818/\">Turning Point: The Bomb and the Cold War</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://imdb.com/title/tt1615160\">The Foreigner</a></li>\n<li><a href=\"https://www.imdb.com/title/tt8110232/\">The Many Saints of Newark</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-06T16:06:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/gary-j-bass-the-blood-telegram/",
      "url": "https://kpwags.com/books/gary-j-bass-the-blood-telegram/",
      "title": "Book Notes for The Blood Telegram: Nixon, Kissinger, and a Forgotten Genocide",
      "content_html": "\n\t\t<p>I had known that Pakistan was divided into East and West Pakistan at one point in history, but didn’t really know how the region formed into what it is today.</p>\n<p>The book goes through what happened between Pakistan, India, and what is now Bangladesh. It goes through the atrocities committed by Pakistan against the Hindus and East Bengalis across East Pakistan, the unwillingness of the United States to condemn or even speak out against Pakistan, and India’s response to the situation being situated between the two halves of Pakistan.</p>\n<p>This book was suggested after Kissinger died earlier this year. It was recommended to give a view of Kissinger that showed who he was.</p>\n<blockquote>\n<p>Kissinger and his defenders often try to shift the blame to Nixon. But the record here proves that Kissinger was almost as culpable as the president. When dealing with the White House and State Department staff, Kissinger would entertain a variety of viewpoints, showing his trademark subtlety, although pressing an anti-Indian line. But when it was just him and Nixon alone, he cannily stoked the president's fury. All the sophistication vanished, replaced with a relentless drumbeat against India. Although Kissinger billed himself around Washington as a vital restraint on Nixon's dangerous moods, here it was Kissinger who spun out of control. In the most heated moments of the crisis, when Nixon lost his nerve for a superpower confrontation with the Soviet Union that at worst could have led toward nuclear war, Kissinger goaded him on.</p>\n</blockquote>\n<p>Throughout the book it was shown that Nixon and Kissinger had multiple opportunities to put some pressure on Pakistan to stop the slaughter, but deliberately chose not to. Add to that the continued use of U.S. weaponry and it doesn’t paint the United States in a good light…for good reason.</p>\n<p>It might not be a light read and it definitely covers a dark time of history, but that’s also why learning about history is important.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/87/",
      "url": "https://kpwags.com/reading-log/87/",
      "title": "Reading Log - August 5, 2024 (#87)",
      "content_html": "\n\t\t<p>This week it's more of <em>Why Your Team Sucks</em>, Logitech suggesting enshittification, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/06/uniting-web-native-apps-unknown-javascript-apis/\">Uniting Web And Native Apps With 4 Unknown JavaScript APIs</a> - <em>Juan Diego Rodríguez</em></li>\n<li><a href=\"https://blog.codeminer42.com/how-react-19-almost-made-the-internet-slower/\">How React 19 (Almost) Made the Internet Slower</a> - <em>Henrique Yuji</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/8/5/24213774/microsoft-security-performance-reviews-employees-top-priority\">Every Microsoft employee is now being judged on their security work</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2024/07/logitech-has-an-idea-for-a-forever-mouse-thatrequires-a-subscription/\">Logitech has an idea for a “forever mouse” that requires a subscription</a> - <em>Scharon Harding</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-new-york-giants\">Why Your Team Sucks 2024: New York Giants</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-los-angeles-chargers\">Why Your Team Sucks 2024: Los Angeles Chargers</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-arizona-cardinals\">Why Your Team Sucks 2024: Arizona Cardinals</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-new-england-patriots\">Why Your Team Sucks 2024: New England Patriots</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://timharford.com/2023/11/cautionary-tales-the-lethal-fallout-of-a-stolen-treasure/\">Cautionary Tales Podcast: Glowing Peril: the Magical Glitter That Poisoned a City</a></li>\n<li><a href=\"https://www.npr.org/2024/08/01/1197967951/paris-2024-olympics-hosting-costs\">The Indicator: Why the Olympics cost so much</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - Summer Clothes</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/efg3kI4xAXY\" title=\"The Wonder Years - Summer Clothes\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-05T20:55:16Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/11/",
      "url": "https://kpwags.com/week-note/11/",
      "title": "Week Notes for July 28 - August 3 (#11)",
      "content_html": "\n\t\t<p>My week notes for the week of July 28 through August 3.</p>\n<h2>Site Redesign Underway</h2>\n<p>I was able to finish up my media repository so I've taken advantage of changing the data for my media pages as an excuse to refresh the look of my site. It's still in the relative early phases, but I like the new look and feel. The other benefit is that now that I'm pulling the data locally prior to my 11ty build is that my build time has gone from 30-45 seconds to under 10 seconds. Turns out having to go to Notion's API takes time...who'd have thunk it.</p>\n<h2>Plenty of Hockey</h2>\n<p>My game count this past week was 4. One Sunday night, 2 Monday night and another Wednesday night. Almost played Friday too.</p>\n<p>The one thing about playing goalie is you're sometimes called by random teams to fill in when their normal goalie is out of town or unavailable. Sometimes last minute too. I know I can say &quot;no&quot;, and will, but I also know how much it sucks to play a game without a netminder so I try to help when I can.</p>\n<h2>Beat <em>Ratchet &amp; Clank: A Rift Apart</em></h2>\n<p>I ended up beating <em>Ratchet &amp; Clank: A Rift Apart</em> this week. It my first Ratchet &amp; Clank game I've ever played and I enjoyed it. It was fast paced and fun. Some of the repetitiveness got a tad annoying, but not enough to detract from it. It's light-hearted story was a nice change from the more serious stories of Horizon and Mass Effect.</p>\n<p>It was the 5th game I completed this year so far. I have a rather large backlog and I'm hoping to knock some more off this year.</p>\n<h2>Started <em>The Last of Us</em></h2>\n<p>After beating <em>Ratchet &amp; Clank: A Rift Apart</em>, I needed a new game. I was considering <em>God of War</em> or <em>Spiderman</em>, but at a friend's recommendation, I've given <em>The Last of Us</em> another go. I had tried it in 2020 but was turned off by some of the sneaking gameplay. Which is a shame because I know the story is supposed to be top notch.</p>\n<p>I'm giving it another go and I'm still kind of annoyed by the over-reliance of having to sneak around. I know that's a thing, and it's on me, but I've gotten farther this time around and am enjoying the characters and better handling the sneaking around.</p>\n<h2>Time with Family</h2>\n<p>Saturday I drove up to my parents' house to celebrate my nephew's birthday. It was a nice time and nice to see my parents and siblings.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-08-04T21:38:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/86/",
      "url": "https://kpwags.com/reading-log/86/",
      "title": "Reading Log - July 29, 2024 (#86)",
      "content_html": "\n\t\t<p>This week we have articles on CSS, Blazor basics, an inclusive union at Blizzard and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.telerik.com/blogs/blazor-basics-blazor-render-modes-net-8\">Blazor Basics: Blazor Render Modes in .NET 8</a> - <em>Claudio Bernasconi</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://lea.verou.me/blog/2024/contrast-color/\">On compliance vs readability: Generating text colors with CSS</a> - <em>Lea Verou</em></li>\n<li><a href=\"https://dev.to/karsten_biedermann/goodbye-sass-welcome-back-native-css-cf\">Goodbye SASS, welcome back native CSS</a> - <em>Karsten Biedermann</em></li>\n<li><a href=\"https://davidwalsh.name/css-attribute-case\">Case Insensitive CSS Attribute Selector</a> - <em>David Walsh</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://blog.scottlogic.com/2024/06/10/why-we-should-care-about-process.html\">Why we should care about process</a> - <em>Dave Ogle</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/06/28/yet-another-id-verification-service-breached-exposing-private-info-collected-on-behalf-of-uber-tiktok-more/\">Yet Another ID Verification Service Breached, Exposing Private Info Collected On Behalf Of Uber, TikTok &amp; More</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.spacebar.news/mozilla-firefox-privacy-preserving-attribution/\">What is Firefox supposed to do?</a> - <em>Corbin Davenport</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2024/organic-intelligence/\">Organic Intelligence</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://www.theverge.com/2024/7/24/24205449/apple-maps-web-beta\">Apple Maps launches on the web to take on Google</a> - <em>Emma Roth</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/07/nasas-flagship-mission-to-europa-has-a-problem-vulnerability-to-radiation/\">NASA’s flagship mission to Europa has a problem: Vulnerability to radiation</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://badastronomy.beehiiv.com/p/jwst-finds-first-old-cold-giant-exoplanet\">JWST finds its first old, cold giant exoplanet!</a> - <em>Phil Plait</em></li>\n<li><a href=\"https://badastronomy.beehiiv.com/p/close-personal-radar-images-two-potentially-hazardous-asteroids\">Up close and personal radar images of two potentially hazardous asteroids</a> - <em>Phil Plait</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/7/24/24205366/world-of-warcraft-developers-form-union-blizzard-entertainment\">World of Warcraft developers form Blizzard’s largest and most inclusive union</a> - <em>Ash Parrish</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://stackoverflow.blog/2024/07/15/the-ghost-jobs-haunting-your-career-search/\">The ghost jobs haunting your career search</a> - <em>Eira May</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/7/24/24205155/drones-olympics-soccer-canada-spying\">Olympic drone spying scandal lands Canadian coach a red card</a> - <em>Andrew Liszewski</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-washington-commanders\">Why Your Team Sucks 2024: Washington Commanders</a> - <em>Drew Magary</em></li>\n<li><a href=\"https://defector.com/why-your-team-sucks-2024-carolina-panthers\">Why Your Team Sucks 2024: Carolina Panthers</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1871\">.NET Rocks: Commercializing Open Source with Victoria Melnikova</a></li>\n<li><a href=\"https://darknetdiaries.com/episode/139/\">Darknet Diaries: D3f4ult</a></li>\n<li><a href=\"https://simplecast.econtalk.org/episodes/zach-weinersmith-on-space-settlement-and-a-city-on-mars\">EconTalk: Zach Weinersmith on Space Settlement and A City on Mars</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Aaron West and the Roaring Twenties - In Lieu Of Flowers</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/a3MBW4UQKXM\" title=\"Aaron West and the Roaring Twenties - In Lieu Of Flowers\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-29T16:36:11Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/10/",
      "url": "https://kpwags.com/week-note/10/",
      "title": "Week Notes for July 21 - 27 (#10)",
      "content_html": "\n\t\t<p>My week notes for the week of July 21 through July 27.</p>\n<h2>More Back-to-Back Hockey</h2>\n<p>I ended up playing 3 games in 2 days Sunday and Monday. Played Sunday night as a skater, then 2 games Monday as a goalie. Played kind of lousy Sunday and lost. Monday's games I thought I played well, but I got hammered with shots and unfortunately couldn't keep them all out. Oh well, I still mostly had fun and got some good exercise in, which is my primary reason for playing.</p>\n<h2>Adventures in Docker</h2>\n<p>I'm just about finished with my media repository and I'm hoping to run it locally on my Synology NAS. Docker seems to be the best way to handle go about doing that. The downside is that I have very little knowledge of Docker outside of running a few pre-built image/containers at work. I'm slowly changing that now to hopefully get this thing up and running. I'm still trying to figure out how to get docker running on my NAS.</p>\n<h2>Artemis Lego</h2>\n<p>I think there are a lot of issues with NASA's SLS and Artemis program, but damn it does look cool. I recently found that there's a Lego set for it, so of course I had to buy it and then build it.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/hfNts1Z3_8-1080.webp 1080w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/hfNts1Z3_8-1080.gif 1080w\" /><img alt=\"The completed Artemis Lego set sitting on my dining room table\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/hfNts1Z3_8-1080.jpeg\" width=\"1080\" height=\"1440\" /></picture></p>\n<h2>Re-Organizing My Notes</h2>\n<p>I spent a little bit of time this week re-organizing my Obsidian folder using the <a href=\"https://johnnydecimal.com/\">Johnny Decimal System</a>. I'm not entirely sure I'm doing it 100% correctly, but I do appreciate some of the principles.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-28T19:53:52Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/85/",
      "url": "https://kpwags.com/reading-log/85/",
      "title": "Reading Log - July 22, 2024 (#85)",
      "content_html": "\n\t\t<p>This week is podcast-heavy. Also, a deep look at JavaScript promises, web component libraries and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/behind-the-scenes-of-collection-expressions-part-1-introducing-collection-expressions-in-csharp12/\">Introducing collection expressions in C#12</a> - <em>Andrew Lock</em></li>\n<li><a href=\"https://khalidabuhakmeh.com/how-to-encrypt-aspnet-core-route-parameters\">How To Encrypt ASP.NET Core Route Parameters</a> - <em>Khalid Abuhakmeh</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/06/how-hack-google-lighthouse-scores-2024/\">How To Hack Your Google Lighthouse Scores In 2024</a> - <em>Salma Alam-Naylor</em></li>\n<li><a href=\"https://keithjgrant.com/posts/2024/06/assessing-web-component-libraries/\">Assessing Web Component Libraries</a> - <em>Keith J. Grant</em></li>\n<li><a href=\"https://ryantrimble.com/blog/design-system-tokens/\">Better Know a Design System - Design Tokens!</a> - <em>Ryan Trimble</em></li>\n<li><a href=\"https://www.joshwcomeau.com/javascript/promises/\">Promises From The Ground Up</a> - <em>Josh Comeau</em></li>\n<li><a href=\"https://gomakethings.com/what-is-the-grain-of-the-web/\">What is &quot;the grain of the web?&quot;</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/24201610/next-generation-nuclear-energy-reactors-security-weapons-proliferation-risk\">High hopes and security fears for next-gen nuclear reactors</a> - <em>Justine Calma</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.reuters.com/markets/deals/google-backed-software-developer-gitlab-explores-sale-sources-say-2024-07-17/\">Google-backed software developer GitLab explores sale, sources say</a> - <em>Milana Vinn &amp; Anirban Sen</em></li>\n<li><a href=\"https://www.marketplace.org/2024/07/16/inside-world-of-ups-overnight-shipping-hub/\">Inside the world of UPS’ overnight shipping hub</a> - <em>Kristin Schwab</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://www.economist.com/briefing/2024/07/11/small-investments-in-nutrition-could-make-the-world-brainier\">Small investments in nutrition could make the world brainier</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://dotnetcore.show/season-6/navigating-the-netverse-from-assembler-to-open-source-marvel-with-scott-hunter/\">The Modern .NET Show: Navigating the .NETverse: From Assembler to Open Source Marvel with Scott Hunter</a></li>\n<li><a href=\"https://www.npr.org/2024/07/19/1197961103/pantone-colors-lawrence-herbert-stuart-semple-standards\">Planet Money: The company that owns colors</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/carl-franklin.html\">Coffee &amp; Open Source Podcast: Carl Franklin</a></li>\n<li><a href=\"https://www.marketplace.org/shows/how-we-survive/stolen-river/\">How We Survive Podcast: Stolen River</a></li>\n<li><a href=\"https://www.techdirt.com/2024/07/17/techdirt-podcast-episode-398-link-taxes-wont-save-journalism/\">Techdirt Podcast: Link Taxes Won’t Save Journalism</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1868\">.NET Rocks Podcast: bUnit Update with Egil Hansen</a></li>\n<li><a href=\"https://www.marketplace.org/shows/how-we-survive/the-80-million-acre/\">How We Survive Podcast: The $80 Million Dollar Acre</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/sarah-guthals.html\">Coffee &amp; Open Source Podcast: Sarah Guthals</a></li>\n<li><a href=\"https://unhandledexceptionpodcast.com/posts/0057-jamietaylor/\">The Unhandled Exception Podcast: .NET and Podcasting - with Jamie Taylor</a></li>\n<li><a href=\"https://www.npr.org/2023/10/13/1197956085/fresh-air-draft-10-13-2023\">NPR’s Fresh Air: Actor Patrick Stewart</a></li>\n<li><a href=\"https://timharford.com/2023/10/cautionary-tales-double-header-a-monkey-for-mayor-a-screw-loose-at-17000-feet/\">Cautionary Tales: A Monkey For Mayor / A Screw Loose At 17,000 Feet</a></li>\n<li><a href=\"https://shoptalkshow.com/585/\">Shop Talk Show: Blog Redesign, Sounds on a Website, Accessibility Tests, and Safari 17</a></li>\n<li><a href=\"http://www.wtfpod.com/podcast/episode-1474-levar-burton\">WTF with Marc Maron: LeVar Burton</a></li>\n<li><a href=\"https://longform.org/posts/longform-podcast-551-kashmir-hill\">Longform Podcast: Kashmir Hill</a></li>\n<li><a href=\"https://www.techdirt.com/2024/07/09/techdirt-podcast-episode-397-the-people-who-turn-lies-into-reality/\">Techdirt Podcast: The People Who Turn Lies Into Reality</a></li>\n<li><a href=\"https://www.npr.org/2024/07/09/1197967537/military-brats-financial-earnings-social-mobility\">The Indicator: What military brats tell us about social mobility</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Nothington - Cobblestones</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/reKgUgJJBX8\" title=\"Nothington - Cobblestones\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-22T14:11:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/9/",
      "url": "https://kpwags.com/week-note/9/",
      "title": "Week Notes for July 14 - 20 (#9)",
      "content_html": "\n\t\t<p>My week notes for the week of July 14 through July 20.</p>\n<h2>Media Repository Work</h2>\n<p>I spent a lot of evenings this week working hard on my media repository. I'm just about done with it. I got a lot of the data loaded into it as well. The next step will be one of the more tedious parts. I'm going to have to go through and add a bunch of the data to the items that wasn't stored in Notion. I've developed some ideas for improvements for my site that requires data that wasn't stored in Notion. I've built the functionality to store it in my media repository, but now I need to add it.</p>\n<h2>Running Again</h2>\n<p>After 2 weeks of temperatures in the 90s, they've dropped to the low 80s and I've taken the brief respite to go on some runs. It's still hot which might be contributing to my inability to keep my heart rate down, but I'm still happy to be getting some cardio in.</p>\n<h2>Ratchet &amp; Clank</h2>\n<p>I've been playing through <em>Ratchet &amp; Clank: A Rift Apart</em> and have been enjoying it. It's my first foray into the series and the good words I've heard about it so far have been true. It's a fun game and so far I'd recommend it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-21T18:12:53Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/84/",
      "url": "https://kpwags.com/reading-log/84/",
      "title": "Reading Log - July 15, 2024 (#84)",
      "content_html": "\n\t\t<p>This week I read about the CSS cap unit, dependency risks, and an honest review of Tesla's Cybertruck.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://ishadeed.com/article/css-cap-unit/\">CSS Cap Unit</a> - <em>Ahmad Shadeed</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/every-dependency-is-a-potential-vulnerability/\">Every dependency is a potential vulnerability</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://thehistoryoftheweb.com/beware-the-cloud-of-hype/\">Beware the cloud of hype</a> - <em>The History of the Web</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/07/08/digital-price-tags-dynamic-pricing-in-person-shopping/\">Dynamic pricing tech may brighten retail bottom lines and put consumers in the dark</a> - <em>Kristin Schwab &amp; Sofia Terenzio</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/15330492-a-lack-of-under-standing\">Ctrl-Alt-Speech: A Lack of (Under)Standing</a></li>\n<li><a href=\"https://www.npr.org/2024/07/08/1197967531/gamestop-roaring-kitty-memestocks-wall-street-stock-market\">The Indicator: The young trolls of Wall Street are growing up</a></li>\n<li><a href=\"https://www.npr.org/2024/07/03/1197967395/game-theory-nuclear-war-putin\">The Indicator: The game theory that led to nuclear standoffs</a></li>\n<li><a href=\"https://www.npr.org/2024/07/01/1197967379/obgyn-students-leaving-states-strict-abortion-bans\">The Indicator: How the end of Roe is reshaping the medical workforce</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1864\">.NET Rocks: Data Science and UX with Grishma Jena</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.infinitescroll.us/p/they-will-never-think-youre-good\">They will never think you're good enough</a> - <em>Jeremiah Johnson</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.sfgate.com/tech/article/drew-magary-cybertruck-review-sf-19561381.php\">I drove a Cybertruck around SF because I am a smart, cool alpha male</a> - <em>Drew Magary</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Aaron West and the Roaring Twenties - Paying Bills at the End of the World</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bVcc367H2Zw\" title=\"Aaron West and the Roaring Twenties - Paying Bills at the End of the World\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-15T15:30:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/every-dependency-is-a-potential-vulnerability/",
      "url": "https://kpwags.com/notes/every-dependency-is-a-potential-vulnerability/",
      "title": "Every Dependency is a Potential Vulnerability",
      "content_html": "\n\t\t<blockquote>\n<p>Every piece of code is a potential vulnerability, really. Not just dependencies.</p>\n<p>But code that you don’t own, that’s outside your control, is particularly vulnerable.</p>\n<p>One of the big myths of using frameworks and libraries and cloud services is that you no longer have the “own” that piece of the code. You’re benefiting from someone else having already solved it.</p>\n</blockquote>\n<p>We deal with this a lot at my job and I think it's important to take note of. We thankfully have dependency checkers to catch known vulnerabilities in the packages we reference so issues are hopefully caught and identified sooner rather than later. But the fact remains that we can be at the mercy of the frameworks and libraries to fix them.</p>\n<p>Third party developers could abandon their libraries or they only fix it in a version that has breaking changes compared with the version you're using. Either way, it means that you're now in a bind with your website or app.</p>\n<p>This is not to say don't use third party libraries or frameworks. Most developers are fantastic and are legitimately doing their best to write good software. But it should cause you to do at least two things. First, be mindful of what dependencies you use. Second, do what you can to make sure you, and/or your company support the open source developers who make the tools you use.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-14T17:30:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/8/",
      "url": "https://kpwags.com/week-note/8/",
      "title": "Week Notes for July 7 - 13 (#8)",
      "content_html": "\n\t\t<p>My week notes for the week of July 7 through July 13.</p>\n<h2>Continuing Back-To-Back Hockey Games</h2>\n<p>In the one hockey league I play in, I play goalie. For anyone not familiar with hockey, it is a specialized position. The gear tends to be more expensive than the gear you wear when you’re skating out as a forward or defenseman. Because of this, the position tends to be in relatively high demand due to the lower supply of available goalies. Well, due to some injuries and vacations, the last three weeks have had me playing back-to-back hockey games. Once for my team, and then right after for another team, filling in for their net minder. I don’t mind because it’s fun and good exercise, but man does it feel good to sit down and take off my gear after that second game.</p>\n<h2>Completed Mass Effect 3</h2>\n<p>I completed <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 3</a> on Thursday. The ending was fitting, but I'm kind of sad by it. I have to admit that I did look afterwards at the different possibilities and I was pretty far off from the ending I would have preferred. It is pretty cool though how the decisions you made in the prior game can come back to either help or hurt you. Either way, it was an enjoyable trilogy.</p>\n<p>It was the fourth game I completed this year. <a href=\"https://www.playstation.com/en-us/games/ratchet-and-clank-rift-apart/\">Ratchet &amp; Clank: A Rift Apart</a> is up next.</p>\n<h2>Battlefield Tattoo Expo</h2>\n<p>On Saturday I drove out to Gettysburg for the <a href=\"https://battlefieldtattooexpo.com/\">Battlefield Tattoo Expo</a>. <a href=\"https://www.facebook.com/IntimateBodyArtStudios/\">Ken Bryan</a>, the artist who did my <a href=\"https://kpwags.com/posts/2024/04/29/my-space-sleeve-is-complete/\">sleeve</a> wanted to enter me in the tattoo contest. Sadly I didn't win anything, but there were some fantastic pieces so I still don't really count it as a loss per say. Either way, it was a fun experience to walk around and see all the various artists and tattoos.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-14T17:28:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/83/",
      "url": "https://kpwags.com/reading-log/83/",
      "title": "Reading Log - July 8, 2024 (#83)",
      "content_html": "\n\t\t<p>Another light week. This week we look at some news from Mastodon as well as an in-depth look at the Titan submersible disaster.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/a-primer-on-javascript-proxies/\">A primer on JavaScript Proxies</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://www.freecodecamp.org/news/web-sensitivity-how-to-design-accessible-animations/\">What is Motion Sensitivity? How to Design Accessible Web Animations</a> - <em>Elizabeth Meshioye</em></li>\n<li><a href=\"https://www.baldurbjarnason.com/2024/the-deskilling-of-web-dev-is-harming-us-all/\">The deskilling of web dev is harming the product but, more importantly, it’s damaging our health – this is why burnout happens</a> - <em>Baldur Bjarnason</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/\">Highlighting journalism on Mastodon</a> - <em>Eugen Rochko</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/titan-submersible-disaster-inside-story-oceangate-files/\">The Titan Submersible Disaster Shocked the World. The Exclusive Inside Story Is More Disturbing Than Anyone Imagined</a> - <em>Mark Harris</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Mercy Union - Basements</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/hOpCCDEPVzg\" title=\"Mercy Union - Basements\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-08T21:17:27Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/7/",
      "url": "https://kpwags.com/week-note/7/",
      "title": "Week Notes for June 30 - July 6 (#7)",
      "content_html": "\n\t\t<p>My week notes for the week of June 30 through July 6.</p>\n<h2>Short Work Week</h2>\n<p>Thanks to the Fourth of July holiday, I only had a 3-day work week. It was a nice change of pace to have a 4-day weekend. Work wasn’t too bad. I ended up finishing the initial version of the project I was using Blazor on. For the first time in a long while, I jumped back into React and TypeScript.</p>\n<h2>Mass Effect 3</h2>\n<p>This year I’ve been playing through the original Mass Effect trilogy. I plowed through Mass Effect pretty quickly. Mass Effect 2 and 3 have taken more time due to what feels like a lot more content. Despite its shaky start, Mass Effect 2 was a lot of fun and I really enjoyed it. Mass Effect 3 has been good so far as well. It’s interesting how they’ve built so much into the game and how decisions you make in all the games can come back and affect what options you have as you progress.</p>\n<h2>Heat Wave Hell</h2>\n<p>The last several days have all been in the 90s with high humidity. Needless to say, it hasn’t felt pleasant. It has put a damper on my exercise, limiting me to strength training. I wanted to go for some runs, but I’d be more likely to have health issues trying to run in this. I’d say maybe it’ll cool down soon, but it’s July...</p>\n<h2>Media Repository</h2>\n<p>I’ve been plugging away on the media repository. I was able to finish up the TV section. The funny part is that I’ve been improving things as I move along and will have to go back and apply the improvements to the other sections I’ve already finished. Such is the way I guess.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-07T20:41:39Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/07/03/june-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/07/03/june-2024-check-in/",
      "title": "June 2024 Check-In",
      "content_html": "\n\t\t<p>I can’t believe the year is already half over. But whether I believe it is or not makes no difference. The highlight of June was my birthday trip to New York City.</p>\n<h2>New York City</h2>\n<p>For my birthday, my wife and I continued the tradition of spending it in New York City. We changed it up a little bit by staying in a new hotel. We stayed at <a href=\"https://www.lumahotels.com/times-square\">LUMA</a> on 41st Street. The hotel was nice. We chose it because rooms come with a little sitting area which was just nice when we needed to rest a bit between activities. The primary reason for the change though was to put us closer to Bryant Park. We spent most mornings getting up, grabbing coffee and a pastry and sitting in the park reading or writing. It was just a nice way to charge up and start the day. Even when the heat wave hit on our last 2-3 days, Bryant Park wasn’t too bad early in the morning in the shade.</p>\n<p>The rest of the trip was fun. We seldom go to NYC with any real plan. Most of the time it’s just walk around and see what we find. This trip, the highlights ended up being:</p>\n<ul>\n<li>Seeing <em>Book of Mormon</em>, which was raunchy and funny.</li>\n<li>Visited the <a href=\"https://www.starbucksreserve.com/locations/new-york-roastery\">Starbuck Roastery</a> in Chelsea. Was kind of cool to see some of their roasting process.</li>\n<li>Checked out a number of breweries in both Long Island City and Manhattan\n<ul>\n<li><a href=\"https://www.fifthhammerbrewing.com/\">Fifth Hammer</a></li>\n<li><a href=\"https://www.focalpoint.beer/\">Focal Point</a></li>\n<li><a href=\"https://www.taleabeer.com/\">Talea</a></li>\n<li><a href=\"https://otherhalfbrewing.com/location/rockefeller-center/\">Other Half</a></li>\n</ul>\n</li>\n</ul>\n<h2>Fitness</h2>\n<p>I’ve made a concerted effort to eat healthier this month and the scale is starting to show it. I’ve put the effort to building in some runs, lifting more, and even found a nice day weather-wise to go for a bike ride.</p>\n<p>The heat wave towards the end of the month got me lifting more, which isn’t a bad thing. Going outside to run would just make myself miserable. I’m hoping to start dragging myself out of bed earlier to maybe get some morning pre-work runs in since it’s only going to get hotter as summer really starts to sink in over the next 2 months.</p>\n<h2>Media Repository</h2>\n<p>I’ve been hard at work on building my media repository in Blazor. I’ve gotten the management movies, video games, links, &amp; podcasts all built. Still need to find a good way to import the data from Notion, but I can figure that out later. I still have some open questions on how I want to handle the completed project, but I can cross that bridge when I get there.</p>\n<p>I do plan on sharing the code once complete. I don’t see myself customizing this to make it usable for others as I’m building it only for myself, but if the code can help someone build a solution for themselves faster, they would be welcome to reference it or fork it.</p>\n<h2>Site Updates</h2>\n<p>I’ve done some small tweaks to my site. I’ve added pinned posts, a <a href=\"https://kpwags.com/wips/\">works in progress page</a>, added music &amp; movies to my <a href=\"https://kpwags.com/now/\">now page</a>, and added a WebC component for social media embeds.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 31.96 miles ⬇️</li>\n<li><strong>Walking:</strong> 0 miles ⬇️</li>\n<li><strong>Biking:</strong> 27.38 miles ⬆️</li>\n<li><strong>Lifting:</strong> 186,761 lbs. ⬆️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/state-of-fear-michael-crichton/6431901?ean=9780061782664\">State of Fear</a> by Michael Crichton</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/holly-stephen-king/19655404?ean=9781668016138\">Holly</a> by Stephen King</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/wanderers-chuck-wendig/11314587?ean=9780399182129\">Wanderers</a> by Chuck Wendig</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/red-team-blues-cory-doctorow/18693516?ean=9781250865847\">Red Team Blues</a> by Cory Doctorow</li>\n<li>Finished <a href=\"https://bookshop.org/book/9781250865939\">Lost Cause</a> by Cory Doctorow</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-bezzle-a-martin-hench-novel-cory-doctorow/20001531\">The Bezzle</a> by Cory Doctorow</li>\n<li>Started <a href=\"https://bookshop.org/p/books/wayward-chuck-wendig/17746477?ean=9780593158791\">Wayward</a> by Chuck Wendig</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/79/\">June 3 (#79)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/80/\">June 10 (#80)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/81/\">June 24 (#81)</a></li>\n</ul>\n</li>\n<li>Week Notes\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/06/02/week-notes/\">May 26 - June 1</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/06/08/week-notes/\">June 2 - 8</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/06/23/week-notes/\">June 9 - 22</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/06/30/week-notes/\">June 23 - 30</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/06/06/personal-sites-connections-and-11ty/\">personal sites, connections &amp; 11ty</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/06/11/6-months-with-11ty/\">my experience with 11ty, 6 months in</a></li>\n<li>Wrote about adding some <a href=\"https://kpwags.com/posts/2024/06/20/thinking-accessibility-and-css-for-my-site/\">CSS to help with accessibility</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 3</a></li>\n</ul>\n<p><strong>📺 TV</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt5296406/\">Designated Survivor</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt0105112/\">Patriot Games</a></li>\n<li><a href=\"https://www.imdb.com/title/tt26047818/\">Anyone But You</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-02T23:37:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/82/",
      "url": "https://kpwags.com/reading-log/82/",
      "title": "Reading Log - July 1, 2024 (#82)",
      "content_html": "\n\t\t<p>A little light this week. Some caveats to C# primary constructors and a takedown of NASA's <em>Artemis</em>.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/thoughts-about-primary-constructors-3-pros-and-5-cons/\">Thoughts about primary constructors: 3 pros and 5 cons</a> - <em>Andrew Lock</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.joanwestenberg.com/rss-the-forgotten-protocol-that-still-matters%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B\">RSS: The forgotten protocol that still matters</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://idlewords.com/2024/5/the_lunacy_of_artemis.htm\">The Lunacy of Artemis</a> - <em>Idle Words</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/angus-deaton-on-life-in-america\">The New Bazaar: Angus Deaton on life in America</a></li>\n<li><a href=\"https://dotnetcore.show/season-6/building-cross-platform-apps-with-net-maui-a-developers-dream-come-true-with-matt-goldman/\">The Modern .NET Show: Building Cross-Platform Apps with .NET MAUI: A Developer's Dream Come True with Matt Goldman</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Deaf Havana - Everybody's Dancing and I Want To Die</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_P1ssYOVj2A\" title=\"Deaf Havana - Everybody's Dancing and I Want To Die\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-07-01T19:25:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/6/",
      "url": "https://kpwags.com/week-note/6/",
      "title": "Week Notes for June 23 - 29 (#6)",
      "content_html": "\n\t\t<p>My week notes for the week of June 23 through June 29.</p>\n<h2>Back to the Grind</h2>\n<p>After being on vacation the week before, I had to get back used to early wake ups again. Thankfully it was generally a calm week which gave me a good chance to get back into the swing of things.</p>\n<h2>Hockey League Starting Back Up</h2>\n<p>The Instructional League (I-League) I play goalie in started up while I was in New York City. This was the first week I played which means I’m now going to be back to playing 2, occasionally 3 days a week. It’s good exercise and fun. When I have to do the back-to-back games though, I definitely feel my age.</p>\n<h2>Wait Wait...Don’t Tell Me!</h2>\n<p>On Thursday, we went to a live taping of <a href=\"https://www.npr.org/podcasts/344098539/wait-wait-don-t-tell-me\">Wait Wait...Don’t Tell Me</a>. For anyone not familiar, it is a weekly news quiz from NPR with plenty of jokes and laughs. It was our 5th time seeing the show live and it continues to be a good time. The podcast is great, but it’s interesting how much more there is in the show when it’s recorded live.</p>\n<h2>House Work Never Ends</h2>\n<p>I started working of freshening up the trim in our house. It really just needs some sanding and a fresh coat of paint. Part of the thinking is that at some point my wife and I will adopt new pets. It will be far easier to paint now than wait until we have pets and then find some way to not have the wet paint ruined and many dog and cat baths.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-30T18:38:10Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/81/",
      "url": "https://kpwags.com/reading-log/81/",
      "title": "Reading Log - June 24, 2024 (#81)",
      "content_html": "\n\t\t<p>In this double issue, we have tips for better CSS, the passing of a baseball icon, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://bartwullems.blogspot.com/2024/05/xunitimprove-type-safety.html\">XUnit–Improve type safety</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://www.pietschsoft.com/post/2024/05/03/csharp-iterate-over-enum\">C#: How to Enumerate over Enum values and names</a> - <em>Chris Pietschmann</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/05/beyond-css-media-queries/\">Beyond CSS Media Queries</a> - <em>Juan Diego Rodriguez</em></li>\n<li><a href=\"https://adactio.com/journal/21128\">Baseline progressive enhancement</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://andrewwalpole.com/blog/opinions-for-writing-good-css/\">Opinions for Writing Good CSS</a> - <em>Andrew Walpole</em></li>\n<li><a href=\"https://www.infoq.com/articles/no-need-css-framework/\">You Don’t Need a CSS Framework</a> - <em>Tyson Gern</em></li>\n<li><a href=\"https://cruncher.ch/blog/printing-music-with-css-grid/\">Printing music with CSS Grid</a> - <em>Stephen Band</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.donnfelker.com/done-is-better-than-perfect/\">Done is Better Than Perfect</a> - <em>Donn Felker</em></li>\n<li><a href=\"https://www.404media.co/xz-backdoor-bullying-in-open-source-software-is-a-massive-security-vulnerability/\">Bullying in Open Source Software Is a Massive Security Vulnerability</a> - <em>Jason Koebler</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2024/05/the-biggest-effect-on-code-quality.html\">The biggest effect on code quality</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/errors-arent-all-bad/\">Errors Aren’t All Bad</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://remotesynthesis.com/blog/navigaitng-frontend-buzzwords/\">Navigating the Buzzwords of Frontend Development</a> - <em>Brian Rinaldi</em></li>\n<li><a href=\"https://www.infoworld.com/article/3715342/why-we-suck-at-estimating-software-projects.html\">Why we suck at estimating software projects</a> - <em>Nick Hodges</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/willie-mays-was-baseball\">Willie Mays Was Baseball</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/06/18/1197965254/stock-trading-congress-etfs-unusual-whales\">The Indicator: Invest like a Congress member</a></li>\n<li><a href=\"https://www.npr.org/2024/06/12/1197959267/graphite-batteries-tariffs-china\">Planet Money: Bringing a tariff to a graphite fight</a></li>\n<li><a href=\"https://www.techdirt.com/2024/06/11/techdirt-podcast-episode-394-a-primer-on-child-online-safety-legislation/\">Techdirt Podcast: A Primer On Child Online Safety Legislation</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Buffalo Buffalo</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/mcYWbM5SvQ0\" title=\"Spanish Love Songs - Buffalo Buffalo\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-24T13:42:04Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/5/",
      "url": "https://kpwags.com/week-note/5/",
      "title": "Week Notes for June 9 - 22 (#5)",
      "content_html": "\n\t\t<p>Week notes for June 9 through June 22. Double edition due to my trip to New York City.</p>\n<h2>Continued Work on Media Repository</h2>\n<p>I’ve continued work on my media repository. Links and video games are in working order. Currently working on podcasts. For a simpler project like this, I love how .NET, Blazor, and Entity Framework all work so well together.</p>\n<h2>New York City</h2>\n<p>Wife and I took a trip to New York City to celebrate my birthday. We stayed at the LUMA hotel on 41st street between 6th and Broadway. It was the first time we ever stayed there and chose it since it was right next to Bryant Park. It was nice to grab some coffee and a pastry every morning and sit in the park and read or write.</p>\n<p>A lot of the time was spent wandering around the city. We did see <em>Book of Mormon</em> one day. We checked out one of Starbucks’ Reserve Roasteries in Chelsea, a bunch of breweries in both Long Island City and Manhattan. Overall it was a good vacation and a good trip.</p>\n<h2>Small Utility Created</h2>\n<p>I ended up building a little .NET console app to create the markdown files with templates for the front matter 11ty needs to build my site. I had been using snippets in VS Code and Sublime, but I decided to get a little fancier. I forget where I got the idea, but it makes things a little simpler.</p>\n<h2>Works In Progress Page</h2>\n<p>I added a <a href=\"https://kpwags.com/wips/\">works in progress page</a> to talk about some of the projects I have cooking as well as others that are inactive. I think I got the idea from <a href=\"https://rknight.me/\">Robb Knight</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-23T16:43:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/06/20/thinking-accessibility-and-css-for-my-site/",
      "url": "https://kpwags.com/posts/2024/06/20/thinking-accessibility-and-css-for-my-site/",
      "title": "Thinking Accessibility and CSS for My Site",
      "content_html": "\n\t\t<p>One of the simplest things developers and people can do with regards to accessibility is to make sure that every image has corresponding alt text to go along with it to help describe the image to those who are visibly-impaired.</p>\n<p>I do my best to make sure that I include alt text on all the images on my site as well as all the images I post on Mastodon and Bluesky. Bluesky even has a handy feature blocking you from posting until you add alt text. Some Mastodon clients might as well.</p>\n<p>I mention this because I’ve added a little snippet I found on a <a href=\"https://andrewwalpole.com/blog/opinions-for-writing-good-css/\">post</a> by Andrew Walpole that was fantastic in its content, but also included a CSS snippet that can help alert me when I miss describing an image.</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">img:not([alt]),\nsvg:not([aria-label])</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">border</span><span class=\"token punctuation\">:</span> 5px solid red<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>What this does is add a thick red border to any image that doesn’t have alt text, or an SVG that doesn’t have a description in the <code>aria-label</code> attribute. The thought here is that when I’m checking new posts, it will stick out like a sore thumb and remind me that I need to add a description.</p>\n<p>So if you see an image with an ugly red border on my site, let me know so I can correct it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/indieweb-principles/",
      "url": "https://kpwags.com/notes/indieweb-principles/",
      "title": "IndieWeb Principles",
      "content_html": "\n\t\t<p>I love this. Ever since the death of X/Twitter I’ve been much more focused on making sure that I control the data and content I post that means the most to me.</p>\n<blockquote>\n<p><strong>Own your data.</strong> Your content, your metadata, your identity.</p>\n</blockquote>\n<blockquote>\n<p><strong>Use and publish visible data.</strong> For humans first, machines second.</p>\n</blockquote>\n<blockquote>\n<p><strong>Above all, have fun.</strong> When the web took off in the 90’s people began designing personal sites with tools such as GeoCities. These spaces had Java applets, garish green background and seventeen animated GIFs. It may have been ugly and badly coded but it was fun. Keep the web weird and interesting.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/emojis-as-a-common-language/",
      "url": "https://kpwags.com/notes/emojis-as-a-common-language/",
      "title": "Emojis as a Common Language",
      "content_html": "\n\t\t<blockquote>\n<p>It’s like and, but we have developed a whole language around what these symbols mean, right? Over the course of decades. And so, if we don’t use them anymore, and everything is AI generated. If we AI generate emojis, you know, we’re not going to have a common language around them anymore. So, I wonder how many people just, kind of, default to the old emojis will just still just because they maybe understand what they mean.</p>\n</blockquote>\n<p>Kimberly Adams isn’t wrong. People have taken emojis and integrated them into language. In some cases the emoji doesn’t equate to its actual meaning. It’s going to be interesting if that starts to fade with some of this or if it will stick around.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/06/11/6-months-with-11ty/",
      "url": "https://kpwags.com/posts/2024/06/11/6-months-with-11ty/",
      "title": "6 Months with 11ty",
      "content_html": "\n\t\t<p>At the end of 2023, I switched my site from being built with <a href=\"https://nextjs.org/\">Next.js</a> to <a href=\"https://www.11ty.dev/\">11ty</a>. 6 months on, I’m still quite happy with my decision.</p>\n<h2>Why I Made the Switch</h2>\n<p>As a <a href=\"https://kpwags.com/posts/2023/12/14/switching-to-eleventy/\">quick refresher</a>, my primary reason for switching was seeing the JS footprint of Next.js growing larger and larger. I’m not some anti-JavaScript person, but most of what I have on my site is static content. I don’t need much JavaScript so the extra JS being delivered through Next.js was just overkill. I was debating between <a href=\"https://astro.build/\">Astro</a> and 11ty. After playing with both, 11ty won out.</p>\n<h2>My Thoughts 6 Months In</h2>\n<p>The short answer to all of this is that I’m very happy with my decision to switch. So much so that I’m building sites for both my wife and my photography in 11ty. If you’re looking to create yourself a personal site, I cannot recommend 11ty enough.</p>\n<p>The longer answer is that I’m incredibly happy with 11ty.</p>\n<h3>Ease of Development &amp; The Community</h3>\n<p>I’ve been consistently adding to my site over the years. I’ve added additional pages, listed out the media I’m consuming and more. While not all of it is new to my 11ty build, I’m quite happy with how easy it is to make tweaks and add to my site. The documentation is fantastic, the community is super helpful, and Zach Leatherman, 11ty’s creator is always communicative and willing to offer help. I don’t recall ever having this kind of support from the community the same way anywhere else.</p>\n<h3>Ease of Posting</h3>\n<p>The one thing I really liked when I switched over to static site generators was the lack of a database. You wanted a new blog post, just add a file to a directory. I’ve lost so many posts to lost databases over the various redesigns prior. It’s so much nicer when you can just commit the file to a Git repo and/or back it up as a simple markdown file. I was able to do it with Jekyll, Next.js and now 11ty and it makes it simple to add new content. I use iA Writer for my writing and I can just copy the markdown over. It’s not really any easier to add  new posts than it was on Jekyll or Next.js, but it continues to be easy which is the important part.</p>\n<h3>Fantastic Performance</h3>\n<p>One of the reasons I went with 11ty was the lack of JavaScript being sent to the client. Compared to my Next.js setup, I felt this was a good thing. I have minimal JS on my site. Basically all I use JavaScript for is theming and for viewing my thoughts on the different media like books and movies. Beyond that, I don’t really have a need for it so I have no reason to send any more down to the client.</p>\n<p>The end result is that 11ty generates a site that is performant, loads quickly, and is a pleasure to develop and work with.</p>\n<h2>Support 11ty</h2>\n<p>Zach Leatherman is working to try to make <a href=\"https://www.11ty.dev/blog/sustainability-fundraising/\">11ty independent and sustainable</a>. If you are an 11ty user or decide to use it, consider supporting its independence.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/80/",
      "url": "https://kpwags.com/reading-log/80/",
      "title": "Reading Log - June 10, 2024 (#80)",
      "content_html": "\n\t\t<p>Lots to look at this week. Some of the new CSS and HTML functionality, design system, trouble for Hubble, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://frontendmasters.com/blog/using-the-popover-api-for-html-tooltips/\">Using the Popover API for HTML Tooltips</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://mxb.dev/blog/old-dogs-new-css-tricks/\">Old Dogs, new CSS Tricks</a> - <em>Max Böck</em></li>\n<li><a href=\"https://garrettdimon.com/journal/posts/fine-tuning-text-inputs\">Fine-tuning Text Inputs</a> - <em>Garrett Dimon</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/just-one-line/\">“Just” One Line</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.stefanjudis.com/blog/vs-code-minimap-section-headers/\">VS Code's new minimap section headers</a> - <em>Stefan Judis</em></li>\n</ul>\n<hr />\n<h2>Design</h2>\n<ul>\n<li><a href=\"https://bradfrost.com/blog/post/dont-put-crap-in-the-design-system/\">Don’t Put Crap in the Design System</a> - <em>Brad Frost</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/interdisciplinary-website-maker/\">Interdisciplinary Website Maker</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://bradfrost.com/blog/post/the-art-of-design-system-recipes/\">The art of design system recipes</a> - <em>Brad Frost</em></li>\n<li><a href=\"https://www.lukew.com/ff/entry.asp?2066\">Different Gets Ignored</a> - <em>Luke Wroblewski</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/06/down-to-just-two-gyroscopes-hubbles-science-operations-will-continue/\">The Hubble Space Telescope has lost a majority of its gyroscopes</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://www.theverge.com/2024/6/4/24171169/china-lunar-sample-far-side-moon-launch\">China will be the first to retrieve soil samples from the far side of the Moon</a> - <em>Justine Calma</em></li>\n</ul>\n<hr />\n<h2>Climate Change</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/6/4/24170729/direct-air-capture-carbon-dioxide-removal-climate-tech-climeworks-generation-3\">It’s getting cheaper to filter carbon dioxide out of the air</a> - <em>Justine Calma</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/24174839/perfect-dark-reboot-xbox-microsoft\">Here’s our first look at the new Perfect Dark game</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://www.techdirt.com/2024/06/03/you-dont-own-the-video-games-youve-bought-the-death-edition/\">You Don’t Own The Video Games You’ve Bought: The Death Edition</a> - <em>Timothy Geigner</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/tech-policy/2024/06/company-heads-hoped-return-to-office-mandates-would-make-people-quit-survey-says/\">Some company heads hoped return-to-office mandates would make people quit, survey says</a> - <em>Scharon Harding</em></li>\n<li><a href=\"https://www.marketplace.org/2024/06/07/decaf-coffee-award-growing-market/\">What’s all the buzz about decaf coffee?</a> - <em>Kai Ryssdal &amp; Sarah Leeson</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/how-the-fix-gets-in-jontay-porter\">How The Fix Gets In</a> - <em>Ray Ratto</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.coffeeandopensource.com/guest/phil-haack.html\">Coffee &amp; Open Source: Phil Haack</a></li>\n<li><a href=\"https://shoptalkshow.com/576/\">Shop Talk Show: Blocks, Components, Linting Images, Engines, and “Web Integrity”</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1856\">.NET Rocks: Modular Monoliths with Layla Porter</a></li>\n<li><a href=\"https://www.techdirt.com/2024/06/04/techdirt-podcast-episode-393-the-importance-of-section-230-for-online-communities/\">Techdirt Podcast: The Importance Of Section 230 For Online Communities</a></li>\n<li><a href=\"https://changelog.com/jsparty/325\">JS Party: 11ty goes fully independent</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/24168842/star-trek-discovery-finale-interview-showrunner-end\">Star Trek: Discovery tore itself apart for the good of Star Trek’s future</a> - <em>Dylan Roth</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dan Campbell - Kings of Halloween</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ooGMinGRrM8\" title=\"Dan Campbell - Kings of Halloween\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-10T22:05:20Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/the-analog-web/",
      "url": "https://kpwags.com/notes/the-analog-web/",
      "title": "The Analog Web",
      "content_html": "\n\t\t<blockquote>\n<p>People create these sites simply so that they exist. They are not fed to an algorithm, or informed by any trends. It is quieter and slower, meant to tether us to a more mechanical framework of the web.</p>\n<p><em>This is the analog web.</em></p>\n</blockquote>\n<p>I’ve mentioned it many times, but the personal site renaissance is one of my favorite things. I know they’ve existed looooong before Twitter. I go through my RSS feeds and it just feels <em>nicer</em>, <em>calmer</em>. I hope I can help contribute to it.</p>\n<p><em>Edit 6/9/2024: Fixed a typo. Thanks Andrew!</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/4/",
      "url": "https://kpwags.com/week-note/4/",
      "title": "Week Notes for June 2 - 8 (#4)",
      "content_html": "\n\t\t<p>Week notes for June 2 through June 8.</p>\n<h2>Really Bumping Up My Running Distance</h2>\n<p>Since I discovered that I felt better keeping my heart rate in zone 2, I’ve been able to run farther. I’ve added more 4 mile runs, and have even crossed the 6 mile mark.</p>\n<h2>Re-Organizing Content for Site</h2>\n<p>When I first built my site in 11ty, I didn’t realize how easy it was to define permalinks. Because of this, I built out paths manually. I’ve spent part of this week correcting that and organizing my content files better. It’s not difficult, but it’s tedious.</p>\n<h2>Back on the Bike</h2>\n<p>I ended up going for my first bike ride in around a year. Managed a little over 27 miles on the Schuylkill River Trail. It was a beautiful day for it and I hope it won’t be the last this year.</p>\n<h2>Progress on Media Repository</h2>\n<p>I spent some time working on my media repository and was able to get the links content functionality built out. Now all that’s left is populating it. I need to figure out a good way to load everything in to the various tables...hundreds of records would be annoying as all get out to backfill manually.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/06/06/personal-sites-connections-and-11ty/",
      "url": "https://kpwags.com/posts/2024/06/06/personal-sites-connections-and-11ty/",
      "title": "Personal Sites, Connections, and 11ty",
      "content_html": "\n\t\t<p>I was recently listening to an episode of the <a href=\"https://changelog.com/jsparty/325\">JS Party podcast</a> where they had <a href=\"https://www.zachleat.com/\">Zach Leatherman</a> on to talk about <a href=\"https://www.zachleat.com/web/independent-sustainable-11ty/\">11ty going independent</a>.</p>\n<p>It was a fantastic conversation. They delved into several topics, the most important of course being his push to help keep 11ty independently supported.</p>\n<p>But one of the conversation points that stuck out to me was about AI and SEO.</p>\n<blockquote>\n<p>To me, the whole point comes back to do we want to make content for algorithms  and computers to slurp up or do we want to make genuine connections with people and grow community that way. To me there’s just so much better return on investment with trying to make connections directly with people rather than worrying about how your page ranks with Google. ... I would rather make connections with people online so you can grow a community that way.</p>\n</blockquote>\n<p>You can listen to the whole clip <a href=\"https://changelog.com/jsparty/325#t=2122\">here</a>.</p>\n<p>But I feel Zach’s take is spot on. I’d rather make connections based on people than worrying about what the “almighty” search algorithm says. All too often it seems like content is getting “dumber” just to do better with SEO. It’s one of the reasons I’ve been liking the personal site renaissance. Seeing more people writing and connecting online through personal sites and blogs is such a nice thing to witness.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-06T16:59:35Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/interdisciplinary-website-maker/",
      "url": "https://kpwags.com/notes/interdisciplinary-website-maker/",
      "title": "Interdisciplinary Website Maker",
      "content_html": "\n\t\t<blockquote>\n<p>But now-a-days, any cross-disciplinary interest is easily interpreted as a lack of specialization and dedication to craft. If you’re doing design and code, how can you be really great at either? You’re not maximizing.</p>\n</blockquote>\n<p>I don’t think there’s anything wrong with specializing, I also don’t think there’s anything wrong with becoming a jack-of-all-trades.</p>\n<p>Designers versus coders aside, I find it odd sometimes when people think that front end developers know no backend and vice versa. We all might be better in one area than another, but I feel like we can all contribute.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-06T16:59:35Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/06/04/may-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/06/04/may-2024-check-in/",
      "title": "May 2024 Check-In",
      "content_html": "\n\t\t<p>I legitimately can’t believe we’re already past May and into June. May was mostly quiet.</p>\n<h2>Back Working on Leegtastic...Briefly</h2>\n<p>After taking a break to work on a website for my wife, I got back to working on Leegtastic (my sports league management side project). Having been doing Blazor development at work for the last several months, I realized I was over-engineering some things. I jumped back in and simplified the code to hopefully make it better and easier to work with.</p>\n<p>But almost as soon as I got back to working on that, another idea came to mind. I've been storing the data for my media pages (<a href=\"https://kpwags.com/bookshelf/\">bookshelf</a>, <a href=\"https://kpwags.com/video-games/\">video games</a>, <a href=\"https://kpwags.com/tv/\">TV</a>, etc.) in Notion. When my site builds, it pulls the data from the Notion API and builds the pages. I thought it would be nice to build a little Blazor app to store all of that locally. Then I'd change the 11ty build process to use that data instead. It's still a work in progress, but that's been my side project focus of late.</p>\n<h2>Started Week Notes</h2>\n<p>Halfway through the month, I decided I'm going to try to start posting week notes every Sunday about things I've been doing or working on. I've done three of them so far, so we'll see if I stick with it or not.</p>\n<h2>Getting Back into Running</h2>\n<p>Over the last 6+ months, my runs have felt like more of a death march rather than some exercise. I felt like I wanted to die after 3 miles. Runs that used to be relatively &quot;easy&quot; for me. After a visit to the doctor didn't turn up anything I ended up <a href=\"https://kpwags.com/posts/2024/05/23/finding-a-new-way-to-run/\">trying something new</a>. Keeping my heart rate in zone 2 has helped tremendously. I'm running longer and further, and feeling good after them. My pace is kind of lousy, but I'm able to do my preferred cardio exercise again, so I'm happy.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 45.92 miles ⬆️</li>\n<li><strong>Walking:</strong> 3.05 miles ⬇️</li>\n<li><strong>Biking:</strong> 0.00 miles ➡️</li>\n<li><strong>Lifting:</strong> 130,103 lbs. ⬆️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/making-it-so-a-memoir-patrick-stewart/19811025?ean=9781982167738\">Making it So</a> by Patrick Stewart</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/under-the-dome-stephen-king/10569164?ean=9781439149034\">Under the Dome</a> by Stephen King</li>\n<li>Started <a href=\"https://bookshop.org/p/books/state-of-fear-michael-crichton/6431901?ean=9780061782664\">State of Fear</a> by Michael Crichton</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/75/\">May 6 (#75)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/76/\">May 13 (#76)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/77/\">May 20 (#77)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/78/\">May 27 (#78)</a></li>\n</ul>\n</li>\n<li>Week Notes\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/05/19/week-notes/\">May 12 - 18</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/05/26/week-notes/\">May 19 - 25</a></li>\n</ul>\n</li>\n<li><a href=\"https://kpwags.com/posts/2024/05/11/frank-turner-undefeated/\">Frank Turner’s latest album <em>Undefeated</em></a></li>\n<li><a href=\"https://kpwags.com/posts/2024/05/23/finding-a-new-way-to-run/\">Figuring out my running</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 2</a></li>\n<li>Started <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 3</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt5171438/\">Star Trek: Discovery</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></li>\n<li>Finished season 1 of <a href=\"https://kpwags.com/posts/2024/06/04/may-2024-check-in/\">Fallout</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt5296406/\">Designated Survivor</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt6548228/\">Castle Rock</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li>None</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-04T23:07:28Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/79/",
      "url": "https://kpwags.com/reading-log/79/",
      "title": "Reading Log - June 3, 2024 (#79)",
      "content_html": "\n\t\t<p>A guide for creating shapes in CSS, understanding how sort in JavaScript works, AI in job searches, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://adamstorr.co.uk/blog/dont-do-this-with-extension-methods/\">Don't Do This With Extension Methods</a> - <em>Adam Storr</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/05/modern-guide-making-css-shapes/\">The Modern Guide For Making CSS Shapes</a> - <em>Temani Afif</em></li>\n<li><a href=\"https://www.jameskerr.blog/posts/javascript-sort-comparators/\">Finally Understanding How Array.sort(comparator) Works</a> - <em>James Kerr</em></li>\n<li><a href=\"https://kettanaito.com/blog/why-patching-globals-is-harmful\">Why Patching Globals Is Harmful</a> - <em>Artem Zakharchenko</em></li>\n<li><a href=\"https://daverupert.com/2024/05/cold-turkey-wont-fix-your-javascript-addiction/\">A common web component learning blunder</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/05/22/why-jonathan-haidts-protect-the-kids-proposals-could-make-things-worse/\">Why Jonathan Haidt’s ‘Protect The Kids’ Proposals Could Make Things Worse For Kids</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/lifestyle/careers/ai-job-application-685f29f7\">‘You’re Fighting AI With AI’: Bots Are Breaking the Hiring Process</a> - <em>Lindsay Ellis</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://badastronomy.beehiiv.com/p/planet-fomalhaut-three-ancient-stars-another-galaxy-orbit\">A planet for Fomalhaut? And three ancient stars from another galaxy orbit our own</a> - <em>Philip Plait</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://terribleminds.com/ramble/2024/04/01/generative-a-i-for-writers-an-unfolding-but-not-inevitable-nightmare/\">Generative A.I. for Writers: An Unfolding (but not Inevitable) Nightmare!</a> - <em>Chuck Wendig</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Childish Gambino - To Be Hunted</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/cTugYhdMDEY\" title=\"Childish Gambino - To Be Hunted\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/3/",
      "url": "https://kpwags.com/week-note/3/",
      "title": "Week Notes for May 26 - June 1 (#3)",
      "content_html": "\n\t\t<p>My week notes for the week of May 26 through June 1.</p>\n<h2>Revamping My Diet</h2>\n<p>I got some bloodwork back recently that was a little less than ideal. Nothing awful, but gave me a push to revisit my diet. It hasn’t been bad, but I’ve definitely looked back and have been snacking a little more than I probably should. Going to try to cut back on the snacking and really try to get my caloric intake a little lower to hopefully lose some more weight faster.</p>\n<h2>Adventures of a New Fridge</h2>\n<p>We got a “new to us” refrigerator for our basement. It came with the doors off and some assembly required. No big deal…right? Well I found the manual for it online and got the doors all put back together only to find that we had a piece that we didn’t know where it went. The manual said nothing about it. Plugging the fridge in, it started beeping. Again, the manual said nothing about that. It took searching the number on top of the random part to find out what it was and where it needed to go. Frustrating since it should have been in the manual.</p>\n<h2>New Little Personal Project</h2>\n<p>One of the things I've been trying to do more is make sure I own my media and my data. I decided that I'd build a little tool to keep track of my reading, watching, listening, and playing lists. They're currently stored within my Notion account, but I started a small .NET project to start to manage them locally. I'm building the interface using Blazor and will interact with a Sqlite database using EntityFramework. Still in the early phases, but should be useful.</p>\n<h2>Upgraded to Eleventy 3.0</h2>\n<p>This past weekend I upgraded my site to the latest <a href=\"https://www.11ty.dev/blog/canary-eleventy-v3/\">Eleventy 3.0 alpha</a>. Outside of a typo in an import that took me some time to track down, it went smoothly. I was definitely impressed with the ease of upgrading major versions. I remember having issues upgrading <a href=\"https://nextjs.org/\">Next.js</a>, so <a href=\"https://www.11ty.dev/\">Eleventy</a>'s ease was refreshing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-06-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/78/",
      "url": "https://kpwags.com/reading-log/78/",
      "title": "Reading Log - May 27, 2024 (#78)",
      "content_html": "\n\t\t<p>A horrid website experience, Nintendo Switch and Mario RPGs, Atari acquisitions and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/05/hidden-vs-disabled-ux/\">Hidden vs. Disabled In UX</a> - <em>Vitaly Friedman</em></li>\n<li><a href=\"https://ericwbailey.website/published/invisible-success/\">Invisible success</a> - <em>Eric Bailey</em></li>\n<li><a href=\"https://www.stefanjudis.com/today-i-learned/safe-unsafe-alignment-in-css-flexbox/\">Safe/unsafe alignment in CSS flexbox</a> - <em>Stefan Judis</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://thehistoryoftheweb.com/the-analog-web/\">The Analog Web</a> - <em>Jay Hoffmann</em></li>\n<li><a href=\"https://matduggan.com/the-worst-website-in-the-entire-world/\">The Worst Website In The Entire World</a> - <em>Matthew Duggan</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.404media.co/university-suspends-students-for-ai-homework-tool-it-paid-them-10-000-to-make/\">University Suspends Students for AI Homework Tool It Gave Them $10,000 Prize to Make</a> - <em>Jason Koebler</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/24162364/paper-mario-rpg-nintendo-switch\">The Nintendo Switch has turned into an excellent Mario RPG machine</a> - <em>Andrew Webster</em></li>\n<li><a href=\"https://www.theverge.com/2024/5/23/24163176/atari-acquires-intellivision-amico-console\">Atari acquires longtime rival Intellivision</a> - <em>Ash Parrish</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://coryd.dev/posts/2024/dont-be-afraid-to-admin-when-you-dont-know-something/\">Don’t be afraid to admit when you don’t know something</a> - <em>Cory Dransfeldt</em></li>\n<li><a href=\"https://joanwestenberg.com/blog/vlze6zsss80jh0xbew8e3ukxl4voxp\">How we fix the rebellion against knowledge</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Tim Barry - Exit Wounds</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/2h8smyzvJMk\" title=\"Tim Barry - Exit Wounds\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-27T19:59:53Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/2/",
      "url": "https://kpwags.com/week-note/2/",
      "title": "Week Notes for May 19 - 25 (#2)",
      "content_html": "\n\t\t<p>Week notes for May 19 through May 25</p>\n<h2>Leegtastic Work</h2>\n<p>I had taken a break working on Leegtastic to work on a website for my wife. I came back and started questioning how I was doing things based on some of my work with Blazor for my job. Decided to revamp some of the architecture. So while I’m not building new functionality, I’m hopefully putting it in a better place for future work.</p>\n<h2>Completed Mass Effect 2</h2>\n<p>I've been playing a lot of Mass Effect 2 and ended up completing it Saturday. I enjoyed it a lot more than I anticipated given how it started. I also kind of felt that the final battle was easier than you'd expect for a final showdown.</p>\n<h2>Sublime Text</h2>\n<p>Prior to Visual Studio Code's release, I was a big fan of Sublime Text. I'm giving it a try again on my personal site and seeing how I like it. So far I miss some features of Code, but it feels lighter and slightly more snappy.</p>\n<h2>House Work</h2>\n<p>We are getting a refrigerator for our basement, I spent parts of the week cleaning out a spot for it and running a wire for a new outlet. It was a challenge to find an acceptable circuit to use and connect into.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-26T13:35:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/05/23/finding-a-new-way-to-run/",
      "url": "https://kpwags.com/posts/2024/05/23/finding-a-new-way-to-run/",
      "title": "Finding a New Way to Run",
      "content_html": "\n\t\t<p>For the last 10+ years, running has been my primary form of cardio exercise, and often my go-to exercise of any type. The last 6-8 months has been a little trying for me with my running.</p>\n<p>Since a little over halfway through last year, I’ve been struggling to run at the same pace I had in the past. I had been able to do 3-4 mile runs regularly averaging 9:30-9:45 minutes per mile, sometimes faster, sometimes slower. I could go longer too with a slight drop in pace.</p>\n<p>All of a sudden, I was hovering around 10:30 minutes per mile. And not only that, but I would feel like death after 3 miles and an absolute wall at around 4 miles. Given my propensity for running, this has been less than great. I’d been trying to keep at it with the hopes of having more runs help re-acclimate myself to it.</p>\n<p>I’ve been trying to figure out why this started. Best guess is that I might’ve had COVID in May 2023. I tested twice, both came back negative, but the tests had expired. The doctor didn’t turn up anything, so long COVID is currently the best explanation. Other than this, I don’t have any other symptoms though.</p>\n<p>Recently, I read an <a href=\"https://newsletter.rationalwalk.com/p/in-the-zone\">article</a> talking about keeping your heart rate in zone 2 while running. Like the author, I noticed that a lot of my runs have my heart rate hanging out in zone 3, 4 &amp; 5.</p>\n<p>Figuring there’d be no harm in keeping my heart rate on the lower side, I decided to start running focusing on keeping my heart rate in zone 2 (130-141 bpm). For the first couple runs it was a little tricky for me finding a pace that keeps my heart rate lower.</p>\n<p>I’ve now been doing this for 2 weeks across 8 runs. I’ve gotten better at finding the appropriate pace I need to keep myself in zone 2, although it’s still a struggle sometimes to slow down. I’m just so used to just going at whatever pace my body lets me. I’ve been running at a much slower than before, now around 12:00 minutes per mile, but I’ve felt much better during and after my runs. I don’t feel anywhere close to death after runs, and I’ve blown past my 4 mile wall, having hit almost 6 miles once (only stopping early to not overdo it).</p>\n<p>My Apple Watch has allowed me to keep tabs on my heart rate while running. I have it set to alert me with both audio and vibration alerts whenever I enter or leave the zone so I know where my heart rate currently stands.</p>\n<p>I’m hoping that I can keep at it and hopefully continue to improve both the distance I can run, as well as the pace at which I’m running it. At the end of the day, I’ve never been a fast runner, and while it’d be nice to be able to run faster, I’m happy to be able to just run.</p>\n<p><em><strong>Disclaimer:</strong></em> I am not a doctor, nor do I play one on TV. Don’t take what I’m saying as medical advice, it’s just something that has been helping me. If you’re dealing with medical issues, please see a medical professional.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/half-ass-it/",
      "url": "https://kpwags.com/notes/half-ass-it/",
      "title": "Half-Ass It",
      "content_html": "\n\t\t<blockquote>\n<p>So here’s a small piece of advice, from one reformed overachiever to another (future) one: <em>half-ass it</em>. Pick a task, something small to start, and do it carelessly. Do half (or less) of what you would ordinarily do. Then see what happens. Consider it an experiment in which your intention is to learn, whatever the outcome. I’m betting your half-assed version is better than most people’s whole ass, but you can test that assertion yourself.</p>\n</blockquote>\n<p>All too often people (including myself) say we’re going to do something, learn something, and then never actually do it. Doing something sloppy to learn something is often more than others do.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/dont-be-afraid-to-admit-when-you-dont-know/",
      "url": "https://kpwags.com/notes/dont-be-afraid-to-admit-when-you-dont-know/",
      "title": "Don’t be afraid to admit when you don’t know something",
      "content_html": "\n\t\t<blockquote>\n<p>I’ve been asked when interviewing for a front end ecommerce position how the Javascript event loop works — in detail. I told the interviewer I didn’t know, had never needed to in previous positions but was confident I could figure it out. They hired me. I’ve taken a similar tack when discussing other roles with interviewers — I don’t know, but I like to learn and I’ll figure it out. Don’t know enough React? I’ll learn. Don’t know bespoke framework/internal tool X? I’ll learn.</p>\n</blockquote>\n<p>This is the correct mindset. Don’t try to BS through answers, people will figure it out. Learn the fundamentals and picking up new frameworks and libraries will be doable.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/77/",
      "url": "https://kpwags.com/reading-log/77/",
      "title": "Reading Log - May 20, 2024 (#77)",
      "content_html": "\n\t\t<p>A little light this week, but it includes a good article talking about C and Rust, as well as Google &amp; Apple finally adding better support for protection from unwanted trackers.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/css-inheritance/\">CSS inheritance</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://www.digitala11y.com/make-your-forms-accessible-to-all-a-checklist-for-web-mobile-apps/\">Make Your Forms Accessible to All: A Checklist for Web &amp; Mobile Apps</a> - <em>Raghavendra Satish Peri</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://medium.com/@john_25313/c-isnt-a-hangover-rust-isn-t-a-hangover-cure-580c9b35b5ce\">C isn’t a Hangover; Rust isn’t a Hangover Cure</a> - <em>John Viega</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://humanewebmanifesto.com/\">Manifesto for a Humane Web</a> - <em>Michelle Barker</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.economist.com/science-and-technology/2024/05/17/it-is-dangerously-easy-to-hack-the-worlds-phones\">It is dangerously easy to hack the world’s phones</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.apple.com/ca/newsroom/2024/05/apple-and-google-deliver-support-for-unwanted-tracking-alerts-in-ios-and-android/\">Apple and Google deliver support for unwanted tracking alerts in iOS and Android</a> - <em>Apple</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/05/16/1250250249/spacex-repair-hubble-space-telescope-nasa-foia\">Private mission to save the Hubble Space Telescope raises concerns, NASA emails show</a> - <em>Nell Greenfieldboyce</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podrocket.logrocket.com/future-of-responsive-design\">PodRocket: The future of responsive design with Una Kravets and Adam Argyle</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/05/14/1250973443/system-of-a-downs-serj-tankian-on-his-memoir-why-a-new-album-hasnt-come-since-20\">System of a Down's Serj Tankian on his memoir, why a new album hasn't come since 2005</a> - <em>Kaity Kline, Phil Harrell, &amp; A Martínez</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Hot Water Music - Bury Us All</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ts2weTaguvk\" title=\"Hot Water Music - Bury Us All\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/week-note/1/",
      "url": "https://kpwags.com/week-note/1/",
      "title": "Week Notes for May 12 - 18 (#1)",
      "content_html": "\n\t\t<p>Notes for the week of May 12 through May 18</p>\n<h2>Working on Rebuilding My Photography Site</h2>\n<p>A while back, when upgrading Next.js on my previous site, I was having issues with my photography pages. I decided that I’d shelve the pages and re-introduce them later. Time passed and I never did. This week, I decided to rebuild it as a subdomain instead. I started laying out the page and figuring things out. Will be built with 11ty as well.</p>\n<h2>Finding a Lightroom Replacement</h2>\n<p>For the longest time, I’ve used Adobe Lightroom to manage my photography library. I decided to quit the subscription for it because I want a non-subscription option. I tried my old Lightroom 5 license, but the app is so old, it’s buggy on new Mac hardware. Still trying <a href=\"https://www.darktable.org/\">darktable</a>, but it feels a bit clunky.</p>\n<h2>Continuing Mass Effect 2</h2>\n<p>I’ve been spending a lot of time in Mass Effect 2. The game feels so much larger than the original. I’ve been enjoying it. I thought I enjoyed Mass Effect more, but I think that’s changed.</p>\n<h2>PWHL Playoffs</h2>\n<p>I’ve been trying to follow the PWHL playoffs. A lot of games with multiple overtimes. It’s nice to see a women’s hockey league having some success. Hope this continues.</p>\n<h2>New Split Keyboard</h2>\n<p>I recently picked up the <a href=\"https://www.zsa.io/voyager\">ZSA Voyager</a> mechanical ergonomic keyboard. I can't get over how small it is. It does take some getting used to compared to my <a href=\"https://www.zsa.io/moonlander\">Moonlander</a>. Also, I could thankfully remap some of the keys because the default layout was opposite the Moonlander and it was nice to be able to set it up to match.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/start-with-simple-tools/",
      "url": "https://kpwags.com/notes/start-with-simple-tools/",
      "title": "Start with Simple Tools",
      "content_html": "\n\t\t<blockquote>\n<p>You don’t need fancy software to write. You also don’t need a £1k+ camera to take photos, the latest console to play video games, or a certificate to learn something.</p>\n</blockquote>\n<p>I’ve seen artists use Microsoft Paint to create amazing pictures. It goes to show you don’t need fancy tools to do great things. If you’re trying something new, start with the basics and go from there.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/josh-collinsworth-on-css-gatekeeping/",
      "url": "https://kpwags.com/notes/josh-collinsworth-on-css-gatekeeping/",
      "title": "Josh Collinsworth on CSS Gatekeeping",
      "content_html": "\n\t\t<blockquote>\n<p>The question of whether CSS is a programming language serves only one purpose: to demote those who write it.</p>\n<p>There is no confusion that needs to be clarified, and no other purpose in asking, beyond the most trivial kind of pedantry.</p>\n<p>The debate itself is an act of gatekeeping, whether intentional or not. Its only significant effect is to elevate some work over other work, despite their essentially identical nature.</p>\n<p>The only meaningful function of the question is segregation.</p>\n</blockquote>\n<p>I really don’t get the whole “CSS isn’t a programming language” crowd. I see what other developers can do with CSS and am amazed. It’s something I’ve been consistently trying to improve on. The gatekeeping stuff is just BS.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/76/",
      "url": "https://kpwags.com/reading-log/76/",
      "title": "Reading Log - May 13, 2024 (#76)",
      "content_html": "\n\t\t<p>React 19 is now in beta, NASA looks ahead to both the new Starliner launch and Artemis II, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://react.dev/blog/2024/04/25/react-19\">React 19 Beta</a> - <em>The React Team</em></li>\n<li><a href=\"https://adrianroselli.com/2024/05/level-setting-heading-levels.html\">Level-Setting Heading Levels</a> - <em>Adrian Roselli</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://jeremydmiller.com/2024/02/12/the-case-against-clean-architecture/\">The Case Against Clean Architecture</a> - <em>Jeremy D. Miller</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/science/space-astronomy/boeings-big-space-test-using-starliner-to-ferry-nasa-astronauts-b1425629?st=ojphifftvoa9d9m&amp;reflink=article_copyURL_share\">Boeing’s Big Space Test: Using Starliner to Ferry NASA Astronauts</a> - <em>Micah Maidenberg</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/05/nasa-confirms-independent-review-of-orion-heat-shield-issue/\">NASA confirms “independent review” of Orion heat shield issue</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.rockpapershotgun.com/elder-scrolls-and-fallout-creators-bethesda-want-to-release-games-more-often-but-making-them-last-is-more-important\">Elder Scrolls and Fallout devs Bethesda want to release games more often, but making them last is more important</a> - <em>Edwin Evans-Thirlwell</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/04/30/techdirt-podcast-episode-389-talking-tiktok/\">Techdirt Podcast: Talking TikTok</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/5/8/24152046/peacock-office-spinoff-greg-daniels-michael-koman\">Peacock is turning The Office into a franchise with a new spinoff series</a> - <em>Charles Pulliam-Moore</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://mikegrindle.com/posts/start-simple\">Start With Simple Tools</a> - <em>Mike Grindle</em></li>\n<li><a href=\"https://jvns.ca/blog/2023/10/06/new-talk--making-hard-things-easy/\">New talk: Making Hard Things Easy</a> - <em>Julia Evans</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Coldplay - Speed of Sound</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0k_1kvDh2UA\" title=\"Coldplay - Speed of Sound\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/05/11/frank-turner-undefeated/",
      "url": "https://kpwags.com/posts/2024/05/11/frank-turner-undefeated/",
      "title": "Frank Turner - Undefeated",
      "content_html": "\n\t\t<p>I’ve been a fan of Frank Turner since I first heard his album <em><a href=\"https://youtube.com/playlist?list=OLAK5uy_kRslN3ZtS6exwxvtcx3qIww8SZvAXieAg&amp;si=rnHpt0XiXYB1fgBJ\">England Keep My Bones</a></em> back in 2010. He’s an English folk/punk songwriter and his live shows and his albums have thus far been phenomenal. A little over a week ago on May 3rd, Frank Turner released his latest album <em>Undefeated</em>.</p>\n<p>The album is another solid release by Frank Turner. My favorite songs from the album are <em>Do One</em>, <em>Ceasefire</em>, &amp; <em>Letters</em>.</p>\n<h2>Do One</h2>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/zI-o1S9FJl8\" title=\"Frank Turner - Do One\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n<blockquote>\n<p>Some people are just going to hate you. No matter what you do. So don’t waste Your time trying to change their minds, just be a better you. It took me year to learn this. More than I’d like to admin. But through my ups and downs I’ve figured one thing out. Don’t take anyone’s shit. I’m still standing up, and there’s nothing you can do.</p>\n</blockquote>\n<p>I love that first verse. I relate to it personally as growing up, I was overly worried about how other people felt about me. It took me an embarrassingly long time to realize that was no good and to recognize that all I can do is try to be a good person and ignore them.</p>\n<h2>Ceasefire</h2>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/SRIhhQ9rfQ4\" title=\"Frank Turner - Ceasefire\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n<p>This is another good one that talks about the conflict between one's younger self and the person one's become. We've all had dreams as kids that might not have worked out. Sometimes for the worse, but sometimes for the better, even if we don't realize it.</p>\n<blockquote>\n<p>I know I'm not everything that you had hoped and imagined that I would be. But I did my best. And I have seen things that you don't even know that you've never seen. We need to find some common ground. In the ruins that still stand. Between you and me, both of us want peace. Ceasefire</p>\n</blockquote>\n<h2>Letters</h2>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Ahbhv-k4Em4\" title=\"Frank Turner - Letters\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n<p>This is a great song. The lyrics talk about him falling out of communication with someone. And it makes me think about how I loved getting letters growing up and miss it. I also look at how easy it is, especially as an adult, to fall out of touch with someone and drift apart.</p>\n<hr />\n<p>I'd highly recommend the album. Here's a <a href=\"https://youtube.com/playlist?list=OLAK5uy_k6x5izQIVp5022XwJ5Gws44Or5ReRwIpE&amp;si=alN3sgpcXwjjQ4TO\">YouTube playlist</a> of the album.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/75/",
      "url": "https://kpwags.com/reading-log/75/",
      "title": "Reading Log - May 6, 2024 (#75)",
      "content_html": "\n\t\t<p>Apple is asking for input on masonry layouts, NASA is still pushing forward with Artemis II, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://blog.lhotka.net/2024/03/30/Blazor-8-Render-Mode-Detection\">Blazor 8 Render Mode Detection</a> - <em>Rockford Lhotka</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://webkit.org/blog/15269/help-us-invent-masonry-layouts-for-css-grid-level-3/\">Help us invent CSS Grid Level 3, aka “Masonry” layout</a> - <em>Jen Simmons</em></li>\n<li><a href=\"https://piccalil.li/blog/an-evolution-not-a-revolution/\">An evolution, not a revolution</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://fettblog.eu/typescript-never-and-error-handling/\">The <code>never</code> type and error handling in TypeScript</a> - <em>Stefan Baumgartner</em></li>\n<li><a href=\"https://dbushell.com/2024/03/10/css-button-styles-you-might-not-know/\">CSS Button Styles You Might Not Know</a> - <em>David Bushell</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.citationneeded.news/we-can-have-a-different-web/\">We can have a different web</a> - <em>Molly White</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/5/1/24146693/unitedhealth-22-million-ransom-ransomware-hack-blackcat\">UnitedHealth CEO admits it paid $22 million ransom to BlackCat</a> - <em>Gaby Del Valle</em></li>\n<li><a href=\"https://www.techdirt.com/2024/05/01/verizon-att-t-mobile-finally-fined-192-million-for-abuse-of-user-location-data/\">Verizon, AT&amp;T, T-Mobile Finally Fined $192 Million For Abuse Of User Location Data</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/05/nasa-seems-unhappy-to-be-questioned-about-its-artemis-ii-readiness/\">NASA says Artemis II report by its inspector general is unhelpful and redundant</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/05/daily-telescope-seeing-a-mane-attraction-up-close/\">Daily Telescope: The Horsehead Nebula as we’ve never seen it before</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/04/nasa-exploration-chief-lays-out-next-steps-for-starship-development/\">NASA lays out how SpaceX will refuel Starships in low-Earth orbit</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/tech-policy/2024/05/fcc-makes-last-plea-to-congress-as-broadband-discount-program-runs-out-of-cash/\">Congress lets broadband funding run out, ending $30 low-income discounts</a> - <em>Jon Brodkin</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - Letters</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Ahbhv-k4Em4\" title=\"Frank Turner - Letters\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/05/04/april-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/05/04/april-2024-check-in/",
      "title": "April 2024 Check-In",
      "content_html": "\n\t\t<p>April was a busy month. We celebrated my wife's birthday with a trip to Cape May, spent time with family, and my next hockey season started up.</p>\n<h2>Cape May Trip</h2>\n<p>For my wife's birthday, we took our usual trip to Cape May. We stayed at Congress Hall, which is an old hotel by the beach built in 1816. It's a gorgeous property and we spent time relaxing on its veranda reading and walking around the beach town.</p>\n<p>Some days we meandered further inland to check out some of the local wineries and breweries. All in all, it was a relaxing trip, and something I didn't realize I needed.</p>\n<h2>Family Time</h2>\n<p>Our family has a lot of April birthdays and we ended up going out to dinner a few times this month as a family. We don't always get the chance to see some of our extended family, so it was good to see them multiple times this month.</p>\n<h2>New Hockey Season</h2>\n<p>Not much to report here, but the spring - summer hockey season started up and we've jumped right high gear. Looks like we're going to be playing once every 7-10 days so I'll be back at the rink on a regular basis. Only saviing grace for my sleep schedule is that the other league I play in is on hiatus for the next month.</p>\n<h2>Everything Else</h2>\n<p>Work has been going well. I've been making good progress with Blazor. I occasionally have run into learning curve issues regarding JavaScript and Blazor's rendering modes, but I'm learning and enjoying it.</p>\n<p>My <a href=\"https://kpwags.com/posts/2024/02/08/scheduling-my-hobbies/\">experiment in scheduling my hobbies</a> has fallen flat. I've mostly gone back to doing whatever it is I want to do most nights. I think I might try to get something similar going again. I've fallen out of the habit of writing more of the story (might be a novel now?) which has been kind of disappointing. Setting aside time would be helpful to keep myself on track.</p>\n<p>I've also put a pause on my one side project while I build a website for my wife for her to write about her crafts and whatnot. I'll be building it with <a href=\"https://www.11ty.dev/\">11ty</a> just like my site. It should be a relatively simple build, but I'm looking forward to getting it up and running.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 32.03 miles ⬆️</li>\n<li><strong>Walking:</strong> 13.06 miles ⬇️</li>\n<li><strong>Biking:</strong> 0.00 miles ➡️</li>\n<li><strong>Lifting:</strong> 68,121 lbs. ⬇️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-stand-stephen-king/8197596?ean=9780307947307\">The Stand</a> by Stephen King</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-android-s-dream-john-scalzi/7103015?ean=9781250174758\">The Android's Dream</a> by John Scalzi</li>\n<li>Started <a href=\"https://bookshop.org/p/books/making-it-so-a-memoir-patrick-stewart/19811025?ean=9781982167738\">Making It So</a> by Patrick Stewart</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/70/\">April 1 (#70)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/71/\">April 8 (#71)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/72/\">April 15 (#72)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/73/\">April 22 (#73)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/74/\">April 29 (#74)</a></li>\n</ul>\n</li>\n<li><a href=\"https://kpwags.com/posts/2024/04/05/what-i-learned-integration-testing-blazor/\">Integration tests in Blazor</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/04/09/ai-enters-the-job-screening-game/\">AI entering the job screening business</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/04/12/what-i-learned-focus-visible/\">CSS :focus-visible</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/04/24/the-perils-of-gamification/\">Dangers of gamifying things</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/04/29/my-space-sleeve-is-complete/\">My space sleeve finally completed</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 2</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Started Season 5 of <a href=\"https://www.imdb.com/title/tt5171438/\">Star Trek: Discovery</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt12637874/\">Fallout</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt4513678/\">Ghostbusters: Afterlife</a></li>\n<li><a href=\"https://www.imdb.com/title/tt21235248\">Ghostbusters: Frozen Empire</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-05-04T16:53:24Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/04/29/my-space-sleeve-is-complete/",
      "url": "https://kpwags.com/posts/2024/04/29/my-space-sleeve-is-complete/",
      "title": "My Space Sleeve is Complete",
      "content_html": "\n\t\t<p>Over the course of the last 9+ months, I spent almost 42 hours getting my right arm inked up. The end result is an awesome sleeve featuring an awesome space theme. I love how it turned out.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/3d28rc0Ofy-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/3d28rc0Ofy-1440.gif 1440w\" /><img alt=\"My sleeve from the side showing the pillars of creation, the space shuttle, voyager, and a little of Jupiter\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/3d28rc0Ofy-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/oxtIu64q_d-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/oxtIu64q_d-1440.gif 1440w\" /><img alt=\"The inside of my sleeve featuring earth, an astronaut, and a type 1a supernova\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/oxtIu64q_d-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/ght5Cs0JSm-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/ght5Cs0JSm-1440.gif 1440w\" /><img alt=\"The back of my sleeve featuring saturn, jupiter, a galaxy, a meteor, and a black hole\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/ght5Cs0JSm-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/dp8jjeUiRv-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/dp8jjeUiRv-1440.gif 1440w\" /><img alt=\"The inside of my upper arm primarily featuring uranus\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/dp8jjeUiRv-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p>It was done by <a href=\"https://www.facebook.com/IntimateBodyArtStudios/\">Kenneth Bryan at Intimate Body Art Studios</a> in Glenside, Pennsylvania.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-29T23:36:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/74/",
      "url": "https://kpwags.com/reading-log/74/",
      "title": "Reading Log - April 29, 2024 (#74)",
      "content_html": "\n\t\t<p>Centering content has never been easier! Also, a scathing review on Jonathan Haidt's new book on social media.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://web.dev/blog/align-content-block\">The align-content property for block layouts is now part of Baseline</a> - <em>Rachel Andrew</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/04/22/jonathan-haidts-book-the-anxious-generation-is-coddling-the-american-parent-giving-them-clear-simple-wrong-explanations-for-whats-ailing-teens/\">Jonathan Haidt’s Book ‘The Anxious Generation’ Is Coddling The American Parent; Giving Them Clear, Simple &amp; Wrong Explanations For What’s Ailing Teens</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.thedailybeast.com/the-coddling-of-the-american-parent?ref=author\">The Coddling of the American Parent</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.abc.net.au/news/2024-04-15/how-misinformation-spread-after-bondi-junction-stabbing/103708210\">Benjamin Cohen was falsely accused of the Bondi Junction stabbings. Here's how the lie spread around the world.</a> - <em>Kevin Nguyen and Michael Workman</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://defector.com/video-games-should-be-easy-for-baby-gamers-like-me\">Video Games Should Be Easy, For Baby Gamers Like Me</a> - <em>Barry Petchesky</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/william-bernstein-on-stocks-bonds-and-the-economy\">The New Bazaar: William Bernstein on stocks, bonds, and the economy</a></li>\n<li><a href=\"https://podcast.ctrlaltspeech.com/2315966/14920868-the-difficulty-of-being-a-teen-online\">Ctrl-Alt-Speech: The Difficulty of Being a Teen Online</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/what-we-often-get-wrong-about-teens-and-screen-time/\">Make Me Smart: What we often get wrong about teens and screen time</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.kuow.org/stories/digital-reading-soars-in-seattle-creating-problems-for-local-libraries\">Digital reading soars in Seattle, creating problems for local libraries</a> - <em>Clare McGrane &amp; Patricia Murphy</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Tim Barry - Dog Bumped</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/VspwbirEx-A\" title=\"Tim Barry - Dog Bumped\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-29T23:31:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/on-calvin-and-hobbes/",
      "url": "https://kpwags.com/notes/on-calvin-and-hobbes/",
      "title": "Why the Short-Lived Calvin and Hobbes Is Still One of the Most Beloved &amp; Influential Comic Strips",
      "content_html": "\n\t\t<blockquote>\n<p>It took no time at all to master Garfield, but when I started getting Calvin and Hobbes, I knew I was making progress; even when I didn’t understand the words, I could still marvel at the sheer exuberance and detail of the art.</p>\n</blockquote>\n<p>I still read <em>Calvin &amp; Hobbes</em> and I’m amazed at how much more I still get out of the strips. Bits and pieces of humor, insights into life, and more still permeate the strips.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/centering-content-with-html-and-css/",
      "url": "https://kpwags.com/notes/centering-content-with-html-and-css/",
      "title": "The align-content property for block layouts is now part of Baseline",
      "content_html": "\n\t\t<p>There was always the running joke with how to center content. Then it became easier with CSS grid and flexbox. Now you don’t even need that.</p>\n<blockquote>\n<p>With align-content available for block layout, you can achieve vertical alignment without needing to create a flex or grid layout for the property to work. No additional properties are needed as the item remains a block item, the only change is to the alignment.</p>\n</blockquote>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/04/24/the-perils-of-gamification/",
      "url": "https://kpwags.com/posts/2024/04/24/the-perils-of-gamification/",
      "title": "The Perils of Gamification",
      "content_html": "\n\t\t<p>I’ve been an <a href=\"https://kpwags.com/posts/2020/11/01/apple-watch/\">Apple Watch</a> user since 2017. I found it convenient for fitness and certain notifications. One thing I’ve been kind of inadvertently working on this year is trying to earn the monthly badges Apple offers. Thinking about it more, I realized that this kind of thing can be sort of nefarious.</p>\n<p>For those that aren’t aware, Apple, as part of its Activity app that ties into the Apple Watch, gives you awards for various achievements. Every month, you can get a special award by reaching a different goal the app sets out for you. I’m assuming that these monthly awards are tailored to the user as the goals that have been set for me seem targeted to the activities I normally do. For example, the awards I’ve gotten this year are:</p>\n<ul>\n<li><strong>January:</strong> Exercising at least 20 minutes 14 days during the month.</li>\n<li><strong>February:</strong> Walking or running at least 1.82 miles (oddly specific) 14 days during the month.</li>\n<li><strong>March:</strong> Hitting my stand goal (stand for a bit every hour 12x a day) 25 days during the month.</li>\n<li><strong>April:</strong> Run for at least 5 minutes 6 times during the month.</li>\n</ul>\n<p>All of them are targeted for the activities I partake in. There’s kind of a challenge to making sure you hit the goals, because once the month passes, you can’t go back and retroactively complete them. I’ll definitely admit I was trying to make sure I hit the goals Apple set for me. Which made me think about that.</p>\n<p>None of the four were impossible to hit, and they weren’t particularly taxing. Exercise lightly for 20 minutes every other day would’ve gotten me January’s. Getting out of my chair briefly every hour for 12 hours is a good thing and not rough on the body. Heck, even the running goal isn’t all that bad since I normally run 5-10x a month for 30-40 minutes per run.</p>\n<p>But for someone who might just be trying to get more active, or someone with underlying medical conditions, there might be some risks there. People should obviously talk with their doctor and listen to their bodies when exercising, and I’m by no means implying Apple would push users towards unsafe goals, but I can see some risk there. There are always new fitness fads coming and going, and I could see one of the less scrupulous ones setting goals that might not be best for everyone without the proper warnings. Maintaining, losing, or gaining weight is so often a tricky balanace for many people, and with all the conflicting information out there, even the best intentions might go awry.</p>\n<p>And this is health and fitness, something that is good for you. I can only imagine how the gamification that Apple has implemented can be used for evil. A quick example would be sports betting. (I HATE how much gambling has entered the world of sports...hate hate hate it.) I don’t really follow much of what FanDuel or any of the other sports books do, but I can only imagine how much they could use gamification to get people to bet more, and in turn, probably lose more. While some sports books I’m sure would avoid much in the terms of gamification for no other reason than to avoid bad PR, I doubt all would be willing to forego the bad PR to make a quick buck.</p>\n<p>The ease at which people can throw money towards sports bets is disconcerting to me. I don’t gamble, and am not against it persay, but I’ve heard so many horror stories of what gambling addiction can do to people and families.</p>\n<p>I guess my main thought and takeway from all of this is that gamification is something that can often balance on the edge of a blade in terms of whether it’s good or bad. Some consideration from companies, people, and the users is important.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-24T23:20:57Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/73/",
      "url": "https://kpwags.com/reading-log/73/",
      "title": "Reading Log - April 22, 2024 (#73)",
      "content_html": "\n\t\t<p>Heavy on web development this week. Also, a great article on the legacy of Calvin &amp; Hobbes.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/understanding-the-whys-whats-and-whens-of-valuetask/\">Understanding the Whys, Whats, and Whens of ValueTask</a> - <em>Stephen Toub</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://scottjehl.com/posts/wordleish/\">How would you build Wordle with just HTML &amp; CSS?</a> - <em>Scott Jehl</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/04/sliding-3d-image-frames-css/\">Sliding 3D Image Frames In CSS</a> - <em>Temani Afif</em></li>\n<li><a href=\"https://piccalil.li/blog/the-box-model-and-box-sizing/\">The Box Model and Box Sizing</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://piccalil.li/blog/a-primer-on-the-cascade-and-specificity/\">A primer on the cascade and specificity</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://ryanmulligan.dev/blog/50-50-overflow/\">The Fifty-Fifty Split and Overflow</a> - <em>Ryan Mulligan</em></li>\n<li><a href=\"https://www.joshwcomeau.com/react/css-in-rsc/\">CSS in React Server Components</a> - <em>Josh W Comeau</em></li>\n<li><a href=\"https://shkspr.mobi/blog/2024/04/i-cant-use-my-number-pad-for-2fa-codes/\">I can't use my number pad for 2FA codes</a> - <em>Terence Eden</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://bartwullems.blogspot.com/2024/03/everyone-should-be-architect.html\">Everyone should be an architect</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://arstechnica.com/information-technology/2024/04/redis-license-change-and-forking-are-a-mess-that-everybody-can-feel-bad-about/\">Redis’ license change and forking are a mess that everybody can feel bad about</a> - <em>Kevin Purdy</em></li>\n<li><a href=\"https://erikdarling.com/returning-a-row-when-your-query-has-no-results/\">Returning A Row When Your Query Has No Results</a> - <em>Erik Darling</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/03/27/why-bluesky-remains-the-most-interesting-experiment-in-social-media-by-far/\">Why Bluesky Remains The Most Interesting Experiment In Social Media, By Far</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://om.co/2024/03/31/why-corporations-fail-to-protect-our-data/\">Why Corporations Fail to Protect Our Data</a> - <em>Om Malik</em></li>\n<li><a href=\"https://www.wired.com/story/the-us-government-has-a-microsoft-problem/\">Why the US government’s overreliance on Microsoft is a big problem</a> - <em>Eric Geller</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/04/florida-man-tells-ars-about-his-encounter-with-something-that-fell-from-space/\">A chunk of metal that tore through a Florida home definitely came from the ISS</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.pushkin.fm/podcasts/cautionary-tales/when-parakeets-plundered-new-york\">Cautionary Tales: When Parakeets Plundered New York</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1854\">.NET Rocks: Fluent Assertions with Dennis Doomen</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.openculture.com/2024/04/why-the-short-lived-calvin-and-hobbes-is-still-one-of-the-most-beloved-and-influential-comic-strips.html\">Why the Short-Lived Calvin and Hobbes is Still One of the Most Beloved and Influential Comic Strips</a> - <em>Colin Marshall</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - Vagabond</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/cBc-DvF7PQU\" title=\"Vagabond\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/72/",
      "url": "https://kpwags.com/reading-log/72/",
      "title": "Reading Log - April 15, 2024 (#72)",
      "content_html": "\n\t\t<p>A little heavy on web development and podcsasts this week.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://dateo-software.de/blog/entity-framework-8\">Useful features in Entity Framework Core 8 for your application</a> - <em>Dennis Frühauff</em></li>\n<li><a href=\"https://blog.jetbrains.com/dotnet/2024/03/26/collection-expressions-using-csharp-12-in-rider-and-resharper/\">Collection Expressions – Using C# 12 in Rider and ReSharper</a> - <em>Matthias Koch</em></li>\n<li><a href=\"https://thenewstack.io/c-compiler-lead-jared-parsons-on-20-years-at-microsoft/\">C# Compiler Lead Jared Parsons on 20 Years at Microsoft</a> - <em>David Cassel</em></li>\n<li><a href=\"https://blog.ndepend.com/abstract-class-vs-interface-in-c/\">Abstract Class vs Interface in C#</a> - <em>NDepend</em></li>\n<li><a href=\"https://www.roundthecode.com/dotnet-tutorials/how-to-use-xunit-run-unit-testing-dotnet-csharp\">How to use xUnit to run unit testing in .NET and C#</a> - <em>David Grace</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.leereamsnyder.com/write-css-not-too-much-mostly-scoped\">Write CSS. Not too much. Mostly scoped.</a> - <em>Lee James Reamsnyder</em></li>\n<li><a href=\"https://lydiahallie.framer.website/blog/promise-execution\">JavaScript Visualized: Promise Execution</a> - <em>Lydia Hallie</em></li>\n<li><a href=\"https://adactio.com/journal/21027\">Hanging punctuation in CSS</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://ellyloel.com/blog/front-end-development-s-identity-crisis/\">Front-end development’s identity crisis</a> - <em>Elly Loel</em></li>\n<li><a href=\"https://danburzo.ro/responsive-images-html/\">How to think about HTML responsive images</a> - <em>Dan Cătălin Burzo</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://blog.jetbrains.com/qodana/2024/03/what-is-static-code-analysis/\">What is static code analysis?</a> - <em>Kerry Beetge</em></li>\n<li><a href=\"https://blog.scottlogic.com/2024/03/22/designing-for-neurodiversity.html\">Designing for Neurodiversity</a> - <em>Mark Wallace</em></li>\n<li><a href=\"https://pmichaels.net/cost-of-not-logging/\">The Cost of Not Logging</a> - <em>Paul Michaels</em></li>\n<li><a href=\"https://jimbobbennett.dev/blogs/how-to-review-a-pr/\">How to correctly review a pull request</a> - <em>Jim Bennett</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/04/08/tech-is-supercharging-pre-employment-personality-tests/\">Tech is supercharging pre-employment personality tests</a> - <em>Meghan McCarty Carino</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/4/9/24124179/beeper-app-automattic-acquisition-matrix-messaging\">Beeper was just acquired by Automattic, which has big plans for the future of messaging</a> - <em>David Pierce</em></li>\n<li><a href=\"https://justinjackson.ca/calm-company\">We need more calm companies</a> - <em>Justin Jackson</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/5398208/2024/04/08/baseball-pitching-injury-crisis/\">Pitching injury crisis has no easy fix, but baseball’s leaders better get to work on one</a> - <em>Ken Rosenthal</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcast.smashingmagazine.com/episodes/what-is-the-transitional-web-with-chris-ferdinandi\">Smashing Magazine Podcast #63: What is the Transitional Web with Chris Ferdinandi</a></li>\n<li><a href=\"https://github.com/readme/podcast/decoding-conventions\">The ReadME Podcast: (De)coding conventions</a></li>\n<li><a href=\"https://www.npr.org/2023/06/26/1184369968/the-legacy-of-baseballs-negro-league\">Fresh Air: The Legacy Of Baseball's 'Negro League'</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1853\">.NET Rocks #1853: Scaling a Monolith with Derek Comartin</a></li>\n<li><a href=\"https://www.bloomberg.com/graphics/2024-college-return-on-investment/\">The Big Take: For Ivy League Rejects, Public Schools Are Next-Best Bet</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1852\">.NET Rocks: Going Full Time on Open Source with Shaun Walker</a></li>\n<li><a href=\"https://www.npr.org/2024/04/01/1197963517/dupont-chemours-chemicals-cows\">The Indicator: Can breaking the law be good for business?</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/linda-haviv.html\">Coffee &amp; Open Source: Linda Haviv</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://defector.com/if-you-love-podcasts-dump-spotify\">If You Love Podcasts, Dump Spotify</a> - <em>Alex Sujong Laughlin</em></li>\n</ul>\n<hr />\n<h2>Longform</h2>\n<ul>\n<li><a href=\"https://texashighways.com/culture/people/one-mans-quest-to-transform-the-west-texas-desert/\">Green Acres</a> - <em>Wes Ferguson</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/i-want-to-elevate-more-people/\">I want to elevate more people with Piccalilli Links</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Chuck Ragan - The Boat</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/DtJVfMHOSyU\" title=\"Chuck Ragan - The Boat\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/04/12/what-i-learned-focus-visible/",
      "url": "https://kpwags.com/posts/2024/04/12/what-i-learned-focus-visible/",
      "title": "What I Learned: CSS :focus-visible",
      "content_html": "\n\t\t<p>I’ve been aware of <code>:focus-visible</code> for a little while now, but haven’t really dug into some of its details. I’ve noticed that browsers have their default behavior and I’ve just left them do their thing without adjusting the focus CSS. Of late, I’ve been digging into accessibility a lot more both for work and my own knowledge and have now finally dug more into <code>:focus-visible</code>.</p>\n<p>I remember finding the <code>:focus</code> pseudo class a long time ago back when I was first getting into web development. I seem to recall not liking how it looked and likely turned it off. Thankfully, I’ve learned a lot since then and don’t do that anymore. The <code>:focus-visible</code> pseudo class came about to provide a better balance to how browsers indicate elements have focus depending on how it interprets the user is navigating the page.</p>\n<p>To put it succinctly, the browser handles focus differently depending on whether the user is navigating the site with a finger or a mouse, or if the user is using their keyboard.</p>\n<p>MDN has <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\">good information on it</a>. Thankfully it’s relatively simple to use too.</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">input:focus-visible</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token property\">outline</span><span class=\"token punctuation\">:</span> 4px solid red<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-12T19:31:05Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/04/09/ai-enters-the-job-screening-game/",
      "url": "https://kpwags.com/posts/2024/04/09/ai-enters-the-job-screening-game/",
      "title": "AI Enters the Job Screening Game",
      "content_html": "\n\t\t<p>I was recently listening to the <a href=\"https://www.marketplace.org/\">Marketplace</a> podcast and they had an article about those annoying pre-employment personality screening some companies put their candidates through. Now <a href=\"https://www.marketplace.org/2024/04/08/tech-is-supercharging-pre-employment-personality-tests/\">Artificial Intelligence is getting involved</a>. Hoo boy I have thoughts.</p>\n<p>It’s been a little while since I’ve been on the hunt for a job and as I’m sure many can relate, it’s a soul sucking process. All the rejections, all the hoops that we often have to jump through for the different applications, it’s incredibly stressful. Now companies are adding more personality tests to make it even more aggravating.</p>\n<p>I get that it can be difficult and expensive for companies to hire the right candidate, but ugh, why do some have to make the process even more maddening.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/71/",
      "url": "https://kpwags.com/reading-log/71/",
      "title": "Reading Log - April 8, 2024 (#71)",
      "content_html": "\n\t\t<p>I can't believe that Gmail is 20 years old now.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://dbushell.com/2024/03/10/css-button-styles-you-might-not-know/\">CSS Button Styles You Might Not Know</a> - <em>David Bushell</em></li>\n<li><a href=\"https://thathtml.blog/2024/03/superpowered-container-style-queries/\">Add Superpowers to Your CSS Variables with Style Queries</a> - <em>Jared White</em></li>\n<li><a href=\"https://frontendmasters.com/blog/what-you-need-to-know-about-modern-css-spring-2024-edition/\">What You Need to Know about Modern CSS</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://brucelawson.co.uk/2024/drive-by-accessibility-tweaks/\">Drive-by accessibility tweaks</a> - <em>Bruce Lawson</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://semaphoreci.com/blog/flaky-react\">Flaky Tests In React: Detection, Prevention and Tools</a> - <em>Victor Ayomipo &amp; Tomas Fernandez</em></li>\n<li><a href=\"https://gomakethings.com/dont-modernize-your-code-just-for-the-heck-of-it/\">Don't modernize your code just for the heck of it</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://www.theverge.com/2024/4/2/24119342/xz-utils-linux-backdoor-attempt\">How one volunteer stopped a backdoor from exposing Linux systems worldwide</a> - <em>Amrita Khalid</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.insidehook.com/internet/gmail-launched-2024\">Gmail Launched 20 Years Ago Today. Why Isn’t It Better?</a> - <em>Kirk Miller</em></li>\n<li><a href=\"https://www.theregister.com/2024/03/27/inapp_browsers/\">In-app browsers are still a privacy, security, and choice problem</a> - <em>Thomas Claburn</em></li>\n<li><a href=\"https://arstechnica.com/information-technology/2024/04/redis-license-change-and-forking-are-a-mess-that-everybody-can-feel-bad-about/\">Redis’ license change and forking are a mess that everybody can feel bad about</a> - <em>Kevin Purdy</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Bellyache</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/2sZ1wXDA8zA\" title=\"Spanish Love Songs - Bellyache\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/04/05/what-i-learned-integration-testing-blazor/",
      "url": "https://kpwags.com/posts/2024/04/05/what-i-learned-integration-testing-blazor/",
      "title": "What I Learned: Integration Testing Blazor Apps with bUnit",
      "content_html": "\n\t\t<p>I wrote last month about <a href=\"https://kpwags.com/posts/2024/03/15/what-i-learned-unit-testing-blazor-bunit/\">unit testing in Blazor with bUnit</a>. What I didn’t think of at the time was whether bUnit and the same methodology could be used for integration tests as well. Turns out, it can.</p>\n<h2>A Quick Introduction to Integration Testing</h2>\n<p>For those who might not be aware, integration tests are where you go about testing the system as a whole rather than the individual pieces. Unit tests are good to make sure that the method you’re testing works as expected, whereas integration tests are good for testing how the different methods work together.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/lPGVH8mZ3E-600.webp 600w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/lPGVH8mZ3E-600.gif 600w\" /><img alt=\"A triangle with end to end test at the top, integration tests in the middle, and unit tests on the bottom\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/lPGVH8mZ3E-600.jpeg\" width=\"600\" height=\"447\" /></picture></p>\n<p>This diagram is good to describe a good testing structure for developers. Unit tests are generally the most common as they run faster. Projects have fewer Integration tests as can take longer because they will generally interact with actual services rather than mocks or test doubles like unit tests. End to end (E2E) tests are rare and fewer as they will often take much longer to run as they test the entire system.</p>\n<h2>Integration Testing with bUnit</h2>\n<p>One of the difference when compared to unit tests is that integration tests should try to use as much of the full services as possible. This means that they will need to access the dependencies your Blazor app uses. This means that they need to be injected into the tests. You can certainly add them to each test class, but there’s also my preferred way which is to create your own <code>TestContext</code> class that inherits bUnit’s <code>TestContext</code> class.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">Bunit</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">BlazorApp<span class=\"token punctuation\">.</span>Tests</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BlazorAppTestContext</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">TestContext</span></span>\n<span class=\"token punctuation\">{</span>\n\tServices<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">AddScoped</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>IRepository<span class=\"token punctuation\">,</span> Repository<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\tServices<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">AddScoped</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>IAuthService<span class=\"token punctuation\">,</span> AuthService<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Then for your tests, you just need to have them inherit the <code>BlazorAppTestContext</code> class rather than the <code>TestContext</code> class.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ManageUserTests</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">BlazorAppTestContext</span></span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span></span><span class=\"token punctuation\">]</span>\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">ManageUsers_PageLoad_UsersAreListed</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> manageUsersPage <span class=\"token operator\">=</span> <span class=\"token generic-method\"><span class=\"token function\">RenderComponent</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>ManageUsers<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> users <span class=\"token operator\">=</span> manageUsersPage<span class=\"token punctuation\">.</span><span class=\"token function\">FindAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"table.users tr\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\tAssert<span class=\"token punctuation\">.</span><span class=\"token function\">Equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span> users<span class=\"token punctuation\">.</span>Count<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span></span><span class=\"token punctuation\">]</span>\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">ManageUsers_UserClicksResetPassword_UserIsSentPasswordReset</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> manageUsersPage <span class=\"token operator\">=</span> <span class=\"token generic-method\"><span class=\"token function\">RenderComponent</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>ManageUsers<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> users <span class=\"token operator\">=</span> manageUsersPage<span class=\"token punctuation\">.</span><span class=\"token function\">Find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"button.reset-password[data-user='1']\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> alert <span class=\"token operator\">=</span> manageUsersPage<span class=\"token punctuation\">.</span><span class=\"token function\">WaitForElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"div.alert.success\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\talert<span class=\"token punctuation\">.</span>InnerHtml<span class=\"token punctuation\">.</span><span class=\"token function\">MarkupMatches</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Reset password email sent\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>In the above test, we can imagine a manage users grid that uses the <code>Repository</code> dependency to list the users, and then the <code>AuthService</code> dependency to reset the password. In an integration test, the repository could use the same dependencies that your actual app uses which can make integration testing easier to know that your tests are working as close to how the actual app runs.</p>\n<p>This is overly simplified for demonstration purposes, but it’s nice to know the <a href=\"https://bunit.dev/index.html\">bUnit</a> library can work well across the different test types and use cases.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-05T13:25:43Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/04/02/march-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/04/02/march-2024-check-in/",
      "title": "March 2024 Check-In",
      "content_html": "\n\t\t<p>March was a very quiet month for me. There really wasn’t much of anything to note. I lead a mostly boring life which I do believe is a good thing.</p>\n<h2>Hobby Scheduling</h2>\n<p>I mentioned this last month, but I’ve bee following the <a href=\"https://kpwags.com/posts/2024/02/08/scheduling-my-hobbies/\">schedule</a> I set out to try to help balance what I focus on. It’s been going mostly well. I’ve made good progress on my story and am almost at 30,000 words. I’ve made good progress on my league management web app. I also have been able to get some TV &amp; gaming time in. Halo was <a href=\"https://kpwags.com/posts/2024/03/26/some-thoughts-on-the-halo-tv-series/\">interesting</a>, I enjoyed <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect</a>, started its sequel, and have gotten back into Road to the Show in <a href=\"https://theshow.com/\">MLB the Show 24</a>.</p>\n<h2>Work Project</h2>\n<p>The project I’ve been working on in Blazor has been going well. I’m learning a lot between both my side projects and at work and am liking the developer tools for it. I’ve also gotten better at bringing in tests using the <a href=\"https://bunit.dev/\">bUnit library</a>.</p>\n<h2>Fitness</h2>\n<p>Lifting has been somewhat sporadic which I’m trying to correct in April. It was partly the cause of the increased walking in March. The infrequency of lifting caused leg soreness which pushed me more towards walking over runs. I’m hoping as the weather gets nicer, I can balance exercise out more.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 18.41 miles ⬆️</li>\n<li><strong>Walking:</strong> 19.83 miles ⬆️</li>\n<li><strong>Biking:</strong> 0 miles ➡️</li>\n<li><strong>Lifting:</strong> 95,061 lbs. ⬆️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/books/salem-s-lot/9780307743671\">Salem’s Lot</a> by Stephen King</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/starship-troopers-robert-a-heinlein/15024441?ean=9780441014101\">Starship Troopers</a> by Robert A. Heinlein</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/11-22-63-stephen-king/7060372?ean=9781451627299\">11/22/63</a> by Stephen King</li>\n<li>Started <a href=\"https://bookshop.org/p/books/the-stand-stephen-king/8197596?ean=9780307947307\">The Stand</a> by Stephen King</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/66/\">March 4 (#66)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/67/\">March 11 (#67)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/68/\">March 18 (#68)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/69/\">March 25 (#69)</a></li>\n</ul>\n</li>\n<li>What I Learned\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/03/01/what-i-learned-test-doubles/\">Test Doubles</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/03/08/what-i-learned-blazor-eventcallback/\">EventCallback in Blazor</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/03/15/what-i-learned-unit-testing-blazor-bunit/\">Unit Testing Blazor with bUnit</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/03/22/what-i-learned-blazor-auth-server-prerendering/\">Blazor Auth with Server Side Rendering</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/03/31/what-i-learned-csharp-alias/\">C# Aliases</a></li>\n</ul>\n</li>\n<li>Wrote about an <a href=\"https://kpwags.com/posts/2024/03/11/sms-spam-and-an-idea-for-apple-and-google/\">idea for Apple and Google to tackle SMS spam</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/03/19/email-is-where-its-at/\">how I wish email was more in fashion</a></li>\n<li>Wrote <a href=\"https://kpwags.com/posts/2024/03/26/some-thoughts-on-the-halo-tv-series/\">some thoughts on the Halo TV series</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2024/03/27/how-i-built-a-spoiler-web-component/\">how I built a spoiler control for my blog</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Completed <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect</a></li>\n<li>Started <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect 2</a></li>\n<li>Started <a href=\"https://theshow.com/\">MLB 24 The Show</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished Season 2 of <a href=\"https://www.imdb.com/title/tt2934286/\">Halo</a></li>\n<li>Finished Season 1 of <a href=\"https://www.imdb.com/title/tt15439048/\">Death and Other Details</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt5056196/\">Catch-22</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt3460252/\">The Hateful Eight</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-02T20:13:49Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/70/",
      "url": "https://kpwags.com/reading-log/70/",
      "title": "Reading Log - April 1, 2024 (#70)",
      "content_html": "\n\t\t<p>A little light this week. I saw some amazing shots of the black hole at the center of the Milky Way, helpful tips for designing for older adults, a new attack vector for the iPhone, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2024/expose-platform-apis-over-wrapping-them/\">Expose Platform APIs Over Wrapping Them</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://humanwhocodes.com/blog/2024/03/javascript-engines-runtimes/\">What's the difference between JavaScript engines and JavaScript runtimes?</a> - <em>Nicholas C. Zakas</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.smashingmagazine.com/2024/02/guide-designing-older-adults/\">A Guide To Designing For Older Adults</a> - <em>Vitaly Friedman</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2024/03/an-architect-is-not-evangelist.html\">An architect is not an evangelist</a> - <em>Bart Wullems</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/security/2024/03/mfa-fatigue-attack-targets-iphone-owners-with-endless-password-reset-prompts/\">“MFA Fatigue” attack targets iPhone owners with endless password reset prompts</a> - <em>Kevin Purdy</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2024/03/event-horizon-telescope-captures-stunning-new-image-of-milky-ways-black-hole/\">Event Horizon Telescope captures stunning new image of Milky Way’s black hole</a> - <em>Jennifer Ouellette</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/03/27/for-aspiring-ceos-being-a-buyer-rather-than-a-founder-is-an-increasingly-attractive-path/\">For aspiring CEOs, being a buyer rather than a founder is an increasingly attractive path</a> - <em>Kai Ryssdal &amp; Sarah Leeson</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/06/20/1183194275/the-countdown-to-end-wwii\">Fresh Air: The Countdown To End WWII</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Fireflies (Acoustic)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bFsjl38EV2c\" title=\"Dave Hause - Fireflies (Acoustic)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-04-01T20:47:46Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/31/what-i-learned-csharp-alias/",
      "url": "https://kpwags.com/posts/2024/03/31/what-i-learned-csharp-alias/",
      "title": "What I Learned: C# Aliases",
      "content_html": "\n\t\t<p>One of the neat features .NET 8 &amp; C# 12 brought is the ability to<a href=\"https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/using-alias-types\"> alias types</a>.</p>\n<p>I had heard about this briefly in the road leading up to .NET 8’s release back in November but had quickly forgotten about it. Recently I found my first use for them.</p>\n<p>The use I found for them was basically to make a tuple a little easier to use.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">var</span> <span class=\"token punctuation\">(</span>latitude<span class=\"token punctuation\">,</span> longitude<span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">GetGeolocationAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">decimal</span> latitude<span class=\"token punctuation\">,</span> <span class=\"token keyword\">decimal</span> longitude<span class=\"token punctuation\">)</span><span class=\"token punctuation\">></span></span> <span class=\"token function\">GetGeolocationAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>becomes</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token class-name\">Geolocation</span> <span class=\"token operator\">=</span> <span class=\"token class-name\"><span class=\"token punctuation\">(</span><span class=\"token keyword\">decimal</span> latitude<span class=\"token punctuation\">,</span> <span class=\"token keyword\">decimal</span> longitude<span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> geolocation <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">GetGeolocationAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>Geolocation<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetGeolocationAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>For objects and types used throughout your application, it makes more sense to create actual classes for these types. But for tuples used within a class, it just provides a quick and easy way to define them without having to type all them out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-31T14:46:44Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/27/how-i-built-a-spoiler-web-component/",
      "url": "https://kpwags.com/posts/2024/03/27/how-i-built-a-spoiler-web-component/",
      "title": "How I Built a Spoiler Web Component for My Site",
      "content_html": "\n\t\t<p>Every once in a while I like writing about a video game I’m playing, a movie or TV show I watched. I’m often a little behind things nowadays, but even so, I try to be careful as to not spoil it for anyone reading who might not have watched the latest episode or have gotten that far into the game yet.</p>\n<p>One of the nice features of Mastodon, is the ability to put things behind a content warning. But while it can certainly be used for more sensitive matters, it can also be used for spoilers, providing people the ability to discuss the latest TV episode or whatnot, without having to worry about ruining it for someone else, as the original post, and all the replies go behind the filter.</p>\n<p>This is basically what I was looking to do for my site. And what do you know, web components make it easy, especially with 11ty.</p>\n<p>I created a <code>webc</code> file called <code>spoilers.webc</code>.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>spoiler secret<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>warning<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span>Warning<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>This may contain spoilers. Reader beware.<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>show-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Show Content<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>slot</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>slot</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>In it, I set up 2 main content areas. The top one with the <code>.warning</code> CSS class, and the other with the <code>.content</code> CSS class. The <code>&lt;slot&gt;&lt;/slot&gt;</code> indicates to the component where the content I want to initially hide goes.</p>\n<p>The next step was setting up the styling.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span> <span class=\"token attr-name\"><span class=\"token namespace\">webc:</span>keep</span><span class=\"token punctuation\">></span></span><span class=\"token style\"><span class=\"token language-css\">\n\t<span class=\"token selector\">.spoiler .warning</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">border</span><span class=\"token punctuation\">:</span> 1px solid <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--primary-color-3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">background</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--shaded-background<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 3rem 0<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler .warning h2</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 2rem<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler .warning button</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 4px 20px<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">cursor</span><span class=\"token punctuation\">:</span> pointer<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler.secret .content,\n\t.spoiler.shown .warning</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler.shown .content</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler.secret</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block<span class=\"token punctuation\">;</span>\t\n\t\t<span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 100%<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>I styled the warning div to look nice with the content.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/xBFU9BzSq7-830.webp 830w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/xBFU9BzSq7-830.gif 830w\" /><img alt=\"A screenshot of my spoiler control warning users clicking to continue could spoil things\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/xBFU9BzSq7-830.png\" width=\"830\" height=\"369\" /></picture></p>\n<p>The important lines are:</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">.spoiler.secret .content,\n.spoiler.shown .warning</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.spoiler.shown .content</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Here, I’m telling the browser, when the <code>.secret</code> class is applied to the <code>.spoiler</code> div, do not show the content, but when the <code>.secret</code> class is removed, and the <code>.shown</code> class is added, hide the warning, and show the content.</p>\n<p>The final piece was adding the JavaScript. I would’ve preferred to not use JavaScript, but I don’t know how to do this without JS. If you have an idea, let me know! Thankfully, we don’t need much.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token operator\">&lt;</span>script webc<span class=\"token operator\">:</span>keep<span class=\"token operator\">></span>\n\twindow<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'load'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">const</span> showButton <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'button.show-content'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>showButton<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\tshowButton<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token keyword\">const</span> spoilerDiv <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'div.spoiler'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\tspoilerDiv<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token string\">'secret'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\tspoilerDiv<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'shown'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>script<span class=\"token operator\">></span></code></pre>\n<p>The JavaScript isn’t terribly complicated. When the window loads, I look for the  button using its query selector <code>button.show-content</code>. I then attach an event handler for the <code>click</code> event to find the parent div <code>div.spoiler</code> to remove the <code>.secret</code> class and add the <code>.shown</code> class. This will cause the warning to disappear and the content to appear in its place.</p>\n<p>Then, to use it in a blog post, I had to configure the <a href=\"https://www.11ty.dev/docs/plugins/render/\">render plugin</a>. This is needed since I write my posts in markdown to be rendered using the Liquid syntax. Once that was configured, the final step is to use it.</p>\n<pre class=\"language-markdown\" tabindex=\"0\"><code class=\"language-markdown\">{% renderTemplate \"webc\" %}\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>spoiler</span><span class=\"token punctuation\">></span></span>\n\tPsst...this is a spoiler!\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>spoiler</span><span class=\"token punctuation\">></span></span>\n{% endrenderTemplate %}</code></pre>\n<h2>Limitations</h2>\n<p>The biggest limitation of this as it stands now is that it’s really limited to one per page. For my intents and purposes, that’s fine. If it ever comes up for me that I need more, I’ll revisit it and maybe find a way to put a unique ID on the controls.</p>\n<h2>The Final Component</h2>\n<p>In case you want it for your own uses, here’s the final code.</p>\n<div class=\"code-block-filename\">spoiler.webc</div>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>spoiler secret<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>warning<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span>Warning<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>This may contain spoilers. Reader beware.<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>show-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Show Content<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>slot</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>slot</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span> <span class=\"token attr-name\"><span class=\"token namespace\">webc:</span>keep</span><span class=\"token punctuation\">></span></span><span class=\"token style\"><span class=\"token language-css\">\n\t<span class=\"token selector\">.spoiler .warning</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">border</span><span class=\"token punctuation\">:</span> 1px solid <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--primary-color-3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">background</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--shaded-background<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 3rem 0<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler .warning h2</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 2rem<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler .warning button</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 4px 20px<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token property\">cursor</span><span class=\"token punctuation\">:</span> pointer<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler.secret .content,\n\t.spoiler.shown .warning</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler.shown .content</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token selector\">.spoiler.secret</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block<span class=\"token punctuation\">;</span>\t\n\t\t<span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 100%<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\"><span class=\"token namespace\">webc:</span>keep</span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n\twindow<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'load'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">const</span> showButton <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'button.show-content'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>showButton<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\tshowButton<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token keyword\">const</span> spoilerDiv <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'div.spoiler'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\tspoilerDiv<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token string\">'secret'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\tspoilerDiv<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'shown'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-27T22:39:06Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/26/some-thoughts-on-the-halo-tv-series/",
      "url": "https://kpwags.com/posts/2024/03/26/some-thoughts-on-the-halo-tv-series/",
      "title": "Some Thoughts on the Halo TV Series",
      "content_html": "\n\t\t<p>This past weekend I binged the second season of Halo. I had seen the first season a while back when it first came out, and now that season 2 was out, I opted to re-watch season 1 and then started season 2. I have thoughts.</p>\n<p>Beware before clicking through, there are spoilers ahead.</p>\n<p><spoiler><div class=\"spoiler-warning\">\n<h2>\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-label=\"warning icon\">\n<path d=\"M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.15.15 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.2.2 0 0 1-.054.06.1.1 0 0 1-.066.017H1.146a.1.1 0 0 1-.066-.017.2.2 0 0 1-.054-.06.18.18 0 0 1 .002-.183L7.884 2.073a.15.15 0 0 1 .054-.057m1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767z\"></path>\n<path d=\"M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z\"></path>\n</svg>\nWarning\n</h2>\n<p>This may contain spoilers. Reader beware.</p></div></spoiler></p>\n\n<details>\n\t<summary><span>View Content</span></summary>\n<h2>Overall Thoughts</h2>\n<p>I don’t hate it.</p>\n<p>That basically sums up my over-arching thoughts on the TV series.</p>\n<h2>Makee &amp; The Arbiter</h2>\n<p>No. Honestly, no. I didn’t get her character in season 1, and season 2 didn’t change that at all. The Covenant make more sense in the game without her. You have the Elites leading the charge against Master Chief and humanity. The story doesn’t need her...at all.</p>\n<p>The Arbiter being killed by the Chief does not line up with the story from the games either, but can probably be forgiven. The lore around the Arbiter could allow another Elite to take his place anyway. I also don’t know how far Paramount is going to take the Halo TV series. It might not last long enough to bring about Thel 'Vadam becoming the Arbiter like the beginning of Halo 2.</p>\n<h2>The Fall of Reach</h2>\n<p>Before the video game <a href=\"https://www.xbox.com/en-us/games/store/Halo-REACH/9NLGW5MXWKJ6\">Halo: Reach</a> came out, the book talked about it. But it was supposed to be a massive battle between the Covenant and humanity. Humanity had put their base on Reach and it was the center of their power. The TV series kind of matched it being the base of humanity, but passed on the battle, making it more of an evacuation than anything else. It was disappointing to not have any kind of massive fleet battle, even something more toned down. It kind of felt like they didn’t really truly acknowledge the scope of the loss.</p>\n<h2>The Introduction of the Flood</h2>\n<p>This is kind of the biggest bummer for me. One of the best levels of Halo was <em>343 Guilty Spark</em> where the Flood are first introduced. Bungie spent a lot of time on that level and it was a great introduction of one of the toughest enemies in the game. It was creepy, and it was a neat twist in the game.</p>\n<p>I didn’t make the following video, and did miss several of the details mentioned, but I feel like the TV series missed a golden opportunity to include the Covenant as part of the Flood reveal.</p>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/oeTcVWmNXbI\" title=\"Every Horrifying Detail You Missed In 343 Guilty Spark\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n<h2>Landing on the Ring Itself</h2>\n<p>Master Chief, Makee, and the Arbiter are the ones who first land on what is presumed to be Installation 04, the first Halo Ring. The ring and its environment are beautiful and a great match to the game. At the end of the show, it looks like you have both the human fleet and the Covenant fleet setting down to land troops.</p>\n<p>I think I like the game’s landing better where you have a lone human ship, <em>The Pillar of Autumn</em> (crash) landing on the ring with the Covenant hot on their tail. It sort of sets it up as Master Chief and the remnants of a ship’s force versus one of the most dangerous Covenant armies led by Thel ‘Vadam. It also makes the idea of Halo as a weapon more powerful in my opinion by introducing the thought of desperation on the side of the humans.</p>\n<h2>Acknowledging Differences</h2>\n<p>I’ll just finish with this. I recognize that this is a TV series and that there are going to be some differences between the TV series and the game. I mean bringing the fall of Reach in makes sense for the series. And if they matched the series to the game, you wouldn’t have seen John until season 3 as he wasn’t in Halo: Reach. So even that aside, I recognize that changes are going to happen.</p>\n<p>You can call me a curmudgeon, but I’m just not sure the level of changes, the introduction of Makee &amp; Kwan Ha, and all the other changes make the series as enjoyable as I had hoped.</p>\n<p>Even so, I am hoping that Season 3 gets made and we finally see some action on the Halo installation.</p>\n</details>\n<style>\n\t.spoiler-warning {\n\t\tborder: 1px solid var(--red);\n\t\tpadding: 12px;\n\t\ttext-align: center;\n\t\tborder-radius: 4px;\n\t}\n\n\t.spoiler-warning h2 {\n\t\tfont-size: 2rem;\n\t\tcolor: var(--red);\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t}\n\n\t.spoiler-warning h2::before {\n\t\tdisplay: none;\n\t}\n\n\t.spoiler-warning h2 svg {\n\t\tfill: var(--red);\n\t\theight: 24px;\n\t\twidth: 24px;\n\t}\n\n\t.spoiler-warning p {\n\t\tfont-size: 1.1rem;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\tdetails {\n\t\tmargin: 24px 0;\n\t}\n\n\tdetails summary {\n\t\tfont-size: 1.2rem;\n\t\tmargin-bottom: 16px;\n\t}\n\n\tdetails summary span {\n\t\tpadding-left: 16px;\n\t}\n</style>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-26T22:55:29Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/69/",
      "url": "https://kpwags.com/reading-log/69/",
      "title": "Reading Log - March 25, 2024 (#69)",
      "content_html": "\n\t\t<p>It's a little light this week, but heavy on free speaech and the internet.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.thomasclaudiushuber.com/2024/03/19/csharp-12-collection-expressions/\">C# 12: Collection Expressions</a> - <em>Thomas Claudius Huber</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/the-box-model-and-box-sizing/\">The box model and box sizing</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2024/03/romero-doesnt-like-prototypes/\">John Romero doesn’t believe in prototypes</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/03/25/judge-slams-elon-musk-for-filing-vexatious-slapp-suit-against-critic-calling-out-how-it-was-designed-to-suppress-speech/\">Judge Slams Elon Musk For Filing Vexatious SLAPP Suit Against Critic, Calling Out How It Was Designed To Suppress Speech</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://stratechery.com/2024/united-states-v-apple/\">United States v. Apple</a> - <em>Ben Thompson</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.buzzsprout.com/2315966/14747842-murthy-reddit-and-the-speech-deciders\">Ctrl-Alt-Speech: Murthy, Reddit, and the Speech Deciders</a></li>\n<li><a href=\"https://www.buzzsprout.com/2315966/14698023-the-global-internet-or-is-it\">Ctrl-Alt-Speech: The Global Internet - Or Is It?</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/americas-news-deserts-and-the-2024-election/\">Make Me Smart #1121: America’s news deserts and the 2024 election</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - Rivers</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/FemHTHUAzZA\" title=\"Frank Turner - Rivers\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/22/what-i-learned-blazor-auth-server-prerendering/",
      "url": "https://kpwags.com/posts/2024/03/22/what-i-learned-blazor-auth-server-prerendering/",
      "title": "What I Learned: Blazor Auth with Server Side Pre-Rendering",
      "content_html": "\n\t\t<p>As I’ve mentioned, I’ve been working a lot with Blazor at work and one of the issues I ran into was supporting authentication and user sessions while still supporting server side pre-rendering on certain pages.</p>\n<p>When handling the user session, I would be putting the session key into session storage using Microsoft’s protected session store library. This would require using JavaScript which isn’t available during initialization on pre-rendered pages and components.</p>\n<p>After batting my head around this for a while, I stumbled upon a <a href=\"https://stackoverflow.com/questions/74135273/how-to-handle-authentication-in-blazor-application-with-prerendering-enabled\">Stack Overflow post</a> that gave me my solution, albeit, not the greatest one, but one that so far seems to be working well enough.</p>\n<p>Let’s look back at my <a href=\"https://kpwags.com/posts/2023/07/31/blazor-custom-authentication/\">old post about custom auth in Blazor</a>. More specifically the <code>GetAuthenticationStateAsync</code> method.</p>\n<div class=\"code-block-filename\">CustomAuthenticationStateProvider.cs</div>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">override</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>AuthenticationState<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAuthenticationStateAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> identity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> userId <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">GetItemAsync</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>userId <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _userManager<span class=\"token punctuation\">.</span><span class=\"token function\">FindByIdAsync</span><span class=\"token punctuation\">(</span>userId<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>user <span class=\"token keyword\">is</span> <span class=\"token keyword\">not</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\tidentity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\t\t\t<span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UserAccountId\"</span><span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Id<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Email<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Email <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t\t\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n\t\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"CardOrgAuth\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t\t<span class=\"token keyword\">else</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token comment\">// can't find the user, kill the session</span>\n\t\t\t<span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token function\">RemoveItemAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">AuthenticationState</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsPrincipal</span><span class=\"token punctuation\">(</span>identity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The issue I ran into was on the line where I would pull the user ID from session storage.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> userId <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">GetItemAsync</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This would require Blazor executing JavaScript which isn’t available, so the page would crash. The solution or workaround for this, while not elegant, is to wrap the check in a try-catch statement.</p>\n<div class=\"code-block-filename\">CustomAuthenticationStateProvider.cs</div>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">override</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>AuthenticationState<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAuthenticationStateAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> identity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">try</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> userId <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">GetItemAsync</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>userId <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _userManager<span class=\"token punctuation\">.</span><span class=\"token function\">FindByIdAsync</span><span class=\"token punctuation\">(</span>userId<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>user <span class=\"token keyword\">is</span> <span class=\"token keyword\">not</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n\t\t\t<span class=\"token punctuation\">{</span>\n\t\t\t\tidentity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\t\t\t\t<span class=\"token punctuation\">{</span>\n\t\t\t\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UserAccountId\"</span><span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Id<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t\t\t\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Email<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Email <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t\t\t\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n\t\t\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"CardOrgAuth\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span>\n\t\t\t<span class=\"token keyword\">else</span>\n\t\t\t<span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token comment\">// can't find the user, kill the session</span>\n\t\t\t\t<span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token function\">RemoveItemAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token keyword\">catch</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">AuthenticationState</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsPrincipal</span><span class=\"token punctuation\">(</span>identity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The next step is to go into the layout and add the following code.</p>\n<div class=\"code-block-filename\">MainLayout.razor</div>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">AuthenticationStateProvider AuthStateProvider</span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span><span class=\"token punctuation\">></span></span>\n\t...\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">protected</span> <span class=\"token keyword\">override</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">OnAfterRenderAsync</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">bool</span></span> firstRender<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n    \t<span class=\"token keyword\">await</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>CustomAuthenticationStateProvider<span class=\"token punctuation\">)</span>AuthStateProvider<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">GetAuthenticationStateAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>In the <code>OnAfterRenderAsync</code> lifecycle method, JavaScript can be utilized, so the user session can be fetched and the pages, even those with pre-rendering turned on will load correctly.</p>\n<p>It might not be the most elegant solution or even one that is preferred, but it has been working for me so far.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/19/email-is-where-its-at/",
      "url": "https://kpwags.com/posts/2024/03/19/email-is-where-its-at/",
      "title": "Email Is Where It&#39;s At",
      "content_html": "\n\t\t<p>When I started my job at WebstaurantStore back in December of 2020, I was introduced to using Microsoft Teams as the primary method of digital communication. Having used email as the primary method at almost all of my previous jobs, 3 years in, I’m beginning to agree with the sentiment that maybe email is the better option.</p>\n<p>Instant messaging, which is essentially what Teams (and Slack) allow for certainly has its uses, but sometimes I feel like the instant part is an issue. All too often we’re expected to get right back to whoever direct messaged you, or tagged you in a channel. This can make it so hard to keep your focus. There are times where I just want to mark myself away and put my head down and code, but there’s often the pressure to either not do that or the expectation that you don’t.</p>\n<p>Email on the other hand doesn’t seem to have that same “immediate” response expectation. It often feels like when you send an email, if you get a response back in an hour or two you’re happy, and within a business day is good too. It feels like a more happy medium. I can check my email periodically throughout the day and respond as needed. Granted because of Teams, my email inbox is mostly just random alerts and nothing that I really have to respond to...🤷🏼‍♂️</p>\n<p>Now, this doesn’t mean I’m advocating for ignoring your coworkers. That certainly won’t work either no matter the platform be it Teams/Slack, Email, phone or messenger pigeons. I do think it would be a good thing to loosen expectations of the timeframe in which you should have to respond. Basically what I’m asking for is let me get to a good stopping point or a good place to pause and I’ll get back to you.</p>\n<p>I’ll also admit there are times where I realize I’m getting annoyed at people not responding to me “fast enough”. I can be just as guilty about it and I sometimes have to remind myself I can wait and that patience is a virtue. Very rarely am I ever involved in work that has to be done <em><strong>NOW</strong></em>. Granted, on those rare occasions, everyone’s around and ready to move on whatever the next step is.</p>\n<p>At the end of the day, it’s about companies and people setting realistic and practical expectations. It’s about recognizing that for some, a ping at the wrong time can get someone out of their flow state, so while they might be “available”, their status is still set to busy. Having patience and understanding goes a long way...and so does email.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/68/",
      "url": "https://kpwags.com/reading-log/68/",
      "title": "Reading Log - March 18, 2024 (#68)",
      "content_html": "\n\t\t<p>A bunch of articles about accessibility, Congress making a mis-step with TikTok, a podcast about the history of the NFL, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://a11ymyths.com/\">Accessibility Myths</a> - <em>Sergei Kriger</em></li>\n<li><a href=\"https://piccalil.li/blog/solution-009-progress-indicator/\">Front-End solution: progress indicator</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://joshcollinsworth.com/blog/devaluing-frontend\">The quiet, pervasive devaluation of frontend</a> - <em>Josh Collinsworth</em></li>\n<li><a href=\"https://nolanlawson.com/2023/01/17/my-talk-on-css-runtime-performance/\">My Talk on CSS Runtime Performance</a> - <em>Nolan Lawson</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://heather-buchel.com/blog/2024/03/letters-to-an-accessibility-advocate/\">A letter to my younger self, as an accessibility advocate</a> - <em>Heather Buchel</em></li>\n<li><a href=\"https://jamesg.blog/2024/02/28/beginners-mind-empathy/\">Beginner's mind and empathy in writing educational content</a> - <em>James’ Coffee Blog</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://brandonwrites.xyz/blog-what-you-like/\">Blog What You Like</a> - <em>Brandon</em></li>\n<li><a href=\"https://ohhelloana.blog/just-get-a-website/\">You don't have to be a “content creator” to have a website.</a> - <em>Ana Rodrigues</em></li>\n<li><a href=\"https://tedium.co/2024/02/28/wordpress-automattic-tumblr-controversy/\">When Stewards Go Astray</a> - <em>Ernie Smith</em></li>\n<li><a href=\"https://birchtree.me/blog/the-browser-company-feels-gross-to-me-right-now/\">The Browser Company feels gross to me right now</a> - <em>Matt Birchler</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/03/14/once-more-with-feeling-banning-tiktok-is-unconstitutional-wont-do-shit-to-deal-with-any-actual-threats/\">Once More With Feeling: Banning TikTok Is Unconstitutional &amp; Won’t Do Shit To Deal With Any Actual Threats</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2024/03/11/once-more-with-feeling-banning-tiktok-doesnt-do-much-if-we-dont-regulate-data-brokers-and-pass-a-privacy-law/\">Once More With Feeling: Banning TikTok Doesn’t Do Much If We Don’t Regulate Data Brokers And Pass A Privacy Law</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/03/finally-engineers-have-a-clue-that-could-help-them-save-voyager-1/\">Finally, engineers have a clue that could help them save Voyager 1</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://joanwestenberg.com/blog/how-startup-culture-runs-on-bullshit\">How startup culture runs on bullshit.</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/5293529/2024/02/29/ray-davis-nfl-draft-kentucky-vanderbilt/\">Ray Davis grew up homeless, now he seeks to be a ‘name you’ll remember forever’</a> - <em>Zac Keefer</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.acquired.fm/episodes/the-nfl\">Acquired: The NFL</a></li>\n<li><a href=\"https://hanselminutes.com/894/creating-the-mastodon-app-elk-as-a-progressive-web-app-with-daniel-roe\">Hanselminutes #894: Creating the Mastodon app &quot;Elk&quot; as a Progressive Web App with Daniel Roe</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://jack-vanlightly.com/blog/2022/1/25/write-for-others-but-mostly-for-yourself\">Write for others but mostly for yourself</a> - <em>Jack Vanlightly</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Rise Against - Forfeit</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/hgIDNtqAjN4\" title=\"Rise Against - Forfeit\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/15/what-i-learned-unit-testing-blazor-bunit/",
      "url": "https://kpwags.com/posts/2024/03/15/what-i-learned-unit-testing-blazor-bunit/",
      "title": "What I Learned: Unit Testing Blazor with bUnit",
      "content_html": "\n\t\t<p>At work, my current project has me using Blazor. Unfortunately that means that my tooling for unit testing the frontend and the UI no longer work for this project. <a href=\"https://testing-library.com/docs/react-testing-library/intro/\">React Testing Library</a> doesn’t work all that well with a Blazor frontend. And by that I mean it just doesn’t work. Enter <a href=\"https://bunit.dev/\">bUnit</a>.</p>\n<p>bUnit is a library and a set of tools to allow you to test the UI portion of your Blazor. It integrates nicely with xUnit which makes it ideal for my uses as xUnit is my go to for .NET testing. (It integrates with NUnit and MSTest too!)</p>\n<p>Frontends need to be unit tested just as much as the backend code, so it’s a good idea to make sure that they’re included in your test suites.</p>\n<p>Let’s go through an example. Let’s say you have a component that allows you to output several words in different languages. This component has a header to indicate the current language, an output div for the outputted words, and two buttons to output “hello” and “goodbye” in the specified language.</p>\n<p>The component might be written something like this:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token operator\">&lt;</span>section <span class=\"token keyword\">class</span><span class=\"token operator\">=</span><span class=\"token string\">\"language-box\"</span><span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>@Language<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span>div <span class=\"token keyword\">class</span><span class=\"token operator\">=</span><span class=\"token string\">\"output\"</span><span class=\"token operator\">></span>@_output<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span>div <span class=\"token keyword\">class</span><span class=\"token operator\">=</span><span class=\"token string\">\"actions\"</span><span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token class-name\">button</span>\n      type<span class=\"token operator\">=</span><span class=\"token string\">\"button\"</span>\n      data<span class=\"token operator\">-</span>testid<span class=\"token operator\">=</span><span class=\"token string\">\"hello-button\"</span>\n      @onclick<span class=\"token operator\">=</span>\"@<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">OutputWord</span><span class=\"token punctuation\">(</span>WordDesired<span class=\"token punctuation\">.</span>Hello<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token operator\">></span>\n      Say Hello\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token class-name\">button</span>\n      type<span class=\"token operator\">=</span><span class=\"token string\">\"button\"</span>\n      data<span class=\"token operator\">-</span>testid<span class=\"token operator\">=</span><span class=\"token string\">\"goodbye-button\"</span>\n      @onclick<span class=\"token operator\">=</span>\"@<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">OutputWord</span><span class=\"token punctuation\">(</span>WordDesired<span class=\"token punctuation\">.</span>Goodbye<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token operator\">></span>\n      Say Goodbye\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>section<span class=\"token operator\">></span>\n\n@code <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> _output <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n  <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Parameter</span></span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Language <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">enum</span> <span class=\"token class-name\">WordDesired</span> <span class=\"token punctuation\">{</span>\n    Hello<span class=\"token punctuation\">,</span>\n    Goodbye\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">private</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">OutputWord</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">WordDesired</span> word<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>word<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">case</span> WordDesired<span class=\"token punctuation\">.</span>Hello<span class=\"token punctuation\">:</span>\n        _output <span class=\"token operator\">=</span> <span class=\"token function\">GetHello</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">case</span> WordDesired<span class=\"token punctuation\">.</span>Goodbye<span class=\"token punctuation\">:</span>\n        _output <span class=\"token operator\">=</span> <span class=\"token function\">GetGoodbye</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">private</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> <span class=\"token function\">GetHello</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>Language<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">\"French\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Bonjour\"</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">\"German\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Hallo\"</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">\"Spanish\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Hola\"</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">default</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Hello\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">private</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> <span class=\"token function\">GetGoodbye</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>Language<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">\"French\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Au revoir\"</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">\"German\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Auf Wiedersehen\"</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">case</span> <span class=\"token string\">\"Spanish\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Adios\"</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">default</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Goodbye\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Now we need to test it. We should make sure it outputs the correct words depending on what language we want. Let’s write the test file. If you’ve ever used xUnit, it should be relatively familiar.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">LanguageBoxTests</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">TestContext</span></span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span></span><span class=\"token punctuation\">]</span>\n  <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> LanguageBox_GermanHello_OutputsHallo\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// render the component, passing \"German\" as the language parameter</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> languageBox <span class=\"token operator\">=</span> <span class=\"token generic-method\"><span class=\"token function\">RenderComponent</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>LanguageBox<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span>parameters <span class=\"token operator\">=></span> parameters\n      <span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Language<span class=\"token punctuation\">,</span> \"German<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token comment\">// find the \"Say Hello\" button and click it</span>\n    languageBox<span class=\"token punctuation\">.</span><span class=\"token function\">Find</span><span class=\"token punctuation\">(</span>\"button<span class=\"token punctuation\">[</span>data<span class=\"token operator\">-</span>testid<span class=\"token operator\">=</span>'hello<span class=\"token operator\">-</span>button'<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Click</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token comment\">// find div containing the output</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> outputDiv <span class=\"token operator\">=</span> languageBox<span class=\"token punctuation\">.</span><span class=\"token function\">Find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"div.output\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token comment\">// check to make sure the markup matches what we expect</span>\n    outputDiv<span class=\"token punctuation\">.</span><span class=\"token function\">MarkupMatches</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;div class=\\\"output\\\">Hallo&lt;/div>\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>What this test does is render the component in memory as if we put the following into a Blazor component</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token operator\">&lt;</span><span class=\"token class-name\">LanguageBox</span> Language<span class=\"token operator\">=</span><span class=\"token string\">\"German\"</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span></code></pre>\n<p>We assigned it to the <code>languageBox</code> variable. This will allow us to use the <code>.Find()</code> method to find elements within the component by using CSS selectors. It’s the equivalent of JavaScript’s <code>querySelector</code> function.</p>\n<p>Above, the first time we use <code>.Find(&quot;button[data-testid='hello-button'])</code>, we are telling the test to find the button that has the attribute <code>data-testid</code> with the value “hello-button”. Appending the <code>.Click()</code> method means we want to then have the test click the button.</p>\n<p>The second time we use <code>.Find()</code> we are telling it to find the div that contains the output. We then use the <code>MarkupMatches</code> method to verify that the markup is what we’d expect. We expect the “Say Hello” button to output “Hallo”. The one catch with this is that when you check the markup, it will also include the full HTML tag as well. If the div had a lot of classes or attributes on it, it’d be a lot to check. It would also mean we’d have to update this test if we changed any of the styling or the like. It could get annoying real fast.</p>\n<p>One trick I’ve learned which can be useful is to use the <code>MarkupMatches()</code> on the element’s inner HTML. So we could change the final line of the test to be:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">outputDiv<span class=\"token punctuation\">.</span>InnerHtml<span class=\"token punctuation\">.</span><span class=\"token function\">MarkupMatches</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hallo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>With this, we don’t care how we’ve styled its container, we just make sure that the translation is correctly outputted to the page.</p>\n<p>I’m still digging into more of the inner workings of bUnit, but so far I’ve found it to be a great tool to add tests to Blazor. If you’re a developer using Blazor, I’d recommend you checking it out and reading the <a href=\"https://bunit.dev/docs/getting-started/index.html\">documentation</a> to see how you can add tests to your code.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/quiet-pervasive-devaluation-of-frontend/",
      "url": "https://kpwags.com/notes/quiet-pervasive-devaluation-of-frontend/",
      "title": "The Quiet, Pervasive Devaluation of Frontend",
      "content_html": "\n\t\t<blockquote>\n<p>But despite all these claims, CSS is also somehow “not a real programming language.” Many people online will tell you so, often quite loudly, and sometimes even using memes. Same with HTML.</p>\n</blockquote>\n<p>Sadly I understand where Josh is coming from.</p>\n<p>Becoming better with CSS is something I really want to do. I want to improve my skills there and slowly I think I am.</p>\n<p>Shame on anyone who thinks that creating amazing, beautiful, and accessible layouts with HTML &amp; CSS is “easy” or should be devalued.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/a-letter-to-my-younger-self-accessibility/",
      "url": "https://kpwags.com/notes/a-letter-to-my-younger-self-accessibility/",
      "title": "A letter to my younger self, as an accessibility advocate",
      "content_html": "\n\t\t<blockquote>\n<p>It's the getting people to understand the organizational changes needed to address them that is the hard part. It's a lot of time convincing people of things that have been documented for years. It's a lot of time spent educating people on things you learned 1, 5, 10 year(s) ago</p>\n</blockquote>\n<p>I’ve been working on a new project at work and thankfully the team is on board in making sure it’s accessible. But I’ve been on the other side of it as well. It can be hard to make people recognize the extra work to ensure accessibility is both necessary and the right thing to do.</p>\n<p>And I’ll also admit that I haven’t always put accessibility where it needs to be and have in the past skipped out on it. I’ve been trying to make sure that’s no longer the case.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/11/sms-spam-and-an-idea-for-apple-and-google/",
      "url": "https://kpwags.com/posts/2024/03/11/sms-spam-and-an-idea-for-apple-and-google/",
      "title": "SMS Spam and an Idea for Apple and Google",
      "content_html": "\n\t\t<p>Last week, leading up to Joe Biden’s State of the Union Address, I probably received close to 3 dozen text messages from various political groups asking me what I think of Biden, if I was going to watch his speech, and who knows what else. I’m really starting to get sick of these messages and with the 2024 election season kicking off, it’s going to get worse.</p>\n<p>So I have an idea for Apple or Google, add processing rules for text messages. I would love to be able to create a rule that says “If the message comes from a number not in my contacts that contains the word ’Biden’, delete the message.” It annoys the living bejeezus out of me that I keep getting all these messages and have no way of blocking en masse. Every message is from a new number and every time I have to go in, block the number and then delete the message, reporting it as junk.</p>\n<p>It would be amazing to not be bothered by political cranks or anyone else that might constantly spam my messages inbox. I try to keep text messaging limited to friends and the like. I always make sure to opt out of all SMS messaging opting for email. While this wouldn’t absolve carriers to continue fighting the scammers and spammers, it would at least help us users to filter out what we clearly don’t want to reach our inbox.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/67/",
      "url": "https://kpwags.com/reading-log/67/",
      "title": "Reading Log - March 11, 2024 (#67)",
      "content_html": "\n\t\t<p>A little light this week, but I read about color spaces, uses of <code>:has</code>, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/code-coverage-features-in-visual-studio-enterprise/\">Code coverage features in Visual Studio Enterprise</a> - <em>Faisal Hafeez</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://ericportis.com/posts/2024/okay-color-spaces/\">Okay, Color Spaces</a> - <em>Eric Portis</em></li>\n<li><a href=\"https://piccalil.li/blog/some-little-ways-im-using-css-has-in-the-real-world/\">Some little ways I’m using CSS :has() in the real world</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/3/5/24091043/euro-ncap-safety-rating-europe-2026-touchscreen-buttons-dials\">Cars will need fewer screens and more buttons to earn 5-star safety rating in Europe</a> - <em>Jess Weatherbed</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2024/03/shields-up-new-ideas-might-make-active-shielding-viable/\">Shields up: New ideas might make active shielding viable</a> - <em>Jacek Krywko</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/03/05/as-young-consumers-drink-less-brands-and-bars-offer-more-and-better-alternatives/\">As young consumers drink less, brands and bars offer more and better alternatives</a> - <em>Savannah Maher</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/03/05/techdirt-podcast-episode-382-checking-in-on-bluesky-with-jay-graber/\">Techdirt Podcast #382: Checking In On Bluesky With Jay Graber</a></li>\n<li><a href=\"https://www.npr.org/2024/03/05/1197962791/sec-climate-rule-corporate-emissions-esg-investing\">The Indicator: How the SEC's new rule could reveal more about a company's emissions</a></li>\n<li><a href=\"https://www.npr.org/2024/02/28/1197958355/school-fundraisers\">Planet Money: The secret world behind school fundraisers and turning kids into salespeople</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>A Perfect Circle - Judith</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/xTgKRCXybSM\" title=\"A Perfect Circle - Judith\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/08/what-i-learned-blazor-eventcallback/",
      "url": "https://kpwags.com/posts/2024/03/08/what-i-learned-blazor-eventcallback/",
      "title": "What I Learned: EventCallback in Blazor",
      "content_html": "\n\t\t<p>Of late, I’ve been using .NET 8 and Blazor at both work and on my league management side project. One thing that I often need to do is pass data between components. Passing data from a parent component to a child component isn’t terribly difficult with parameters. Passing data from a child to a parent isn’t quite as straightforward.</p>\n<p>One way to handle passing data is using <code>EventCallback</code>. This allows a child component to expose an event notifying the parent component. Let’s take a look at where and how this can be used.</p>\n<p>Let’s say I wanted to add membership levels to my site. (Don’t worry, I’m definitely not going to do that.)</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/bhCIIDzAVm-2154.webp 2154w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/bhCIIDzAVm-2154.gif 2154w\" /><img alt=\"A wireframe showing cards to choose your membership level\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/bhCIIDzAVm-2154.jpeg\" width=\"2154\" height=\"1668\" /></picture></p>\n<p>I could write the HTML to define the membership level cards 3 times, but the smarter way would be to make each card a component.</p>\n<p>First, let’s assume we have an enum called <code>MembershipLevel</code>.</p>\n<div class=\"code-block-filename\">Constants.cs</div>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">enum</span> <span class=\"token class-name\">MembershipLevel</span>\n<span class=\"token punctuation\">{</span>\n  Normal<span class=\"token punctuation\">,</span>\n  Plus<span class=\"token punctuation\">,</span>\n  Pro<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Let’s build the component.</p>\n<div class=\"code-block-filename\">MembershipCard.razor</div>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token operator\">&lt;</span>div <span class=\"token keyword\">class</span><span class=\"token operator\">=</span><span class=\"token string\">\"card\"</span><span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span>h2<span class=\"token operator\">></span>@Name<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h2<span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span>div <span class=\"token keyword\">class</span><span class=\"token operator\">=</span><span class=\"token string\">\"reaction\"</span><span class=\"token operator\">></span>@Emoji<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span><span class=\"token class-name\">button</span> type<span class=\"token operator\">=</span><span class=\"token string\">\"button\"</span> @onclick<span class=\"token operator\">=</span><span class=\"token string\">\"ChooseMembershipLevel\"</span><span class=\"token operator\">></span>Choose<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n\n@code <span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Parameter</span></span><span class=\"token punctuation\">]</span>\n  <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Name <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n  <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Parameter</span></span><span class=\"token punctuation\">]</span>\n  <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Emoji <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n  <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Parameter</span></span><span class=\"token punctuation\">]</span>\n  <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">MembershipLevel</span> Level <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n  <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Parameter</span></span><span class=\"token punctuation\">]</span>\n  <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">EventCallback<span class=\"token punctuation\">&lt;</span>MembershipLevel<span class=\"token punctuation\">></span></span> OnSelection <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">ChooseMembershipLevel</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">await</span> OnSelection<span class=\"token punctuation\">.</span><span class=\"token function\">InvokeAsync</span><span class=\"token punctuation\">(</span>Level<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see, each card takes 4 parameters. The name of the level, the emoji to display, the <code>MembershipLevel</code> enum, and the <code>EventCallback</code> for when the choose button is clicked.</p>\n<p>When you define the <code>EventCallback</code>, you can either call it with a type (<code>EventCallback&lt;T&gt;</code>) to have it send data or without (<code>EventCallback</code>) to have it act like a <code>void</code> function. In our membership card case, we want to send the membership level chosen so we can have the parent component act on that choice.</p>\n<p>You can only pass a single object back to the parent component, but it can be any object such as an <code>int</code>, <code>string</code>, or even a tuple. I’d recommend against relying too much on tuples for this though as they can get rather unwieldy quick. If you need multiple values, I’d suggest putting them into a class or a struct.</p>\n<p>The parent component would look like this:</p>\n<div class=\"code-block-filename\">Membership.razor</div>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">@page <span class=\"token string\">\"/membership\"</span>\n\n<span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>Choose Membership<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span>\n\n<span class=\"token operator\">&lt;</span><span class=\"token class-name\">MembershipCard</span>\n  Name<span class=\"token operator\">=</span><span class=\"token string\">\"Normal\"</span>\n  Emoji<span class=\"token operator\">=</span><span class=\"token string\">\"🙂\"</span>\n  Level<span class=\"token operator\">=</span><span class=\"token string\">\"@MembershipLevel.Normal\"</span>\n  OnSelection<span class=\"token operator\">=</span><span class=\"token string\">\"ChooseMembership\"</span>\n<span class=\"token operator\">/</span><span class=\"token operator\">></span>\n\n<span class=\"token operator\">&lt;</span><span class=\"token class-name\">MembershipCard</span>\n  Name<span class=\"token operator\">=</span><span class=\"token string\">\"Plus\"</span>\n  Emoji<span class=\"token operator\">=</span><span class=\"token string\">\"😀\"</span>\n  Level<span class=\"token operator\">=</span><span class=\"token string\">\"@MembershipLevel.Plus\"</span>\n  OnSelection<span class=\"token operator\">=</span><span class=\"token string\">\"ChooseMembership\"</span>\n<span class=\"token operator\">/</span><span class=\"token operator\">></span>\n\n<span class=\"token operator\">&lt;</span><span class=\"token class-name\">MembershipCard</span>\n  Name<span class=\"token operator\">=</span><span class=\"token string\">\"Pro\"</span>\n  Emoji<span class=\"token operator\">=</span><span class=\"token string\">\"🤩\"</span>\n  Level<span class=\"token operator\">=</span><span class=\"token string\">\"@MembershipLevel.Pro\"</span>\n  OnSelection<span class=\"token operator\">=</span><span class=\"token string\">\"ChooseMembership\"</span>\n<span class=\"token operator\">/</span><span class=\"token operator\">></span>\n\n@code <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">ChooseMembership</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">MembershipLevel</span> level<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// do something now that you know their choice</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see with each component, we have the <code>OnSelection</code> event callback tied to the <code>ChooseMembership</code> function on the parent component. When a user clicks one of the buttons, the enum gets passed back to the <code>ChooseMembership</code> function and we can then do something, most likely send them to the next part in the process.</p>\n<p>I created a <a href=\"https://gist.github.com/kpwags/6ce6178a8da37c45a9fe20b3e4a09d71\">GitHub Gist</a> for you to see all the code.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/what-is-utility-first-css/",
      "url": "https://kpwags.com/notes/what-is-utility-first-css/",
      "title": "What is Utility-First CSS?",
      "content_html": "\n\t\t<blockquote>\n<p>Utility-first detractors complain a lot about how verbose this is and, consequently, how ugly. And it is indeed. But you’d forgive it that if it actually solved a problem, which it doesn’t. It is unequivocally an inferior way of making things which _are_alike <em>look</em> alike, as you should. It is and can only be useful for reproducing <em>inconsistent</em> design, wherein all those repeated values would instead differ.</p>\n</blockquote>\n<p>I've certainly built some utility classes is CSS and I believe they certainly have a place. Using them for the just about everything is not my preferred way of doing things and would recommend against it.</p>\n<blockquote>\n<p>It turns out, people in tech are particularly bad at distinguishing between paradigm shifts and paradigm <em>sharts</em>. That’s why we have nose-diving cryptocurrencies, dust-collecting monkey JPEG portfolios, and AI-generated children’s books teaching kids about pink, two-headed dinosaurs that never existed.</p>\n</blockquote>\n<p>Truer words have never been spoken.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/falsehoods-juniors-believe-about-seniors/",
      "url": "https://kpwags.com/notes/falsehoods-juniors-believe-about-seniors/",
      "title": "Falsehoods Junior Developers believe about becoming Senior",
      "content_html": "\n\t\t<blockquote>\n<p>These are mostly my thoughts about what I was expecting as a junior and how I perceived senior developers. To be honest, I was romanticizing them quite a bit — senior developers were the people who could solve all the problems, constantly told me what to do, and knew all the answers.</p>\n</blockquote>\n<p>I <em><strong>wish</strong></em> I had all the answers, that would make my life so much easier. 17 years in the work force and I'm learning something new every day.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/66/",
      "url": "https://kpwags.com/reading-log/66/",
      "title": "Reading Log - March 4, 2024 (#66)",
      "content_html": "\n\t\t<p>This week is a little CSS-heavy. Also we look at Automattic, the owner of Tumblr &amp; Wordpress being problematic, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://piccalil.li/blog/the-path-to-becoming-a-publisher/\">The path to becoming a publisher</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://heydonworks.com/article/what-is-utility-first-css/\">What is Utility-First CSS?</a> - <em>Heydon Pickering</em></li>\n<li><a href=\"https://chriscoyier.net/2024/02/28/where-im-at-on-the-whole-css-tricks-thing/\">Where I’m at on the whole CSS-Tricks thing</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://codersblock.com/blog/playing-with-infinity-in-css/\">Playing with Infinity in CSS</a> - <em>Will Boyd</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://michaelscodingspot.com/typescript-api-change/\">Changing TypeScript library functions while keeping backwards compatibility</a> - <em>Michael Shpilt</em></li>\n<li><a href=\"https://vadimkravcenko.com/shorts/falsehoods-junior-developers-believe-about-becoming-senior/\">Falsehoods Junior Developers believe about becoming Senior</a> - <em>Vadim Kravcenko</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2024/zero-to-unmaintainable/\">Zero to Unmaintainable in 1.2 Commands</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/2/27/24084884/tumblr-midjourney-openai-training-data-deal-report\">Tumblr’s owner is striking deals with OpenAI and Midjourney for training data, says report</a> - <em>Adi Robertson</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/a-pitchers-view-on-the-tommy-john-epidemic\">A Pitcher’s View On The Tommy John “Epidemic”</a> - <em>John Wholestaff</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://harpers.org/archive/2024/02/getting-the-pump-jordan-castro/\">Getting the Pump</a> - <em>Jordan Castro</em></li>\n<li><a href=\"https://www.npr.org/sections/health-shots/2024/03/03/1234460368/red-meat-diet-plant-protein-carbon-footprint\">This diet swap can cut your carbon footprint and boost longevity</a> - <em>Allison Aubrey</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jason Isbell and the 400 Unit – When We Were Close</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/cF141kKZ-nc\" title=\"Jason Isbell and the 400 Unit – When We Were Close\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/03/february-2024-checkin/",
      "url": "https://kpwags.com/posts/2024/03/03/february-2024-checkin/",
      "title": "February 2024 Check-In",
      "content_html": "\n\t\t<p>February wasn't a bad month. It did seem to go by a little quickly though.</p>\n<h2>New Work Project</h2>\n<p>At work, the new project has started. I was originally going to write it in React &amp; TypeScript, but requirements have changed slightly, and I'll be writing it in <a href=\"https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor\">Blazor</a> instead. I've been working with Blazor at home on my league management side project and have been wanting to become more familiar with it, so this is a pretty sweet deal for me. I did end up having to throw some code out as I had already started in React, but a lot of the styling and HTML markup will translate over just about perfectly.</p>\n<h2>Trip to Hershey</h2>\n<p>Towards the end of the month, Lauren and I went out to Hershey again. We spent a long weekend checking out some of the local breweries and distilleries. We had some good food, we had some good drink, and we had a good time. The weather was even nice for the end of February.</p>\n<p>Also, at <a href=\"https://www.yahbrewco.com/home\">Yah Brew</a>, I got to have a Strawberry Swirl Push Pop Sour, which did not look anything like a beer, but it was delicious all the same. Maybe one day I'll figure out how to brew it.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/oEu0y4ONBO-800.webp 800w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/oEu0y4ONBO-800.gif 800w\" /><img alt=\"A Strawberry Swirl Push Pop Sour from Yah Brew in a funky looking glass. The beer is pink.\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/oEu0y4ONBO-800.jpeg\" width=\"800\" height=\"810\" /></picture></p>\n<h2>Hobby Scheduling</h2>\n<p>At the beginning of the month, I decided to try something new. I have a bunch of things I'd like to work on this year and am often trying to balance my time between them. So I decided I'd try <a href=\"https://kpwags.com/posts/2024/02/08/scheduling-my-hobbies/\">scheduling them</a>. In reality, it's more just assigning different days to work on different things. I've been spending my Mondays and Fridays on my side project, Tuesdays and Thursdays on writing, Wednesdays on TV &amp; video games, and weekends as whatever I want to do.</p>\n<p>I've generally done a good job on focusing my side projects and writing, but Wednesdays have devolved from TV &amp; video games, to also whatever I want to work on. I've spent Wednesdays writing, and working on my side projects, but I think that's okay. It's giving me time to focus on what I want to work on and I think part of it is helping me feel like I'm not neglecting one thing over the other.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> 17.8 miles ⬆️</li>\n<li><strong>Walking:</strong> 5.89 miles ⬆️</li>\n<li><strong>Biking:</strong> 0 miles ➡️</li>\n<li><strong>Lifting:</strong> 82,166 lbs. ⬇️</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/parallel-programming-and-concurrency-with-c-10-and-net-6-a-modern-approach-to-building-faster-more-responsive-and-asynchronous-net-applications-alvin-/18757208?ean=9781803243672\">Parallel Programming and Concurrency with C# and .NET 6</a> by Alvin Ashcraft</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/sea-of-tranquility-emily-st-john-mandel/17768221?ean=9780593466735\">Sea of Tranquility</a> by Emily St. John Mandel</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/pragmatic-test-driven-development-in-c-and-net-write-loosely-coupled-documented-and-high-quality-code-with-ddd-using-familiar-tools-and-libraries/18917559?ean=9781803230191\">Pragmatic Test-Driven Development in C# and .NET</a> by Adam Tibi</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/catch-22-joseph-heller/7060234?ean=9781451626650\">Catch-22</a> by Joseph Heller</li>\n<li>Started <a href=\"https://bookshop.org/p/books/catch-22-joseph-heller/7060234?ean=9781451626650\">Salem's Lot</a> by Stephen King</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/62/\">February 5 (#62)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/63/\">February 12 (#63)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/64/\">February 19 (#64)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/65/\">February 26 (#65)</a></li>\n</ul>\n</li>\n<li><a href=\"https://kpwags.com/posts/2024/02/02/what-i-learned-linq-deferred-execution/\">What I Learned LINQ Deferred Query Execution</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/08/scheduling-my-hobbies/\">Scheduling My Hobbies</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/09/what-i-learned-html-dialog/\">What I Learned: HTML Dialog</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/09/starting-with-test-driven-development/\">Starting with Test-Driven Development</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/13/i-love-seeing-more-personal-sites/\">I Love Seeing More Personal Sites</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/15/finishing-a-game-and-then-sadness/\">Finishing a Game and then Sadness...</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/15/mozilla-needs-to-focus-on-firefox/\">Mozilla Needs to Focus on Firefox</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/16/what-i-learned-react-strict-mode/\">What I Learned: React Strict Mode</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/22/lunchtime-exercise/\">Lunchtime Exercise</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/23/what-i-learned-blazor-web-api-gotcha/\">What I Learned: HTTP GET Requests in Blazor with a .NET Web API &amp; MediatR Gotcha</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/02/28/keeping-my-phone-out-of-the-bedroom/\">Keeping My Phone Out of the Bedroom</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect</a></li>\n</ul>\n<p><strong>📺 TV</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0141842/\">The Sopranos</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt15439048/\">Death and Other Details</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li>Watched <a href=\"https://www.imdb.com/title/tt1077368/\">Dark Shadows</a></li>\n<li>Started, but Couldn't Finish <a href=\"https://www.imdb.com/title/tt17351924/\">Saltburn</a></li>\n<li>Watched <a href=\"https://www.imdb.com/title/tt0104952\">My Cousin Vinny</a></li>\n<li>Watched <a href=\"https://www.imdb.com/title/tt2911666/\">John Wick</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/react-getting-a-kicking/",
      "url": "https://kpwags.com/notes/react-getting-a-kicking/",
      "title": "It feels like React is getting a bit of a kicking recently",
      "content_html": "\n\t\t<blockquote>\n<p>I don’t like the fact that libraries like React are so heavily used, but over the years, I’ve grown more empathetic about the decision by teams to use them. The web platform doesn’t currently give us all the tools we might need, but I’m hopeful it will in the longer term. I also get that people can’t wait for that and need to get moving, so libraries service their needs better than the web platform currently does.</p>\n</blockquote>\n<p>Definitely agree here. For bigger &amp; more complicated projects, libraries can provide a lot of help to get it off the ground quickly. Necessary, no, but from a practical perspective I get it. Managers and higher ups don't necessarily always care about what is best, they care about the bottom line and having something to ship.</p>\n<blockquote>\n<p>All I would say is finding the lowest-tech solution and leaning into browser capabilities as much as possible is a good way to build something resilient and reliable.</p>\n</blockquote>\n<p>Completely agree, if you can avoid over-complicating your builds with libraries and sticking with HTML &amp; CSS, go for it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/03/01/what-i-learned-test-doubles/",
      "url": "https://kpwags.com/posts/2024/03/01/what-i-learned-test-doubles/",
      "title": "What I Learned: Test Doubles",
      "content_html": "\n\t\t<p>I recently read an article by Steve Dunn, <a href=\"https://dunnhq.com/posts/2024/prefer-test-doubles-over-mocking/\">Prefer test-doubles over mocking frameworks</a> and it got me reconsidering some of my unit testing strategies.</p>\n<h2>Mocking</h2>\n<p>With .NET unit tests, most of the time I would end up writing mocks for the test's dependencies. Here's an example using the Moq libary. This is for my <a href=\"https://github.com/kpwags/digital-family-cookbook\">Digital Family Cookbook project</a> and the test can be found <a href=\"https://github.com/kpwags/digital-family-cookbook/blob/main/backend/tests/DigitalFamilyCookbook.Tests/Handlers/Queries/Meats/GetAllMeatsTests.cs\">here</a></p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span></span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">ItSuccessfullyReturnsAllMeats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> meats <span class=\"token operator\">=</span> MockMeat<span class=\"token punctuation\">.</span><span class=\"token function\">GenerateMeatList</span><span class=\"token punctuation\">(</span><span class=\"token number\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> meatRepository <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Mock<span class=\"token punctuation\">&lt;</span>IMeatRepository<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\tmeatRepository\n\t\t<span class=\"token punctuation\">.</span><span class=\"token function\">Setup</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span><span class=\"token function\">GetAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">.</span><span class=\"token function\">Returns</span><span class=\"token punctuation\">(</span>meats<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> handler <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">GetAllMeats<span class=\"token punctuation\">.</span>Handler</span><span class=\"token punctuation\">(</span>meatRepository<span class=\"token punctuation\">.</span>Object<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> handler<span class=\"token punctuation\">.</span><span class=\"token function\">Handle</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">GetAllMeats<span class=\"token punctuation\">.</span>Query</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">CancellationToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\tAssert<span class=\"token punctuation\">.</span><span class=\"token function\">Equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">6</span><span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>Value<span class=\"token punctuation\">?.</span>Count<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This is a test to make sure the Get All Meats handler properly returns the correct number of meats.</p>\n<p>The mock repository object is defined as follows.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> meatRepository <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Mock<span class=\"token punctuation\">&lt;</span>IMeatRepository<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nmeatRepository\n\t<span class=\"token punctuation\">.</span><span class=\"token function\">Setup</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span><span class=\"token function\">GetAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">.</span><span class=\"token function\">Returns</span><span class=\"token punctuation\">(</span>meats<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>It basically sets up the repository to return the random meat list I created in the test setup.</p>\n<p>This is fine, and for a simple test, it can probably be considered &quot;good enough&quot;. But for more complicated methods, dealing with mocks can get troublesome fast.</p>\n<p>Let's change it to use test doubles instead. Let’s take a quick look at the <code>IMeatRepository</code> interface</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">IMeatRepository</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token return-type class-name\">Meat</span> <span class=\"token function\">Get</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> meatId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token return-type class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Meat</span> meat<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">Update</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Meat</span> meat<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Delete</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> meatId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token return-type class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetForRecipe</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> recipeId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>It’s a relatively simple interface. Just some CRUD (Create, Read, Update, Delete) methods. Let’s create a new implementation to use as a test double for it.</p>\n<p>The first thing we want to do is create a list of meats to use as the “database”. I’ll create 5 meats, that should be enough to test with.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestingMeatRepository</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IMeatRepository</span></span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">List<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> _meats <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Beef\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Chicken\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Pork\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Fish\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Vegetarian\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Now let’s add the methods.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestingMeatRepository</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IMeatRepository</span></span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">List<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> _meats <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Beef\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Chicken\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Pork\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Fish\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span> <span class=\"token punctuation\">{</span> MeatId <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Vegetarian\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">Meat</span> <span class=\"token function\">Get</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> meatId<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> meat <span class=\"token operator\">=</span> _meats<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span>MeatId <span class=\"token operator\">==</span> meatId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>meat <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Meat not found\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\n\t\t<span class=\"token keyword\">return</span> meat<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">return</span> _meats<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Meat</span> meat<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>_meats<span class=\"token punctuation\">.</span><span class=\"token function\">Select</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Contains</span><span class=\"token punctuation\">(</span>meat<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Meat already exists\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\n\t\t<span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Meat</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\tMeatId <span class=\"token operator\">=</span> <span class=\"token number\">7</span><span class=\"token punctuation\">,</span>\n\t\t\tName <span class=\"token operator\">=</span> meat<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">Update</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Meat</span> meat<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>_meats<span class=\"token punctuation\">.</span><span class=\"token function\">Any</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> meat<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> m<span class=\"token punctuation\">.</span>MeatId <span class=\"token operator\">!=</span> meat<span class=\"token punctuation\">.</span>MeatId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Meat already exists\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\n\t\t<span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span>meat<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Delete</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> meatId<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>_meats<span class=\"token punctuation\">.</span><span class=\"token function\">Select</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span>MeatId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Contains</span><span class=\"token punctuation\">(</span>meatId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Meat not found\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\n\t\t<span class=\"token keyword\">return</span> Task<span class=\"token punctuation\">.</span>CompletedTask<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Meat<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetForRecipe</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> recipeId<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">return</span> _meats<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">=></span> m<span class=\"token punctuation\">.</span>MeatId <span class=\"token operator\">==</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see, I've added all the methods and this can act as a double for the database for the tests.</p>\n<p>So now let's revisit the test.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Fact</span></span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">ItSuccessfullyReturnsAllMeats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> meats <span class=\"token operator\">=</span> MockMeat<span class=\"token punctuation\">.</span><span class=\"token function\">GenerateMeatList</span><span class=\"token punctuation\">(</span><span class=\"token number\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> meatRepository <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">TestingMeatRepository</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> handler <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">GetAllMeats<span class=\"token punctuation\">.</span>Handler</span><span class=\"token punctuation\">(</span>meatRepository<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> handler<span class=\"token punctuation\">.</span><span class=\"token function\">Handle</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">GetAllMeats<span class=\"token punctuation\">.</span>Query</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">CancellationToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\tAssert<span class=\"token punctuation\">.</span><span class=\"token function\">Equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>Value<span class=\"token punctuation\">?.</span>Count<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Instead of having to mock the repository for each test, and adjust as requirements might change, we can now just use this test double instead.</p>\n<p>This test repository can be used for multiple tests and it would be more stable for the tests when needed.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-03-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/28/keeping-my-phone-out-of-the-bedroom/",
      "url": "https://kpwags.com/posts/2024/02/28/keeping-my-phone-out-of-the-bedroom/",
      "title": "Keeping My Phone Out of the Bedroom",
      "content_html": "\n\t\t<p>Last week, I decided to try something new and make a move to keep my cell phone out of the bedroom.</p>\n<p>I had heard of the idea a while back and while intrigued, shrugged it off. Over the last couple weeks I’ve thought about it a little more and realized I might be attached to my phone a little more than I’d like. In the morning I would lay in bed for longer than I’d care to admit scrolling mindlessly through my phone. I decided I didn’t like that.</p>\n<p>So, I went and bought myself an old-fashioned alarm clock and plopped it on my bedside table, moving my iPhone/Watch charger into my office.</p>\n<p>It’s now been a week having switched to an alarm clock. I’ve hit snooze on my alarm clock less than I would when using my phone, I’m getting out of bed sooner, and I’m not spending my mornings glued to my phone.</p>\n<p>I'm not certain it's going to affect all that much with regards to phone use, I still am on it more than I want, but it's a start and hopefully it will help.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/65/",
      "url": "https://kpwags.com/reading-log/65/",
      "title": "Reading Log - February 26, 2024 (#65)",
      "content_html": "\n\t\t<p>Another landing on the moon, a good guide to CSS :has(), more dangerous news about KOSA, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://ishadeed.com/article/css-has-guide/\">CSS :has() Interactive Guide</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/02/mobile-accessibility-barriers-assistive-technology-users/\">Mobile Accessibility Barriers For Assistive Technology Users</a> - <em>Kate Kalcevich</em></li>\n<li><a href=\"https://piccalil.li/blog/react-is-getting-a-bit-of-a-kicking-recently/\">It feels like React is getting a bit of a kicking recently</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://geoffgraham.me/css-is-logical/\">CSS is Logical</a> - <em>Geoff Graham</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://dunnhq.com/posts/2024/prefer-test-doubles-over-mocking/\">Prefer test-doubles over mocking frameworks</a> - <em>Steve Dunn</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.anildash.com//2024/02/06/wherever-you-get-podcasts/\">“Wherever you get your podcasts” is a radical statement</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://coryd.dev/posts/2024/browsing-the-mobile-web-sucks/\">Browsing the mobile web sucks</a> - <em>Cory Dransfeldt</em></li>\n<li><a href=\"https://www.theverge.com/2024/2/23/24081656/tim-burke-journalism-hacking-cfaa\">When does a journalist become a hacker?</a> - <em>Sarah Jeong</em></li>\n<li><a href=\"https://www.theverge.com/2024/2/22/24080334/bluesky-self-hosting-servers-data-federated\">Bluesky starts letting users host their own servers</a> - <em>Amrita Khalid</em></li>\n<li><a href=\"https://www.techdirt.com/2024/02/21/prominent-maga-supporter-is-worried-new-kosa-wont-suppress-enough-lgbtq-speech/\">Prominent MAGA Supporter Is Worried New KOSA Won’t Suppress Enough LGBTQ Speech</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://techcrunch.com/2024/02/21/discord-took-no-action-against-server-that-coordinated-costly-mastodon-spam-attacks/\">Discord took no action against server that coordinated costly Mastodon spam attacks</a> - <em>Amanda Silberling</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://css-irl.info/design-patterns-that-encourage-junk-data/?ref=sidebar\">Design Patterns that Encourage Junk Data</a> - <em>Michelle Barker</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2024/02/a-sun-a-day-brightest-quasar-found-yet-is-eating-a-lot/\">Newly spotted black hole has mass of 17 billion Suns, adding another daily</a> - <em>John Timmer</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/02/a-little-us-company-makes-history-by-landing-on-the-moon-but-questions-remain/\">A little US company makes history by landing on the Moon</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/02/nasa-found-the-private-lander-on-the-moon-but-its-lifetime-is-running-short/\">Odysseus has less than a day left on the Moon before it freezes to death</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/02/big-year-ahead-says-jeff-bezos-as-new-glenn-rocket-rolls-to-launch-pad/\">Jeff Bezos’ New Glenn rocket finally makes an appearance on the launch pad</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li>\n<p><a href=\"https://arstechnica.com/science/2024/02/rto-doesnt-improve-company-value-but-does-make-employees-miserable-study/\">RTO doesn’t improve company value, but does make employees miserable: Study</a> - <em>Beth Mole</em></p>\n</li>\n<li>\n<p><a href=\"https://www.theverge.com/2024/2/20/24078060/walmart-vizio-acquisition-deal\">Walmart to acquire Vizio in $2.3 billion deal</a> - <em>Tom Warren</em></p>\n</li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/02/21/techdirt-podcast-episode-381-kosa-isnt-just-wrong-about-the-internet-its-wrong-about-child-safety/\">Techdirt Podcast #381: KOSA Isn’t Just Wrong About The Internet, It’s Wrong About Child Safety</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - 1933</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/QWmnBcNijvo\" title=\"Frank Turner - 1933\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/23/what-i-learned-blazor-web-api-gotcha/",
      "url": "https://kpwags.com/posts/2024/02/23/what-i-learned-blazor-web-api-gotcha/",
      "title": "What I Learned: HTTP GET Requests in Blazor with a .NET Web API &amp; MediatR Gotcha",
      "content_html": "\n\t\t<p>The side project idea that has gained the most traction with me is the league management web application. I've spent the better part of weekend and then Monday &amp; Wednesday getting the Blazor web app communicating with the Web API I'm also building for it.</p>\n<p>The one issue I was dealing with was getting an HTTP 415 status code when I tried to perform GET requests to the API. I was trying to figure out what I was doing wrong because I was controlling both sides of things. I wrote the API calls, and the API. Certainly I should be able to figure this out.</p>\n<p>For those unaware, the <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415\">415 status code</a> means that the API is refusing the request because the payload is in the wrong format. This was confusing to me, because the API requests I was making didn't have a payload. I was just requesting a list of values to populate a dropdown with.</p>\n<p>The API Controller looked good. I was specifying that the request was a GET request.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">HttpGet</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span><span class=\"token string\">\"getsports\"</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>ActionResult<span class=\"token punctuation\">&lt;</span>IReadOnlyCollection<span class=\"token punctuation\">&lt;</span>SportApiModel<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span> <span class=\"token function\">GetSports</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">GetSports<span class=\"token punctuation\">.</span>Request</span> request<span class=\"token punctuation\">,</span> <span class=\"token class-name\">CancellationToken</span> cancellationToken<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> sports <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> mediator<span class=\"token punctuation\">.</span><span class=\"token function\">Send</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">,</span> cancellationToken<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token function\">Ok</span><span class=\"token punctuation\">(</span>sports<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I remembered I saw this when writing JavaScript and calling APIs. I went into the wrapper I wrote around the native <code>window.fetch</code> function. Sure enough, I found what fixed the error when making an API call from JavaScript.</p>\n<pre class=\"language-js\" tabindex=\"0\"><code class=\"language-js\">headers<span class=\"token punctuation\">[</span><span class=\"token string\">'Content-Type'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'application/json'</span><span class=\"token punctuation\">;</span></code></pre>\n<p>That's right, I need to add the content type to the header, it all makes sense now. Opening Postman, I was able to replicate the error, and confirm that adding the content type to the header fixed the problem. Surely adding the content type to the header from Blazor would be just as easy and solve the problem just as quickly.</p>\n<p>If only...</p>\n<p>I tried multiple methods of setting the headers, and nothing fixed the problem. No matter how I sent the API call, it returned a 415. Then, for whatever reason, I happened to consider the way I had the controller action configured.</p>\n<p>For most of the .NET APIs I build, I often use the <a href=\"https://en.wikipedia.org/wiki/Mediator_pattern\">mediator pattern</a> and will use the popular <a href=\"https://github.com/jbogard/MediatR\">MediatR library</a>.</p>\n<p>Let's take a quick look at the GetSports class and you might be able to see where the gotcha I worked myself into came from.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">GetSports</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Request</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IRequest<span class=\"token punctuation\">&lt;</span>IReadOnlyCollection<span class=\"token punctuation\">&lt;</span>SportApiModel<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span></span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Handler</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">ISportRepository</span> sportRepository<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">:</span> IRequestHandler<span class=\"token operator\">&lt;</span>Request<span class=\"token punctuation\">,</span> IReadOnlyCollection<span class=\"token operator\">&lt;</span>SportApiModel<span class=\"token operator\">>></span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>IReadOnlyCollection<span class=\"token punctuation\">&lt;</span>SportApiModel<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span> <span class=\"token function\">Handle</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Request</span> request<span class=\"token punctuation\">,</span> <span class=\"token class-name\">CancellationToken</span> cancellationToken<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> sports <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> sportRepository<span class=\"token punctuation\">.</span><span class=\"token function\">GetSportsAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token keyword\">return</span> sports<span class=\"token punctuation\">.</span><span class=\"token function\">Select</span><span class=\"token punctuation\">(</span>SportApiModel<span class=\"token punctuation\">.</span>FromDomainModel<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">ToList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>With MediatR, I have the request, which in this case is empty. I'm not passing in any parameters, I simply want to get all the available sports.</p>\n<p>The Handler class is where I perform the actual work. I have the sports repository return a list of sports from the database and then return it to the controller. This is a pretty simple request and action.</p>\n<p>The gotcha I ran into is that I was specifying that the HTTP Get request would contain a GetSports.Request object. But the controller wasn't receiving an object, it wasn't receiving anything as I wasn't passing a payload at all.</p>\n<p>I made a simple change to the controller, and everything started working as I'd expect.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">HttpGet</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span><span class=\"token string\">\"getsports\"</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>ActionResult<span class=\"token punctuation\">&lt;</span>IReadOnlyCollection<span class=\"token punctuation\">&lt;</span>SportApiModel<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span> <span class=\"token function\">GetSports</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">CancellationToken</span> cancellationToken<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> sports <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> mediator<span class=\"token punctuation\">.</span><span class=\"token function\">Send</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">GetSports<span class=\"token punctuation\">.</span>Request</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> cancellationToken<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token function\">Ok</span><span class=\"token punctuation\">(</span>sports<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>By removing the GetSports.Request from the parameters and just passing it in to MediatR, the controller was able to figure out that there wasn't anything special about the request and that it could process it.</p>\n<p>This was all self-inflicted. I made the mistake of including the request object as part of the controller method. But I figured I'd share it to hopefully help someone else not make the same mistake I did. Because in the end, I did indeed learn something, which I guess is the important part.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/22/lunchtime-exercise/",
      "url": "https://kpwags.com/posts/2024/02/22/lunchtime-exercise/",
      "title": "Lunchtime Exercise",
      "content_html": "\n\t\t<p>One of the things I enjoy about working from home, is the ability to exercise a bit over lunch. On nicer days, I'll take a walk or go for a run.</p>\n<h2>Health Benefits</h2>\n<p>I work as a software developer. It means I'm often sitting down for long stretches of time. I don't think I need to elaborate on the idea that it's not always the most healthy thing. I'll get up and move around a bit every hour or so, but I doubt that counts for much.</p>\n<p>Getting out, breathing some fresh air and getting exercise hopefully helps with keeping me healthy and counteracting some of the negatives of the long periods of sitting on my ass.</p>\n<h2>Mental Health &amp; Mood Benefits</h2>\n<p>The one thing I actually really like about these walks and runs is the mental health portion. I often find getting some exercise helps break up the day and puts me in a better mood for the afternoon. It often alleviates stress and gives me a new outlook on whatever it is I happen to be working on. I sometimes even figure out solutions to problems I've been having on those walks.</p>\n<hr />\n<p>If you have the ability to take a break for a walk or some exercise during the day, I'd recommend it. I haven't always had this ability, and I'd have a hard time saying goodbye to it if the ability goes away.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/64/",
      "url": "https://kpwags.com/reading-log/64/",
      "title": "Reading Log - February 19, 2024 (#64)",
      "content_html": "\n\t\t<p>This week it's a bit of a preview of .NET 9, KOSA getting dangerously close to passing, Xbox bringing some exclusives to PlayStation and the Switch, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://andrewlock.net/understanding-default-interface-methods/\">Understanding C# 8 default interface methods</a> - <em>Andrew Lock</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/our-vision-for-dotnet-9/\">Our Vision for .NET 9</a> - <em>.NET Team</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.zachleat.com/web/good-bad-web-components/\">The Good, The Bad, The Web Components</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://piccalil.li/blog/a-highly-configurable-switch-component-using-modern-css/\">A highly configurable switch component using modern CSS techniques</a> - <em>Andy Bell</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://tylersticka.com/journal/browsers-are-weird-right-now/\">Browsers Are Weird Right Now</a> - <em>Tyler Sticka</em></li>\n<li><a href=\"https://www.techdirt.com/2024/02/15/senator-blumenthal-pretends-to-fix-kosa-its-a-lie/\">Senator Blumenthal Pretends To Fix KOSA; It’s A Lie</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.pcloadletter.dev/blog/rss/\">RSS is still pretty great</a> - <em>pcloadletter</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/2/13/24072241/ai-patent-us-office-guidance\">US patent office confirms AI can’t hold patents</a> - <em>Emilia David</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/2/15/24073691/microsoft-xbox-games-ps5-nintendo-switch-exclusivity\">Microsoft: four Xbox-exclusive games are coming to PS5 and Nintendo Switch</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/5272804/2024/02/13/jenny-cavnar-play-by-play-broadcaster-athletics/\">A’s hire Jenny Cavnar as first female primary play-by-play announcer in MLB</a> - <em>Melissa Lockard &amp; Jenna West</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2024/02/16/1197958269/freedom-of-the-seas-houthis-yemen\">Planet Money: How the Navy came to protect cargo ships</a></li>\n<li><a href=\"https://www.techdirt.com/2024/02/13/techdirt-podcast-episode-380-how-to-actually-help-kids-online/\">Techdirt Podcast #380: How to Actually Help Kids Online</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/the-economics-of-innovation\">The New Bazaar: The Economics of Innovation</a></li>\n<li><a href=\"https://www.wnycstudios.org/podcasts/radiolabmoreperfect/episodes/clarence-x\">More Perfect: Clarence X</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://512pixels.net/projects/default-mac-wallpapers-in-5k/\">Every Default macOS Wallpaper – in Glorious 6K Resolution</a> - <em>Stephen Hackett</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jason Isbell and the 400 Unit = This Ain't It</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/LZkIpP_mIoA\" title=\"Jason Isbell and the 400 Unit = This Ain't It\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/16/what-i-learned-react-strict-mode/",
      "url": "https://kpwags.com/posts/2024/02/16/what-i-learned-react-strict-mode/",
      "title": "What I Learned: React Strict Mode",
      "content_html": "\n\t\t<p>This past week I started a new React project at work and was dealing with a weird issue with one of my components. It turns out the issue was caused by <a href=\"https://react.dev/reference/react/StrictMode\">Strict Mode</a> on React.</p>\n<p>One of the components I built looked like it was rendering twice. In my debugging of the app, I stumbled upon Strict Mode and realized that was what was causing the double rendering...kind of. What it really did was help me identify a bug in my code when I was rendering a piece of the component.</p>\n<p>One of the things Strict Mode does is cause all child components within the <code>&lt;StrictMode&gt;</code> tag to render twice. If the components are structured and built properly, this won't be an issue. But for me, where I had what is called an impure function, this second render caused me issues.</p>\n<p>Turning off Strict Mode immediately fixed the symptom of the issue I was having, but it didn't fix the underlying cause. For that I found where I wasn't properly checking to see if the one form item had loaded properly. Once I put in the additional check (that should have been there from the get-go), it worked properly.</p>\n<p>While a tad bit annoying at first, I definitely appreciate it being there as it saved me time and effort later by showing me the bug now. It saved me what would have been a hassle later. Hopefully it can save you some headaches too.</p>\n<p>Vite's React template includes Strict Mode being turned on by default. I'd suggest adding it in if you started with a different template or have removed it since.</p>\n<p>You can add it for your entire application:</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> StrictMode <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">App</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">StrictMode</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Header</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>main</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>main</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Footer</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">StrictMode</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Or only a single component, like the header:</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> StrictMode <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">App</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">StrictMode</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Header</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">StrictMode</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>main</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>main</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Footer</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>It should also be noted that the double rendering and re-running effects, and other features of Strict Mode only occur in the development environment and are not part of the production builds.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/15/mozilla-needs-to-focus-on-firefox/",
      "url": "https://kpwags.com/posts/2024/02/15/mozilla-needs-to-focus-on-firefox/",
      "title": "Mozilla Needs to Focus on Firefox",
      "content_html": "\n\t\t<p>Mozilla just recently <a href=\"https://techcrunch.com/2024/02/13/mozilla-downsizes-as-it-refocuses-on-firefox-and-ai-read-the-memo/\">announced more layoffs</a>. They're apparently scaling back on mozilla.social, its VPN and other services to focus on bringing trustworthy AI into Firefox. I really wish I knew what Mozilla was thinking.</p>\n<p>I started using Firefox back in the early days, when IE6 was still the latest and greatest from Microsoft. I bounced over to Chrome for a little bit, but came back to Firefox with their Quantum update and when I started to de-Google my life. I've tried out Brave, Arc, and will still occasionally use Safari. Firefox though has generally been my primary browser.</p>\n<p>Its market share might not be great, but its a an awesome browser that really needs to get some focus back on it. I will fully admit I don't follow every bit of news about what all is going on inside Mozilla, but it seems like Firefox has been taking a back seat while Mozilla focuses AI, VPN, it's own Mastodon instance, and other initiatives.</p>\n<p>I really hope they start to turn their attention to improving Firefox itself. I don't need or want AI. I want a browser that is fast, stays up to date with the latest CSS and JavaScript features, and helps protect my privacy online. I'm really hoping that Mozilla finally gets its act together so we have a little more browser choice and aren't stuck with the Chromium flavor of the week.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/15/finishing-a-game-and-then-sadness/",
      "url": "https://kpwags.com/posts/2024/02/15/finishing-a-game-and-then-sadness/",
      "title": "Finishing a Game and then Sadness...",
      "content_html": "\n\t\t<p>Ever finish a video game and be sad that it's over? Ever finish a video game and be sad there's no more story?</p>\n<p>Last year I finally got around to playing the game <a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a> on the PS5. I had heard good things about it and was not disappointed. I spent <em><strong>well</strong></em> over 30 hours playing it and it was a lot of fun. It also had a fantastic story to go along with it.</p>\n<p>The great story is what led me to start playing its sequel, <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a>. I spent even more time in this one, enjoying the gameplay, and again, the story. I enjoyed it so much, that I bought the <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/burning-shores/\">Burning Shores expansion</a> and played through that as well.</p>\n<p>After completing Burning Shores...I was done...I was all caught up in the story with nothing more to do. Not to spoil things, but it did set the game up for another sequel, but that hasn't even been announced.</p>\n<p>It made me sad. I enjoyed the game and got invested in the story and the characters, and now I have to wait for a sequel to see how the characters and story progresses.</p>\n<p>I don't necessarily feel this way about every game, but the two games for me that really stand out to me for wanting more of are Halo and Horizon. I've enjoyed the story (Halo 5's misses aside) of both games, and it's just a bummer that I have to wait to see where things go.</p>\n<p>This is also not to say that the games that don't do this are subpar or bad or anything. Some games give me this feeling, while others do a good job telling a story, wrapping it up, and leaving me glad I played the game.</p>\n<p>It got me thinking though about how games have in many ways caught up to books, TV shows and movies with their storytelling. The stories now have depth and can be quite intricate. Some of them, like Horizon leave you wanting more. You want to know what happens to characters, what does the world do about this or that, and so much more.</p>\n<p>Am I alone in this? Are there other games where the story has sucked you in, only for it to end with you wishing there was more? If so, what games?</p>\n<p>For those gamers out there, I would highly recommend the Horizon Series. Both games are available on the PlayStation 4, PlayStation 5, &amp; PC (well, Forbidden West comes out in March 2024 on PC...so soon...will give you plenty of time in Zero Dawn).</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/13/i-love-seeing-more-personal-sites/",
      "url": "https://kpwags.com/posts/2024/02/13/i-love-seeing-more-personal-sites/",
      "title": "I Love Seeing More Personal Sites",
      "content_html": "\n\t\t<p>There’s been one good thing that’s come out of the whole X/Twitter debacle. Personal sites and blogs have seen a renaissance and are coming a bit more to the forefront. I love seeing it.</p>\n<p>I'm actually sure that a lot of them have been there this whole time. Take mine for example, I've had my site since shortly after graduating college in 2007. I haven’t always posted to it as often as I try to do now. Some years I didn’t even post once per month finishing the year in single digits. But I’ve always had it sitting there in the background.</p>\n<p>Some have probably been more active this whole time while others are just now getting their feet wet.</p>\n<p>I wrote about the <a href=\"https://kpwags.com/posts/2022/05/12/taking-control-of-your-content/\">importance of owning your content</a> a little bit shortly after Elon took over and the point still stands.</p>\n<p>Matthias Ott created an awesome newsletter, <a href=\"https://buttondown.email/ownyourweb\">Own Your Web</a> about it and I'd highly recommend checking it out.</p>\n<p>I guess what I'm really trying to say is that it’s just nice to see more people putting their personal sites out there.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/63/",
      "url": "https://kpwags.com/reading-log/63/",
      "title": "Reading Log - February 12, 2024 (#63)",
      "content_html": "\n\t\t<p>This week it's HTML as the baseline, good API design, Bluesky opening up, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://khalidabuhakmeh.com/dotnet-tasks-lists-foreach-and-problems\">.NET Tasks, List's ForEach, and Problems</a> - <em>Khalid Abuhakmeh</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/html-as-the-baseline/\">HTML as the baseline</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://knowler.dev/blog/so-you-want-to-encapsulate-your-styles\">So, You Want to Encapsulate Your Styles?</a> - <em>Nathan Knowler</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2024/02/web-development-getting-too-complex/\">Web Development Is Getting Too Complex, And It May Be Our Fault</a> - <em>Juan Diego Rodriguez</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://thenewstack.io/what-are-the-core-principles-of-good-api-design/\">What Are the Core Principles of Good API Design?</a> - <em>Charles Humble</em></li>\n<li><a href=\"https://christianheilmann.com/2024/02/06/lines-of-code-how-to-not-measure-code-quality-and-developer-efficiency/\">Lines of code – how to not measure code quality and developer efficiency</a> - <em>Christian Heilmann</em></li>\n<li><a href=\"https://www.mrlacey.com/2024/02/thats-not-what-code-reviews-are-for.html\">That's not what code reviews are for!</a> - <em>Matt Lacey</em></li>\n<li><a href=\"https://geekswithblogs.com/aimee/put-vs-patch-with-rest-apis/\">PUT vs PATCH with REST APIs</a> - <em>Aimee Writer</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/02/06/bluesky-opens-up/\">Bluesky Opens Up</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.scientificamerican.com/article/this-nearby-brown-dwarf-may-have-auroras-and-a-moon-too/\">This Nearby Brown Dwarf May Have Auroras—And a Moon, Too</a> - <em>Phil Plait</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/cars/2024/02/ford-rethinks-ev-strategy-is-working-on-a-smaller-cheaper-ev-platform/\">Ford rethinks EV strategy, is working on a smaller, cheaper EV platform</a> - <em>Jonathan M. Gitlin</em></li>\n<li><a href=\"https://www.morningstar.com/stocks/should-esg-investing-be-criminalized\">Should ESG Investing Be Criminalized?</a> - <em>John Rekenthaler</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.coffeeandopensource.com/guest/bryan-hogan.html\">Coffee &amp; Open Source: Bryan Hogan</a></li>\n<li><a href=\"https://changelog.com/jsparty/311\">JS Party #311: React Server Components</a></li>\n<li><a href=\"https://www.npr.org/2024/02/07/1197956769/organ-donation-workplace-revenge-insider-trading\">Planet Money: Morally questionable, economically efficient</a></li>\n<li><a href=\"https://www.npr.org/2024/02/01/1197961569/why-the-ftc-is-cracking-down-on-location-data-brokers\">NPR’s The Indicator: Why the FTC is cracking down on location data brokers</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/commandline/introducing-sudo-for-windows/\">Introducing Sudo for Windows!</a> - <em>Jordi Adoumie</em></li>\n<li><a href=\"https://mikegrindle.com/posts/personal-blogging\">Why Personal Blogging Still Rules</a> - <em>Mike Grindle</em></li>\n<li><a href=\"https://pluralistic.net/2024/02/05/cyber-dunning-kruger/#swiss-cheese-security\">How I Got Scammed</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Beans on Toast - The Great American Novel</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/P1zf_2zfnRU\" title=\"Beans on Toast - The Great American Novel\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/09/what-i-learned-html-dialog/",
      "url": "https://kpwags.com/posts/2024/02/09/what-i-learned-html-dialog/",
      "title": "What I Learned: HTML Dialog",
      "content_html": "\n\t\t<p>I know I’m a little late to the game, but I recently learned how to use the new HTML <code>&lt;dialog&gt;</code> element.</p>\n<p>On my media pages, I used to just put my thoughts in a hidden div below the cover image. The issue came when I wanted to add more than a sentence or two. It would look bad trying to squeeze it in. I had considered a pop up modal before, but I didn’t want to build it manually or add an additional dependency, so I skipped it in favor of the div.</p>\n<p>Recently, it had come to a head when I shrunk the cover images a bit which made the hidden divs look even worse. I had heard about the <code>&lt;dialog&gt;</code> element and jumped in.</p>\n<p>In Eleventy on my media page layout, I added a dialog element for me to work with.</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dialog</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>media-thoughts-dialog<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>thoughts-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>close-button<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Close<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dialog</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>This provides the dialog box I need to display the end result. It even allows you to style it. Let’s give it some styling. Nothing fancy, but something a little nicer.</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">dialog.media-thoughts-dialog</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 600px<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">border-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--primary-color-1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">dialog.media-thoughts-dialog .thoughts-content</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">margin-bottom</span><span class=\"token punctuation\">:</span> 24px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">dialog.media-thoughts-dialog button</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 8px 16px<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">border-style</span><span class=\"token punctuation\">:</span> solid<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">border-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--primary-color-2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">cursor</span><span class=\"token punctuation\">:</span> pointer<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">appearance</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 5px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n\n<span class=\"token selector\">dialog.media-thoughts-dialog button:hover</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--primary-color-1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">border-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--primary-color-1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token atrule\"><span class=\"token rule\">@media</span> <span class=\"token punctuation\">(</span><span class=\"token property\">max-width</span><span class=\"token punctuation\">:</span> 650px<span class=\"token punctuation\">)</span></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token selector\">dialog.media-thoughts-dialog</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 300px<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Now, this will require some JavaScript to get functional, but thankfully not too much.</p>\n<p>The first thing I needed to figure out was how to get the content. I didn’t want to make an API call, not only because I don’t have an API, but also that’s more network calls that weren’t really needed. So instead, I kept the hidden divs to store my thoughts.</p>\n<p>Here’s a simplified version of the HTML:</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>item<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>book-cover<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>{{ coverUrl }}<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">alt</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>The cover for {{ title }}<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>cover<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">height</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>225<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>150<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>{{ link }}<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">target</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>_blank<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>noreferrer<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ title }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>meta<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{ author }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>view-thoughts<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span>\n\t\t\t\t<span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>toggle-thoughts<span class=\"token punctuation\">\"</span></span>\n\t\t\t\t<span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>toggle-btn-{{ id }}<span class=\"token punctuation\">\"</span></span>\n\t\t\t\t<span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span>\n\t\t\t<span class=\"token punctuation\">></span></span>\n\t\t\t\tView Thoughts\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>thoughts hidden<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>thoughts-{{ id }}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t\t\t\t{{ thoughts }}\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>Each book comes with an ID from Notion, so that when I build the HTML, I attach it to both the view thoughts button as well as the hidden content.</p>\n<p>So now we need to handle the action that occurs when the user clicks the button.</p>\n<pre class=\"language-js\" tabindex=\"0\"><code class=\"language-js\">window<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'load'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">const</span> dialog <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dialog.media-thoughts-dialog'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>dialog<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">const</span> toggleButtons <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'button.toggle-thoughts'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\ttoggleButtons<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">button</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t\tbutton<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token keyword\">const</span> mediaId <span class=\"token operator\">=</span> e<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">'toggle-btn-'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">''</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\t<span class=\"token keyword\">const</span> thoughtsDiv <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">thoughts-</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>mediaId<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\t<span class=\"token keyword\">const</span> thoughtsContainer <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dialog .thoughts-content'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>thoughtsDiv <span class=\"token operator\">&amp;&amp;</span> thoughtsContainer<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\t\t\tthoughtsContainer<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">=</span> thoughtsDiv<span class=\"token punctuation\">.</span>innerHTML<span class=\"token punctuation\">;</span>\n\t\t\t\t\tdialog<span class=\"token punctuation\">.</span><span class=\"token function\">showModal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\t<span class=\"token punctuation\">}</span>\n\t\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t<span class=\"token keyword\">const</span> modalCloseButton <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dialog button'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>modalCloseButton<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\tmodalCloseButton<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> dialog<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>When the window is loaded, the script finds all the view thoughts buttons and adds an event listener for the onClick event. When a button is clicked, it gets the ID of the book from the event target, which in this case is the button. It uses the ID to find the hidden div with my thoughts. It then takes the inner HTML from the container and inserts it into the dialog’s content div. The final piece is to show the dialog which is accomplished by calling <code>dialog.showModal()</code>. The end result is</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/5rPbNh7BKB-715.webp 715w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/5rPbNh7BKB-715.gif 715w\" /><img alt=\"The end result of an HTML dialog appearing on my site\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/5rPbNh7BKB-715.png\" width=\"715\" height=\"381\" /></picture></p>\n<p>The final pieces is the last piece of code. Attaching the event listener to the close button which closes the modal by calling <code>dialog.close()</code>.</p>\n<p>In this implementation, I only need one dialog element created and have a nice looking dialog to show my thoughts. No 3rd party libraries or questionable custom HTML to create.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/09/starting-with-test-driven-development/",
      "url": "https://kpwags.com/posts/2024/02/09/starting-with-test-driven-development/",
      "title": "Starting with Test-Driven Development",
      "content_html": "\n\t\t<p>I’ve been reading <a href=\"https://bookshop.org/p/books/pragmatic-test-driven-development-in-c-and-net-write-loosely-coupled-documented-and-high-quality-code-with-ddd-using-familiar-tools-and-libraries/18917559?ean=9781803230191\">Pragmatic Test-Driven Development in C# and .NET</a> by Adam Tibi and I think it’s tilted me towards giving it a serious college try.</p>\n<p>I’ve become a convert to unit testing and integration testing for 3+ years now, but have never gone down the path of writing the tests first. I’ve always written the code and then added the tests to make sure that it works as expected. I’ve tried to make sure the tests fail when expected and hit the critical paths, but have never gotten aboard the Test-Driven Development (TDD) train.</p>\n<p>I’m starting up a new rewrite project at work and I think I’m going to go the TDD route building it.</p>\n<p>Reading the book, I have a pretty good idea how to go about the TDD route with C# &amp; .NET, but I’m a little fuzzy on how to best go about it on the frontend. The frontend will be written in React and TypeScript. I have some vague ideas and thoughts on it, but will need to dig into it.</p>\n<p>If you have any good resources, please send them my way.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/08/scheduling-my-hobbies/",
      "url": "https://kpwags.com/posts/2024/02/08/scheduling-my-hobbies/",
      "title": "Scheduling My Hobbies",
      "content_html": "\n\t\t<p>I’ve set some goals for myself this year and I decided I’m going to try something new in hopes that it helps me achieve them. It’s going to sound silly, but hey, let’s try it.</p>\n<p>My wife mentioned reading about someone who scheduled their hobbies for a specific night of the week. I had at one point considered doing something similar, and decided that it was a sign or something along those lines to try it myself. For the next month or so I’m going to try to dedicate each day of the week towards a specific hobby.</p>\n<ul>\n<li><strong>Mondays &amp; Fridays:</strong> My side project</li>\n<li><strong>Tuesdays &amp; Thursdays:</strong> Writing</li>\n<li><strong>Wednesdays:</strong> Video Games and/or TV</li>\n<li><strong>Saturdays &amp; Sundays:</strong> Whatever</li>\n</ul>\n<p>I’m not going to plan anything specific for the weekends. I figure I might need them to run errands, do housework, or something of the like. I also don’t really want to make things too rigid, life’s too short for that.</p>\n<p>With regards to the week, I’m not going to say “no” to alternative plans if something comes up or anything. I’ll still have hockey 1-2 nights a week, and housework never ends. What I’m just going to do is have a different focus each evening of the week. If something comes up that evening, I’ll skip whatever it was I was going to do and just move on. I’m not going to try to squeeze it in the next day either.</p>\n<p>I’m also going to continue to set aside the final hour of my waking day to read. I find that sitting down and reading for about 45 minutes to an hour helps calm me down to help me fall asleep.</p>\n<p>I’m gonna try this for the next month or so and see how it goes. If I like it, great, I’ll keep at it. If I don’t, oh well, no big deal. Might help to break up my activities as well to keep each one fresh.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/62/",
      "url": "https://kpwags.com/reading-log/62/",
      "title": "Reading Log - February 5, 2024 (#62)",
      "content_html": "\n\t\t<p>NASA's Ingenuity Copter has flown its last flight, the EU blocking Amazon's iRobot acquisition, TypeScript in 2024, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://thenewstack.io/daniel-rosenwasser-on-typescript-and-whats-ahead-in-2024/\">Daniel Rosenwasser on TypeScript and What’s Ahead in 2024</a> - <em>Loraine Lawson</em></li>\n<li><a href=\"https://hacks.mozilla.org/2024/02/announcing-interop-2024/\">Announcing Interop 2024</a> - <em>James Graham</em></li>\n<li><a href=\"https://www.robinwieruch.de/react-starter/\">How to start a React Project in 2024</a> - <em>Robin Wieruch</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://hamatti.org/posts/please-dont-force-me-to-log-in/\">Please, don’t force me to log in</a> - <em>Juha-Matti Santala</em></li>\n<li><a href=\"https://www.theverge.com/2024/1/31/24057231/iconfactory-kickstarter-internet-reader-project-tapestry-twitterrific\">The creators of Twitterrific are making an app to read (almost) anything on the web</a> - <em>Amrita Khalid</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/01/31/the-economy-and-ethics-of-ai-training-data/\">The economy and ethics of AI training data</a> - <em>Matt Levin</em></li>\n<li><a href=\"https://www.theverge.com/24054329/microsoft-edge-automatic-chrome-import-data-feature\">Microsoft stole my Chrome tabs, and it wants yours, too</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://defector.com/the-little-mars-helicopter-that-could\">The Little Mars Helicopter That Could</a> - <em>Barry Petchesky</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.cnbc.com/2024/01/29/amazon-terminates-irobot-deal-vacuum-maker-to-lay-off-31percent-of-staff.html\">Amazon terminates iRobot deal, Roomba maker to lay off 31% of staff</a> - <em>Rohan Goswami</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2024/01/amazon-cant-hoover-up-roomba-after-eu-nixes-1-4b-irobot-acquisition/\">Amazon’s $1.4B Roomba bid fails, leading to iRobot layoffs and CEO resignation</a> - <em>Kevin Purdy</em></li>\n<li><a href=\"https://www.freightwaves.com/news/how-walmart-uses-trucking-to-dominate-american-retail\">Why Walmart pays its truck drivers 6 figures</a> - <em>Rachel Premack</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.coffeeandopensource.com/guest/chris-odell.html\">Coffee &amp; Open Source: Chris O’Dell</a></li>\n</ul>\n<hr />\n<h2>Longform</h2>\n<ul>\n<li><a href=\"https://www.runnersworld.com/runners-stories/a46555448/mitch-ammons-addiction-2024-olympic-marathon-trials/\">How Far Can Running Take You After a Decade of Addiction?</a> - <em>Peter Flax</em></li>\n</ul>\n<hr />\n<h2>Journalism</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/02/02/the-messenger-implosion-once-again-shows-the-real-problem-with-u-s-journalism-is-shitty-management-by-visionless-fail-upward-brunchlords/\">‘The Messenger’ Implosion Once Again Shows The Real Problem With U.S. Journalism Is Shitty Management By Visionless,  Fail-Upward Brunchlords</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://defector.com/the-messenger-was-built-to-fail-and-did\">The Messenger Was Built To Fail, And Did</a> - <em>Chris Thompson</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/01/31/cyclists-cities-bike-infrastructure-maps/\">Biking in cities can be complicated, and map apps can only help so much</a> - <em>Kai Ryssdal &amp; Sarah Leeson</em></li>\n<li><a href=\"https://www.marketplace.org/2024/02/01/another-fafsa-snag-is-delaying-financial-aid-offers-for-prospective-college-students/\">Another FAFSA snag is delaying financial aid offers for prospective college students</a> - <em>Stephanie Hughes</em></li>\n<li><a href=\"https://www.betterbydesign.cc/p/24-things-i-know-after-10-years-in\">24 Things I Know After 10 Years in Tech, I Wish I’d Known in Year 1</a> - <em>Patrick Morgan</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Alice in Chains - Nutshell (MTV Unplugged)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/9EKi2E9dVY8\" title=\"Alice in Chains - Nutshell (MTV Unplugged)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/02/what-i-learned-linq-deferred-execution/",
      "url": "https://kpwags.com/posts/2024/02/02/what-i-learned-linq-deferred-execution/",
      "title": "What I Learned: LINQ Deferred Query Execution",
      "content_html": "\n\t\t<p>I’ve been reading <a href=\"https://bookshop.org/p/books/parallel-programming-and-concurrency-with-c-10-and-net-6-a-modern-approach-to-building-faster-more-responsive-and-asynchronous-net-applications-alvin-/18757208?ean=9781803243672\">Parallel Programming and Concurrency with C# 10 and .NET 6</a> by Alvin Ashcraft. So far I’ve been learning a lot about how .NET handles threads, parallel programming and concurrency as the title would indicate. But in the meantime, I’ve learned something about LINQ that I probably should’ve realized or learned earlier.</p>\n<p>In chapter 8, Alvin introduces Parallel LINQ or PLINQ. In his introduction, he mentioned that like LINQ, PLINQ also supported deferred query execution, a concept I had for whatever reason not heard of.</p>\n<p>For those who aren’t familiar with C#, LINQ is a library within C# for among other things, querying against objects like lists and arrays.</p>\n<p>Let’s show an example.</p>\n<p>Suppose we have a class for people</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Person</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Name <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\t<span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Species <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Now let’s create a list of people.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> people <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">List<span class=\"token punctuation\">&lt;</span>Person<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Jean Luc Picard\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Human\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"William Riker\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Human\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Data\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Android\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Geordi LaForge\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Human\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Worf\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Klingon\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Deanna Troi\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Betazoid\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Beverly Crusher\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Human\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Guinan\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"El-Aurian\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Person</span> <span class=\"token punctuation\">{</span> Name <span class=\"token operator\">=</span> <span class=\"token string\">\"Alexander Rozhenko\"</span><span class=\"token punctuation\">,</span> Species <span class=\"token operator\">=</span> <span class=\"token string\">\"Klingon\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>A quick example of LINQ would be:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> humans <span class=\"token operator\">=</span> people<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Species <span class=\"token operator\">==</span> <span class=\"token string\">\"Human\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This code would go through the list of people and select those with the species of “Human”.</p>\n<p>This particular example is very similar to JavaScript’s <code>filter()</code> function. The rough JS equivalent would be:</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> humans <span class=\"token operator\">=</span> people<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">p</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Species <span class=\"token operator\">===</span> <span class=\"token string\">\"Human\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>When we talk about deferred execution, what we mean is that the search or filter is not immediately executed. In the above example with selecting the human species command crew of the <em>USS Enterprise</em>, the query was not actually executed. It only will get executed when it’s enumerated or acted upon.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token comment\">// this causes the query to be executed</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> humans <span class=\"token operator\">=</span> people<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Species <span class=\"token operator\">==</span> <span class=\"token string\">\"Human\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">ToList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// this query will not execute, and instead, be deferred</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> klingons <span class=\"token operator\">=</span> people<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Species <span class=\"token operator\">==</span> <span class=\"token string\">\"Klingon\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// this will cause the query to be executed</span>\n<span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> klingon <span class=\"token keyword\">in</span> klingons<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\tConsole<span class=\"token punctuation\">.</span><span class=\"token function\">WriteLine</span><span class=\"token punctuation\">(</span>klingon<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>In the first case, the query is acted upon by converting it to a list object. In the second, it would be executed when it’s enumerated to log the person to the screen.</p>\n<p>Some of the benefits of deferred query execution are better performance, as you won’t have to execute the query on large datasets all at once. It can also allow you to better chain queries together, allowing more complex queries and operations. And since the query is always re-evaluated on enumeration, you can update the collection as you are iterating over it.</p>\n<p>It’s something I have been doing for a long time in C#, but hadn’t really known it. Now I’m a little bit smarter about it and figured I’d share.</p>\n<p><em>Edit 2/2/2024: Corrected the Person class definition to be Name &amp; Species</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/02/01/january-2024-check-in/",
      "url": "https://kpwags.com/posts/2024/02/01/january-2024-check-in/",
      "title": "January 2024 Check-In",
      "content_html": "\n\t\t<p>January was a pretty lousy month for me. I started the month having to say goodbye to my cat, Cookie. And to be honest, the sting of that continued on for the rest of the month.</p>\n<h2>Cookie</h2>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/6hydkXp0ns-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/6hydkXp0ns-1024.gif 1024w\" /><img alt=\"Cookie sitting next to me on the couch\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/6hydkXp0ns-1024.jpeg\" width=\"1024\" height=\"1365\" /></picture></p>\n<p>I had Cookie almost my entire adult life. I got her 2 years after I graduated college and she’s been by my side ever since. Having to say goodbye to her was a real kick in the gut, especially since I didn’t see it coming. When I lost my previous cat, Nibbler, and dog Otto, I knew there was a good chance it was coming prior to the worst news. With Cookie, it was sudden. I took her in for what I thought was digestive system issues, but quickly found out a tumor had reduced her lung capacity to 25% of what it should be. I was obviously devastated and after talking it over with my wife and the vet, we made the tough decision to say goodbye. <a href=\"https://kpwags.com/posts/2024/01/10/remembering-cookie/\">I miss her</a>.</p>\n<p>Unfortunately, it left a bad taste in my mouth that obviously still stings and made the rest of the month feel kind of bleh.</p>\n<h2>Work</h2>\n<p>Work has been going well. I was finally able to finish up the one feature on one project that had been in development since August or so. It was nice to finish that up and get it out the door.</p>\n<p>My next big project is just about to be ready for development and I’m excited to get started on it. I’m not sure what I can really say without getting in trouble, but it’s a fairly large project and should be a real challenge which I’m looking forward to.</p>\n<h2>Side Projects</h2>\n<p>I wrote about <a href=\"https://kpwags.com/posts/2024/01/25/limiting-my-side-projects/\">limiting what I work on as a side project</a>. I haven’t made up my mind exactly which project I’m going to tackle, but I’ve been delving into the new .NET 8 Blazor web app and am seeing what’s changed since I last worked with it. The separate Blazor WASM vs Blazor Server has morphed into a hybrid model that I’m still wrapping my head around.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Fitness</strong></p>\n<ul>\n<li><strong>Running:</strong> Didn’t run too much, but managed a little over 10 miles.</li>\n<li><strong>Walking:</strong> Ended up walking a measly 3 miles.</li>\n<li><strong>Biking:</strong> Nope.</li>\n<li><strong>Lifting:</strong> Slowly getting back into my routine.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-storm-before-the-storm-the-beginning-of-the-end-of-the-roman-republic-mike-duncan/7215014?ean=9781541724037\">The Storm Before the Storm</a> by Mike Duncan</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/the-war-that-made-the-roman-empire-antony-cleopatra-and-octavian-at-actium-barry-strauss/18576030?ean=9781982116682\">The War That Made the Roman Empire</a> by Barry Strauss</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/grit-the-power-of-passion-and-perseverance-angela-duckworth/6700116?ean=9781501111112\">Grit</a> by Angela Duckworth</li>\n<li>Finished <a href=\"https://bookshop.org/p/books/easy-money-cryptocurrency-casino-capitalism-and-the-golden-age-of-fraud-jacob-silverman/18699362?ean=9781419766398\">Easy Money</a> by Ben McKenzie</li>\n<li>Started <a href=\"https://bookshop.org/p/books/parallel-programming-and-concurrency-with-c-10-and-net-6-a-modern-approach-to-building-faster-more-responsive-and-asynchronous-net-applications-alvin-/18757208?ean=9781803243672\">Parallel Programming and Concurrency with C# 10 and .NET 6</a> by Alvin Ashcraft</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Reading Log\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/57/\">January 1 (#57)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/58/\">January 8 (#58)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/59/\">January 15 (#59)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/60/\">January 22 (#60)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/61/\">January 29 (#61)</a></li>\n</ul>\n</li>\n<li>Wrote About\n<ul>\n<li><a href=\"https://kpwags.com/posts/2024/01/01/movies-i-watched-in-2023/\">The movies I watched in 2023</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/02/tv-i-watched-in-2023/\">The TV I watched in 2023</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/03/books-i-read-in-2023/\">The books I read in 2023</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/05/introducing-notes/\">Adding notes to my site</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/05/what-i-learned-c-primary-constructors/\">Learning about primary constructors in C# 12</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/09/figuring-out-notes/\">Figuring out my notes apps</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/10/remembering-cookie/\">Remembering Cookie</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/12/what-i-learned-styling-rss-feeds/\">Learning how to style RSS feeds</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/16/moonlander-review/\">Reviewing the Moonlander keyboard</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/19/what-i-learned-more-css-colors/\">Learning about the new CSS colors</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/19/about-the-chevron-doctrine/\">The Chevron Doctrine</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/25/limiting-my-side-projects/\">Limiting my side projects</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/26/what-i-learned-broccoli-cauliflower/\">That broccoli &amp; cauliflower are cabbages</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/30/how-lock-in-hurts-design/\">How apps and lock-in are problematic</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/31/one-month-with-eleventy/\">One month with Eleventy</a></li>\n<li><a href=\"https://kpwags.com/posts/2024/01/31/banning-books-is-bs/\">Banning books is bullshit</a></li>\n</ul>\n</li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/burning-shores/\">Horizon Forbidden West: Burning Shores</a></li>\n<li>Started <a href=\"https://www.ea.com/games/mass-effect\">Mass Effect</a></li>\n</ul>\n<p><strong>📺 TV</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></li>\n<li>Finished Season 3 of <a href=\"https://www.imdb.com/title/tt8111088/\">The Mandalorian</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0141842/\">Sopranos</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0344651/\">Good Eats</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt15439048/\">Death and Other Details</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt0113277/\">Heat</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-02-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/31/one-month-with-eleventy/",
      "url": "https://kpwags.com/posts/2024/01/31/one-month-with-eleventy/",
      "title": "One Month with Eleventy",
      "content_html": "\n\t\t<p>I’ve now been using <a href=\"https://www.11ty.dev/\">Eleventy</a> for my site for a little over a month and I have to say I’m happy I made the change. I’ve continued writing. I’ve added some features, tweaked some things here and there, almost all has been good. I have run into a few hiccups, mostly of my own making, but highly doubt I’d ever consider going back at this point.</p>\n<h2>My Biggest Hiccup</h2>\n<p>My biggest hiccup has been permalinks. Starting with my posts in 2024, I’ve taken advantage of the <code>permalink</code> keyword in the front matter to assign the URL rather than nesting everything like I did when I did the original migration. It’s much more convenient and it does the trick nicely. I have on several occasions though either mistyped the permalink, or skipped the <code>/index.html</code> on the end. Skipping the <code>index.html</code> is particularly nefarious because it will work locally, but will just render the raw HTML of the page when viewed live on Netlify. Oops. Again, this is on me and is not at all the fault of 11ty. I’ve since updated my VS Code snippets to hopefully prevent it from happening anymore.</p>\n<h2>Smooth Sailing Otherwise</h2>\n<p>Other than the permalink debacle (caused by me), it’s been mostly smooth sailing. I’ve found it generally easier to make the changes I’d been considering for my site prior to the switch. I’m looking forward to upgrading to version 3 when it comes out and adding more content and features as time goes on.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/30/how-lock-in-hurts-design/",
      "url": "https://kpwags.com/posts/2024/01/30/how-lock-in-hurts-design/",
      "title": "How Lock-In Hurts Design",
      "content_html": "\n\t\t<p>I was reading an <a href=\"https://pluralistic.net/2024/01/24/everything-not-mandatory/#is-prohibited\">article from Cory Doctorow</a> the other day talking about design and lock-in. A lot of what he was talking about spoke to me.</p>\n<p>There’s a lot of talk about the battle John Deere is waging against our right to repair. For those unfamiliar with this, John Deere is trying to stop farmers who have bought John Deere tractors from having them repaired or worked on by anyone other than John Deere, thus making them more expensive to repair and maintain. Without competition, John Deere can jack up the prices, leaving farmers stuck paying more.</p>\n<p>Something similar has been happening on the web and I’ve always had a hard time articulating it. Cory described what I’ve been feeling.</p>\n<blockquote>\n<p>This is why services are so horny to drive you to install their app rather using their websites: they are trying to get you to do something that, given your druthers, you would prefer not to do. They want to force you to exit through the gift shop, you want to carve a desire path straight to the parking lot. Apps let them mobilize the law to literally criminalize those desire paths.</p>\n</blockquote>\n<p>Cory is talking about how so many websites have become ad-infected messes. Know where it’s incredibly difficult to block ads? Apps. Companies know that on just about every platform, users can install ad blockers to block ads. To block ads on apps requires additional work that the majority of people either won’t bother or don’t know how to do.</p>\n<blockquote>\n<p>Calling an action where no alternatives are permissible a &quot;preference&quot; or a &quot;choice&quot; is a cheap trick – especially when considered against the &quot;preferences&quot; that reveal themselves when a real choice is possible.</p>\n</blockquote>\n<p>People choose not to receive ads in their web browser of choice because ads today have become so annoying and in-your-face that people don’t want them. Have you seen some mobile websites? Many have ads and sponsored content that take up 2/3 or more of the screen. They’re unusable! And none of this takes into account the security side of things where some ad networks have malware as part of their ads. It’s no wonder more and more people are saying “to hell with this!” and installing an ad blocker.</p>\n<p>Saying people are choosing to receive ads on your mobile app when there is no “off” setting on the app, and your mobile website is unusable, isn’t really a choice.</p>\n<blockquote>\n<p>Apps – and other technologies that are locked down so their users can be locked in – are the height of technological arrogance. They embody a belief that users are to be told, not heard. If a user wants to do something that the designer didn't anticipate, that's the user's fault.</p>\n</blockquote>\n<p>I block ads. I do so unapologetically. If your website becomes unusable because I block the ads, I’m not going to disable my ad blocker, I’m just going to close the tab.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/61/",
      "url": "https://kpwags.com/reading-log/61/",
      "title": "Reading Log - January 29, 2024 (#61)",
      "content_html": "\n\t\t<p>This week I read about why lock-in hurts consumers, Google's overpowering leverage of internet content, new CSS tips, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://macwright.com/2024/01/24/on-web-components\">On Web Components</a> - <em>Tom MacWright</em></li>\n<li><a href=\"https://moderncss.dev/12-modern-css-one-line-upgrades/\">12 Modern CSS One-Line Upgrades</a> - <em>Stephanie Eckles</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/01/22/google-search-may-be-the-most-powerful-arbiter-of-internet-content/\">Google Search may be the most powerful arbiter of internet content</a> - <em>Kai Ryssdal &amp; Sean McHenry</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2024/01/24/everything-not-mandatory/#is-prohibited\">How lock-in hurts design</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.theverge.com/2024/1/25/24050478/apple-ios-17-4-browser-engines-eu\">Apple is finally allowing full versions of Chrome and Firefox to run on the iPhone</a> - <em>David Pierce</em></li>\n<li><a href=\"https://www.wired.com/story/parabon-nanolabs-dna-face-models-police-facial-recognition/\">Cops Used DNA to Predict a Suspect’s Face—and Tried to Run Facial Recognition on It</a> - <em>Dhruv Mehrotra</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.bloomberg.com/news/articles/2024-01-22/boeing-hit-with-more-pressure-as-united-ceo-vents-frustrations\">Boeing Faces More Pressure as United CEO Vents Frustrations</a> - <em>Julie Johnsson, Siddharth Vikram Philip, Mary Schlangenstein, &amp; Josh Wingrove</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/01/22/cant-sleep-mattresses-masks-and-supplements-say-they-can-help/\">Can’t sleep? Mattresses, masks and supplements say they can help.</a> - <em>Samantha Fields</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podrocket.logrocket.com/engineering-and-innovation\">PodRocket: Engineering and innovation with CTO of SoundCloud, Matthew Drooker</a></li>\n<li><a href=\"https://podrocket.logrocket.com/react-core\">PodRocket: The React Core team talks React Forget and the future</a></li>\n<li><a href=\"https://darknetdiaries.com/episode/133/\">Darknet Diaries #133: I’m the Real Connor</a></li>\n<li><a href=\"https://softwareengineeringdaily.com/2023/05/01/bug-reporting/\">Software Engineering Daily: Bug Reporting is Broken and how Jam is Fixing that with Dani Grant &amp; Mohd Irtefa</a></li>\n<li><a href=\"https://shoptalkshow.com/563/\">Shop Talk Show #563: Getting Pulled by the Algorithm, AI Training Data, and SVG Drawing</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - Do One</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/zI-o1S9FJl8\" title=\"Frank Turner - Do One\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/26/what-i-learned-broccoli-cauliflower/",
      "url": "https://kpwags.com/posts/2024/01/26/what-i-learned-broccoli-cauliflower/",
      "title": "What I Learned: Broccoli &amp; Cauliflower are Cabbages",
      "content_html": "\n\t\t<p>This year I want to try more things in the kitchen. Try new recipes, new styles, and expand my cooking abilities. At the same time, my wife and I found <a href=\"https://www.foodnetwork.com/shows/good-eats\">Good Eats</a> on HBO Max and have been going through and watching it.</p>\n<p>It’s an interesting show talking about different foods, their history, and of course recipes and how to cook them. One of the episodes we watched this week was on cabbage, and the bad rap it sometimes gets. At the beginning of the episode, Alton was talking about the different types of cabbages and it was brought up that both <a href=\"https://en.wikipedia.org/wiki/Broccoli\">Broccoli</a> and <a href=\"https://en.wikipedia.org/wiki/Cauliflower\">Cauliflower</a> are types of cabbages likely first cultivated in Italy.</p>\n<p>I’m not entirely sure why that made me go “huh!”, but I thought it was interesting nonetheless. I’ve been eating more broccoli lately and have been finding some cauliflower recipes I want to try, and this factoid just sort of plopped down in my lap.</p>\n<p>The more you know...</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/25/limiting-my-side-projects/",
      "url": "https://kpwags.com/posts/2024/01/25/limiting-my-side-projects/",
      "title": "Limiting My Side Projects",
      "content_html": "\n\t\t<p>One of the things I’ve been great at is finding new little side projects to work on. I find a project, start it, think up another project, abandon my current side project to start the next one, only to repeat the process all over again. Needless to say, this doesn’t exactly leave me with much to show for it all.</p>\n<h2>It’s Not All Negative</h2>\n<p>I have most definitely learned some things while jumping from project to project. It’s how I helped improve my React skills as well as learned the basics of Blazor. It would however, be nice to have a finished product. I set a goal for myself this year to be able to finish one of my side projects and I have every intention of meeting that goal.</p>\n<p>The only thing left to do is to choose what I want to work on. I have it narrowed down to two projects. Both will give me an opportunity to learn some new technologies and hopefully broaden my skillset.</p>\n<h2>Project Idea 1: Sports Card Organizer</h2>\n<p>The first idea is an app to organize sports cards. I had originally built the bulk of this using Blazor as a project to teach me Blazor. If I go this route though, I’ll be building it using <a href=\"https://dotnet.microsoft.com/en-us/apps/maui\">.NET MAUI</a> instead. I’ve never used MAUI and figure this would be a good project to learn it for.</p>\n<h2>Project Idea 2: Sports League Manager</h2>\n<p>The second idea is one I played around with a little bit but never much got anywhere. The league that I play hockey in uses a website and web application that is pretty much garbage. It’s difficult to navigate, full of bugs, and is basically not a good time. It also looks like a website that came out of the late 1990’s or early 2000’s. I know I’m not the only person who has gripes about it. I’ve been considering trying my own hand at building a sports league management solution if for no other reason than to see if I can do better. It’d be a little more complex than the card organizer, but the challenge is part of the fun. If I go this route, I plan to build it using Blazor.</p>\n<h2>The Plan Going Forward</h2>\n<p>Obviously, the first thing I need to do is to choose. I’m thinking I’ll spend some time doing some MAUI tutorials to see what it’s all about. It might give me a good jumping off point to see whether that’s the route I want to take or if the league management is what I want to do.</p>\n<p>Here’s to making a decision and starting to learn.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/60/",
      "url": "https://kpwags.com/reading-log/60/",
      "title": "Reading Log - January 22, 2024 (#60)",
      "content_html": "\n\t\t<p>This week I've read about Bluesky adding RSS feeds, damning information on NASA's Artemis program, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://mabroukmahdhi.medium.com/what-we-are-doing-wrong-with-logging-in-c-798dd7a4ec6d\">What Are We Doing Wrong with Logging in C#?</a> - <em>Mabrouk Mahdhi</em></li>\n<li><a href=\"https://jonhilton.net/blazor-auth0-net8/\">Simpler auth for Blazor Web Apps with Auth0?</a> - <em>Jon Hilton</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://web.dev/articles/5-css-snippets-every-front-end-developer-should-know-in-2024\">5 CSS snippets every front-end developer should know in 2024</a> - <em>Adam Argyle</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://codeopinion.com/want-to-build-a-good-api-here-are-5-tips-for-api-design/\">Want to build a good API? Here are 5 Tips for API Design.</a> - <em>Derek Comartin</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.fromjason.xyz/p/notebook/where-have-all-the-websites-gone\">Where have all the websites gone?</a> - <em>Jason Velazquez</em></li>\n<li><a href=\"https://openrss.org/blog/bluesky-has-launched-rss-feeds\">Bluesky Has Launched RSS Feeds</a> - <em>Open RSS</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/features/2024/01/how-a-27-year-old-busted-the-myth-of-bitcoins-anonymity/\">How a 27-year-old busted the myth of Bitcoin’s anonymity</a> - <em>Andy Greenberg</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2024/01/solving-a-nasa-mystery-why-did-space-shuttle-commanders-lock-the-hatch/\">What happens when an astronaut in orbit says he’s not coming back?</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://arstechnica.com/space/2024/01/former-nasa-administrator-hates-artemis-wants-to-party-like-its-2008/\">Former NASA administrator hates Artemis, wants to party like it’s 2008</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/1/18/24042674/microsoft-xbox-exclusives-playstation-nintendo-switch-publisher\">Why Microsoft might be considering Xbox exclusives on PlayStation and Nintendo Switch</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/health/2024/01/hospitals-slash-staff-services-quality-of-care-when-private-equity-takes-over/\">Hospitals owned by private equity are harming patients, reports find</a> - <em>Beth Mole</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://joanwestenberg.com/blog/copyright-is-both-vital-and-obsolete\">Copyright is both vital and obsolete.</a> - <em>Joan Westenberg</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Arkells - Knocking at the Door</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/vQvp6EghJ18\" title=\"The Arkells - Knocking at the Door\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/19/what-i-learned-more-css-colors/",
      "url": "https://kpwags.com/posts/2024/01/19/what-i-learned-more-css-colors/",
      "title": "What I Learned: More CSS Colors",
      "content_html": "\n\t\t<p>This past weekend while I was lifting, I was listening to a <a href=\"https://changelog.com/jsparty/273\">JS Party podcast episode</a> from April 2023 (yes, I’m that far behind) talking about the new color ranges.</p>\n<p>I had heard that more colors had indeed come to CSS, but had never really done any digging into it. It’s been on my list of things to look at and <a href=\"https://nerdy.dev/\">Adam Argyle</a> did a great job explaining the new color options.</p>\n<p>I’d highly recommend listening to the podcast as Adam is better able to articulate how the new colors work than myself, but suffice it to say, the new color values take advantage of the newer and better displays available today.</p>\n<p>There are several new options, Display P3, LCH, and OKLCH. OKLCH is the recommended color space to use. LCH stands for Lightness (the perception human eyes can see), Chroma, &amp; Hue. They provide access to a much larger range of colors that older monitors can’t display, but newer monitors and mobile devices can. And the best part is that it’s fully backwards compatible. So if you convert all your colors to OKLCH and someone on an old device comes and views your site, they’ll see the closest color that their device can render.</p>\n<p>The other awesome feature of this is that you can use JavaScript functions on the color to lighten, darken, or do other calculations on them and manipulate the colors as you see fit.</p>\n<p>I’ve played around with some of the various links mentioned in the podcast and have an <a href=\"https://github.com/kpwags/kpwags.11ty/issues/102\">issue logged</a> for my site to convert the colors to OKLCH. I’ll probably tweak them as well to hopefully make them “pop” a little more.</p>\n<p>So much new functionality has been added to CSS and supported globally now that it’s becoming hard to keep up!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/piracy-is-surging-again/",
      "url": "https://kpwags.com/notes/piracy-is-surging-again/",
      "title": "Piracy is Surging Again Because Streaming Execs Ignored the Lessons of the Past",
      "content_html": "\n\t\t<blockquote>\n<p>So there’s very little indication any of these problems are going to slow down. Consumers are going to be forced to pay higher and higher rates for increasingly deteriorating services, to the point where piracy is going to become an increasingly alluring value proposition. And when that happens, you can be absolutely, indisputably assured that executives will blame absolutely everything but themselves.</p>\n</blockquote>\n<p><a href=\"https://www.youtube.com/watch?v=1oWPqcWt8Es\">Wil Wheaton put it perfectly</a> when he said that many people would pay for content if it’s easy and cost effective. Jack up the prices, make it difficult to find the content you want, and the results shouldn’t be surprising.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/16/moonlander-review/",
      "url": "https://kpwags.com/posts/2024/01/16/moonlander-review/",
      "title": "Moonlander Review",
      "content_html": "\n\t\t<p>Back in mid-November I bought the <a href=\"https://www.zsa.io/moonlander/\">Moonlander Ergonomic Keyboard</a> from ZSA. I had been giving serious consideration to getting a split keyboard and finally pulled the trigger.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/bpS8SU_h1H-1600.webp 1600w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/bpS8SU_h1H-1600.gif 1600w\" /><img alt=\"A black Moonlander split keyboard sitting on a desk\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/bpS8SU_h1H-1600.jpeg\" width=\"1600\" height=\"1200\" /></picture></p>\n<h2>Initial Impressions</h2>\n<p>My first thought was “Oh man, is it difficult to type on this thing”.</p>\n<p>Having never used a split or ergonomic keyboard, I guess that wasn’t too surprising of a reaction. It really does take a little bit to get used to. I also had to keep playing around with the angles on it with the legs, the thumb pieces and its orientation.</p>\n<h2>No Key Labels</h2>\n<p>The one thing that bothered me at first was that so many keys are blank. Like I had no idea what they were. I didn’t know where the space key was, the enter key, or even the escape key. I had to bring up ZSA’s <a href=\"https://configure.zsa.io/home\">Oryx</a> website to figure out what keys defaulted where. Now I do understand why they labeled (or rather did not label) the keys the way they did. The keyboard is extremely customizable in that you can remap keys however you so choose. I’ll fully admit that I am still running the default layout though because it seems to be working well for me.</p>\n<h2>Layers</h2>\n<p>The other thing that has taken some getting used to is that the keyboard has a feature called layers that allows each key to be mapped to different actions depending on what “layer” you’re on. By default you’re on layer 0, which is the standard QWERTY layer. But you can also switch to 2 other layers either by holding down a key like you would <em>shift</em> or the <em>fn</em> key, or a hard toggle. Outside the F1-F12 keys, I hardly use the additional layers, but it is kind of nice to know they’re there as I get more used to it.</p>\n<h2>Where I’m At Now</h2>\n<p>My desk setup at home has 2 setups next to each other. One for work, the other for personal. Right now I have the Moonlander connected to my work machine since I use that on a more consistent basis than my personal machine. I will sometimes move it over, but I keep my Keychron K4 hooked up normally, though I really should use the Moonlander more. It really does feel more natural for my wrists and hands.</p>\n<p>I’ve definitely gotten more used to the split setup, but I do often find myself fat fingering more keys than I used to. And the funny thing is that I’ve been fat fingering on a normal keyboard as well. I have to wonder if it has something to do with being more used to split and having to go back. While I can mostly type without looking at the keyboard like before, every once in a while I find myself confirming my hand and finger placement.</p>\n<p>I also have quite a bit to grow into once I decide to play around more with the key mappings and layers.</p>\n<p>I think at this point, if I had to choose one keyboard to go with, I’d choose the Moonlander. The only thing I would miss the standard keyboard for would be gaming. I don’t think I could get used to a split keyboard as fast for games. But who knows, anything is possible.</p>\n<p>I think I do want to get a new TRRS cable (the cable that connects the 2 halves). The one that it came with is just so long, it’d be nice to have a shorter one that I don’t need to coil.</p>\n<p>If you’re on the fence about whether you want to get yourself a split keyboard, I’d have to say you should. I’m happy with my purchase.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/59/",
      "url": "https://kpwags.com/reading-log/59/",
      "title": "Reading Log - January 15, 2024 (#59)",
      "content_html": "\n\t\t<p>A little podcast heavy this week with discussions on .NET, CSS Colors, Node.js &amp; More. Also, the U.S. is on the precipice with vaccinations and needless deaths.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.htmhell.dev/adventcalendar/2023/24/\">Never underestimate HTML</a> - <em>Lara Aigmüller</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2024/01/10/substack-realizes-maybe-it-doesnt-want-to-help-literal-nazis-make-money-after-all/\">Substack Realizes Maybe It Doesn’t Want To Help Literal Nazis Make Money After All (But Only Literal Nazis)</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2024/01/astronomers-think-they-finally-know-origin-of-enormous-cosmic-smoke-rings/\">Astronomers think they finally know origin of enormous “cosmic smoke rings“</a> - <em>Jennifer Ouellette</em></li>\n<li><a href=\"https://www.theverge.com/2024/1/9/24031869/nasa-artemis-ii-crewed-moon-mission-delayed-2025\">NASA’s Artemis mission to take humans back to the Moon has been delayed until 2025</a> - <em>Wes Davis</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/womens-hockey-pwhl-pwhpa-labor-cba\">The First CBA In Women’s Hockey Is A Picture Of The Future, And A Story Of The Past</a> - <em>Maitreyi Anantharaman</em></li>\n</ul>\n<hr />\n<h2>Health &amp; Fitness</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2024/01/anti-vaccine-nonsense-will-likely-kill-thousands-this-season-fda-officials-say/\">US verges on vaccination tipping point, faces thousands of needless deaths: FDA</a> - <em>Beth Mole</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://changelog.com/news/css-color-party-zDj4\">JS Party #273: CSS Color Party</a></li>\n<li><a href=\"https://dotnetcore.show/episode-121-dotnet-discussion-with-isaac-levin/\">The Modern .NET Show #121: A .NET Discussion with Isaac Levin</a></li>\n<li><a href=\"https://podrocket.logrocket.com/nodejs-core\">PodRocket: State of the Node.js core with Colin Ihrig</a></li>\n<li><a href=\"https://www.boweryboyshistory.com/2023/04/the-great-new-york-city-pizza-tour-history-by-the-slice.html\">The Bowery Boys Podcast #409: The Great New York City Pizza Tour: History By The Slice</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1843\">.NET Rocks #1843: Cypress 12 with Ely Lucas</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2024/1/9/24031612/the-mandalorian-movie-star-wars\">The Mandalorian and Grogu are getting a movie</a> - <em>Andrew Webster</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Metallica - Fade to Black</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/FcoUvu0mGog\" title=\"Metallica - Fade to Black\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/12/what-i-learned-styling-rss-feeds/",
      "url": "https://kpwags.com/posts/2024/01/12/what-i-learned-styling-rss-feeds/",
      "title": "What I Learned: Styling RSS Feeds",
      "content_html": "\n\t\t<p>I’m a big fan of RSS feeds. I believe that everyone who has a blog or a personal site should have one set up so that others can consume their content. The one downside is that when you open the RSS link in your browser, it renders as XML which can be confusing, especially to those who might not know what RSS or XML is.</p>\n<p>A while back I stumbled onto a <a href=\"https://darekkay.com/blog/rss-styling/\">post</a> by Darek Kay who had figured out how to make the feeds look nicer using <a href=\"https://developer.mozilla.org/en-US/docs/Web/XSLT/Transforming_XML_with_XSLT\">XML &amp; XSLT</a> to make them look nicer. The gist of it is XSLT stands for Extensible Stylesheet Language Transformation, and what it does it transform XML into a different format, in this case, HTML. I took a quick look at how I was building my feeds with Next.js and realized that it wouldn’t be super simple to implement so I threw it on the back burner and pretty much forgot about it.</p>\n<p>A week ago I saw another <a href=\"https://rknight.me/blog/styling-rss-and-atom-feeds/\">post</a>, this one by Robb Knight talking about how he styled his feeds. Thinking about it some more and looking at Robb’s post (who also got the idea from Darek), I realized with my migration to <a href=\"https://www.11ty.dev/\">Eleventy</a>, this would actually be much more (easily) feasible than it was with Next.js.</p>\n<p>I’d highly recommend checking out both <a href=\"https://darekkay.com/blog/rss-styling/\">Darek’s post</a> and <a href=\"https://rknight.me/blog/styling-rss-and-atom-feeds/\">Robb’s post</a> since they’re who got the ball rolling for me, but here’s some of the highlights of what I did.</p>\n<p>Like Robb &amp; Darek, I started with <a href=\"https://github.com/genmon/aboutfeeds/blob/main/tools/pretty-feed-v3.xsl\">pretty-feed-v3</a> as it provided a good jumping off point. And again, like both of them, I pulled out all the Tailwind code that it came with in favor of my own CSS stylesheet.</p>\n<p>It has been a long while since I last used XML &amp; XSLT...we’re talking 10+ years. It took me a little bit to figure out exactly what I needed to do. It didn’t help that I started with my Atom feed where pretty-feed-v3 was focused on the RSS spec.</p>\n<h2>XML &amp; XSLT</h2>\n<p>Actually, let’s back up a little bit here to go over some XML parsing for those who might not be familiar.</p>\n<p>Let’s look at the Atom XML for my site.</p>\n<pre class=\"language-xml\" tabindex=\"0\"><code class=\"language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>feed</span> <span class=\"token attr-name\">xmlns</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>http://www.w3.org/2005/Atom<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xml:</span>base</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://kpwags.com/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">></span></span>Keith Wagner<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>subtitle</span><span class=\"token punctuation\">></span></span>Thoughts and musings of a nerd and software developer.<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>subtitle</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://kpwags.com/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://kpwags.com/rss/atom.xml<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>self<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>updated</span><span class=\"token punctuation\">></span></span>2024-01-10T00:00:00Z<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>updated</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>id</span><span class=\"token punctuation\">></span></span>https://kpwags.com/<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>id</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>author</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>name</span><span class=\"token punctuation\">></span></span>Keith Wagner<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>name</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>email</span><span class=\"token punctuation\">></span></span>hello@kpwags.com<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>email</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>author</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>entry</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">></span></span>Remembering Cookie<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://kpwags.com/posts/2024/2024-01-10-remembering-cookie/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>updated</span><span class=\"token punctuation\">></span></span>2024-01-10T00:00:00Z<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>updated</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>id</span><span class=\"token punctuation\">></span></span>https://kpwags.com/posts/2024/2024-01-10-remembering-cookie/<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>id</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>content</span><span class=\"token punctuation\">></span></span><span class=\"token comment\">&lt;!-- The HTML Content --></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>content</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>entry</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token comment\">&lt;!-- More Entries --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>feed</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>The way XSLT navigates XML is much like you’d see in a file directory. So when you see something like</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xsl:</span>value-of</span> <span class=\"token attr-name\">select</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/atom:feed/atom:title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span></code></pre>\n<p>What that is saying (ignore the <code>atom:</code>, that was my first gotcha I dealt with), is navigate to the <code>&lt;feed&gt;</code> node and find the node within it called <code>&lt;title&gt;</code></p>\n<p>The gotcha with Atom is that the nodes in XSLT need to be prefixed with <code>atom:</code>. But in general, each '/' indicates traveling down an XML node as you would your file system.</p>\n<h2>Back to Building</h2>\n<p>Since I started with Atom, the paths in the starter template didn’t work as they were built for the RSS spec. Needless to say, most of the page came back blank. Once I re-familiarized myself with XSLT, I started to remember what I was doing. I changed the paths to match Atom...and still nothing. That’s when I figured out the gotcha I mentioned above about having to prefix the paths with <code>atom:</code>. Easy enough, I did that and sure enough, the content appeared.</p>\n<p>The next step was building the styles in my CSS stylesheet. I got it looking nice and how I wanted it.</p>\n<p>I was about ready to create a copy of the file for my RSS spec feed, when I noticed that Robb had discovered that if the value in the path wasn’t found, it outputted nothing. The lightbulb went off in my head as well since I remembered what the pages looked like when I first started. Like Robb, I created duplicate nodes inside the different elements:</p>\n<pre class=\"language-html\" tabindex=\"0\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xsl:</span>value-of</span> <span class=\"token attr-name\">select</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/atom:feed/atom:title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xsl:</span>value-of</span> <span class=\"token attr-name\">select</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/rss/channel/title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>This means that when the user is viewing the Atom feed, they’ll get the top node with the bottom node returning blank. And if they’re viewing the RSS feed, it will be the reverse.</p>\n<p>I made the same changes to all of my different feeds and I was just about done.</p>\n<p>The only thing I then had to figure out was how to configure custom headers in Netlify to support Safari. Per pretty-feeds, I needed to add custom headers to the feeds so that Safari would render them properly.</p>\n<pre><code>Content-Type: application/xml; charset=utf-8\nx-content-type-options: nosniff\n</code></pre>\n<p>I found their <a href=\"https://docs.netlify.com/routing/headers/#syntax-for-the-headers-file\">documentation</a> and I was good to go. I created the pull request, checked the deploy preview, and sure enough the headers were set properly.</p>\n<p>You can view the full code for my <a href=\"https://github.com/kpwags/kpwags.11ty/blob/main/src/rss/everything_atom.njk\">Atom</a> &amp; <a href=\"https://github.com/kpwags/kpwags.11ty/blob/main/src/rss/everything_rss.njk\">RSS</a> feeds, the <a href=\"https://github.com/kpwags/kpwags.11ty/blob/main/public/feedstyles/rss.xsl\">XSL Stylesheet</a>, &amp;  the <a href=\"https://github.com/kpwags/kpwags.11ty/blob/main/public/css/feeds.css\">CSS Stylesheet</a> on GitHub.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/barry-strauss-the-war-that-made-the-roman-empire/",
      "url": "https://kpwags.com/books/barry-strauss-the-war-that-made-the-roman-empire/",
      "title": "Book Notes for The War that Made the Roman Empire: Antony, Cleopatra, and Octavian at Actium",
      "content_html": "\n\t\t<p>Like <a href=\"https://kpwags.com/books/mike-duncan-the-storm-before-the-storm/\">The Storm Before the Storm</a>, I had discovered this book on a <a href=\"https://www.youtube.com/watch?v=ddFGcvbi-JA\">Hardcore History Addendum episode</a>.</p>\n<p>This was a fantastic book going from the death of Julius Caesar to what would become the Roman Empire. Barry Strauss does a great job of going through the history of the rivalry between Mark Antony and Octavian (who would later become Augustus).</p>\n<p>The story was fascinating as it goes through the political intrigue caused by Antony’s affairs with Cleopatra and the seemingly constant flows back and forth of defectors.</p>\n<p>Eventually the rivalry becomes a war and the book describes in detail the various events that took place as well as the various mistakes and missteps Antony made that led history to turn out the way it did.</p>\n<p>Despite the large amount of detail, this was a relatively easy, and quite informative read.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/never-underestimate-html/",
      "url": "https://kpwags.com/notes/never-underestimate-html/",
      "title": "Never Underestimate HTML",
      "content_html": "\n\t\t<blockquote>\n<p>Writing HTML in itself isn’t that hard, no.</p>\n</blockquote>\n<blockquote>\n<p>But: building user interfaces by elegantly composing this language’s features with CSS, creating pleasant designs and user experiences worth remembering requires experience and skills that should not be underestimated. Neither should HTML; it’s one of the languages—if not the most important one of them all—that shape the web.</p>\n</blockquote>\n<p>Web browsers can be incredibly forgiving in terms of displaying content to the user, so mistakes can go unnoticed. But those mistakes can cause problems with accessibility and many other things. Writing good, accessible HTML takes skill and should never be discounted.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/giving-yourself-stakes/",
      "url": "https://kpwags.com/notes/giving-yourself-stakes/",
      "title": "Giving Yourself Stakes",
      "content_html": "\n\t\t<blockquote>\n<p>Build something that matters to you, at least a little bit. The classic is to make yourself a personal website. That’s <em><strong>real</strong></em>. That means the things you learn you can attach to a real project.</p>\n</blockquote>\n<p>I’ve always felt I learn better when I have something real to build. Another todo app that sits around and clutters my file system is good and all, but the lesson feels muted.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/10/remembering-cookie/",
      "url": "https://kpwags.com/posts/2024/01/10/remembering-cookie/",
      "title": "Remembering Cookie",
      "content_html": "\n\t\t<p>Yesterday, January 9, 2024 my wife and I had to say goodbye to our sweet cat Cookie. She was 14 1/2 years old.</p>\n<p>I got Cookie before my wife and I were together when Cookie was a kitten. I remember I could hold her in the palm of my hand she was so tiny. She came with fleas and with ear mites, but quickly got her healthy and on the mend. Of the two cats I had at the time, she was always the sweet one.</p>\n<p>She got me through some tough times in my life. She didn’t know what was going on, or the troubles I was struggling with, but she seemed to know something was up and made sure to cuddle more.</p>\n<p>She was sometimes mischievous, getting into places she shouldn’t. She was the epitome of a curious cat. She loved attention, she loved the pets, and oh boy did she love food. She became somewhat of a chonkers before I realized it and had to be more mindful how much I fed her. (In my defense, my first cat was very much a grazer and would only eat when she was hungry.)</p>\n<p>She was the sweetest cat I had ever met and she was sweet and loving to the very end. She always wanted cuddles. If I was sitting on the couch, she would want to wedge herself in between me and the armrest. If I was lying in bed, she wanted to be right next to me, and sometimes on top of me. It wouldn’t take much to get her to start purring. A little scritch behind the ears or some chin scritches and she turned into putty. She was such a loving cat and I’m going to miss her so much.</p>\n<p>As my wife has said,</p>\n<blockquote>\n<p>“I’m not sure if cats can love, but Cookie definitely can.”</p>\n</blockquote>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/YhMwSSjFN1-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/YhMwSSjFN1-1024.gif 1024w\" /><img alt=\"Cookie curled up in a ball in her bed\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/YhMwSSjFN1-1024.jpeg\" width=\"1024\" height=\"1365\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/gYERCA49I7-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/gYERCA49I7-1024.gif 1024w\" /><img alt=\"Cookie sitting on the couch next to my wife\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/gYERCA49I7-1024.jpeg\" width=\"1024\" height=\"1365\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/6hydkXp0ns-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/6hydkXp0ns-1024.gif 1024w\" /><img alt=\"Cookie sitting next to me on the couch\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/6hydkXp0ns-1024.jpeg\" width=\"1024\" height=\"1365\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/09/figuring-out-notes/",
      "url": "https://kpwags.com/posts/2024/01/09/figuring-out-notes/",
      "title": "Figuring Out Notes",
      "content_html": "\n\t\t<p>Over the last year plus, I’ve been trying to figure out the best way I want to handle my notes. I’ve been bouncing between apps trying to decide what app I want to use. I’ve been hoping I would be able to find a single app to handle both quick notes and longer form pieces like blog posts.</p>\n<p>My requirements have been that I can sync notes between my MacBook, iPhone, &amp; iPad. If I can sync with my Windows PC, that’d be an added bonus. But since I really only use my Windows machine for gaming, I’m not as concerned with Windows. My other requirement is that I want my notes to be in markdown. I don’t want any proprietary formats or anything of the like.</p>\n<p>Let me list the various apps and services I’ve tried and used:</p>\n<ul>\n<li>Bear</li>\n<li>Ulysses</li>\n<li>Notion</li>\n<li>Dropbox Synched Folder w/ Visual Studio Code &amp; 1Writer</li>\n<li>Obsidian</li>\n<li>iA Writer</li>\n</ul>\n<p>Each one provided some benefits with different drawbacks.</p>\n<h2>Bear</h2>\n<p><a href=\"https://bear.app/\">Bear</a> is an absolutely beautiful application. It’s available on MacOS, iOS, &amp; iPad OS. Assuming you pay for the subscription, which is a very reasonable $30/year, it will sync across your devices (as well as other niceties).</p>\n<p>The biggest drawback with Bear, is that while you can export your notes, your notes are in what I can best describe as a black box. Bear syncs them, you can download them no problem if you so choose, but you can’t view the file structure. While this was not necessarily a requirement for me, I wasn’t a huge fan.</p>\n<h2>Ulysses</h2>\n<p>I’ll fully admit I didn’t necessarily give <a href=\"https://ulysses.app/\">Ulysses</a> a full evaluation, but in the little bit I used it, it seemed like it provided a lot more than what I needed. The features it offered I didn’t dig super deep into, but it seemed to be good for more in depth writing rather than simple notes. I’ll admit I did play around with it as a tool for writing blog posts, but moved away from that as well.</p>\n<h2>Notion</h2>\n<p>For Notion, simple note taking seems like a waste of its abilities. Notion is a powerful application. Its database functionality is fantastic. I use it for maintaining my book backlog, site content, saving articles and bookmarks, and more. For note taking however, it didn’t work for me. It focused too much with online mode and would struggle if I lost connectivity. I use Notion, I love notion. For notes, it just wasn’t a good fit.</p>\n<h2>Dropbox Synched Folder with VS Code &amp; 1Writer</h2>\n<p>This fixed the issue I had with Bear. Here I had a folder in Dropbox that I could view all the files it contained. Dropbox would handle the synching, and I could use various apps to view the notes. For my Mac &amp; Windows, that was VS Code. While certainly a great development tool, it also provided some useful help with regards to markdown files. For iOS and my iPad, I found an app called <a href=\"https://1writerapp.com/\">1Writer</a> that could access Dropbox on my iPhone &amp; iPad to allow me to view and edit all the files.</p>\n<p>I used this for a while, but I think that while VS Code would allow me view and edit the files without issues, I lost some of the niceties of a note taking app I had gotten used to with apps like Bear. I could add tags to markdown files, and 1Writer would handle them, but VS Code just sorta shrugged, not knowing they were anything other than text. Not a complete killer, but it’d be nice to have a nicer way to group files by tags.</p>\n<h2>Obsidian</h2>\n<p><a href=\"https://obsidian.md/\">Obsidian</a> had been getting a lot of praise in some of my social feeds. Checking it out, it reminded me a lot of VS Code, but one dedicated to note taking. It seemed to have a fantastic plugin collection and a large community. The iOS and iPad OS apps unfortunately didn’t support using a “vault” with Dropbox, so I decided to move my notes over to iCloud so that I could keep the notes synched with my iPhone, iPad, &amp; Mac.</p>\n<p>The app has a lot of neat features and I’m sure I didn’t get through half of what it can offer through plugins. I might go back and start playing with some of the plugins and see what they all bring to the table.</p>\n<p><em>Side Note:</em> One issue I had was that my Mac would constantly get “stuck” synching. It just wouldn’t sync for whatever reason and my only fix I could find was to either restart my laptop, or to run the command <code>killall bird</code> in a terminal to unblock the synching. I don’t blame Obsidian for this, but unfortunately it became an issue.</p>\n<h2>iA Writer</h2>\n<p>I’ve heard quite a bit about <a href=\"https://ia.net/writer\">iA Writer</a>. I’ve seen plenty of people swear by it. Having used it for a bit, I can see why. It’s simple and clean. For writing, it provides a great no frills experience. You can add folders to it to provide easy access to your files.</p>\n<p>After using it, it is great for writing. Writing drafts of my posts have been great. The focused look of the markdown is what I’m looking for. For quick notes, I’m not certain how good it is just yet. It also has the added bonus of being a one-time payment and no subscription.</p>\n<p><em>Side Note:</em> I could not get it to support my Dropbox notes folder on my iPhone. I’m not sure what I’m doing wrong, but it’s why I’m using iCloud rather than Dropbox. It worked on my iPad so I figure it’s supported on iPhone as well...I just can’t get it to work. Oddly enough, despite it also using iCloud, the sync blocking hasn’t happened for me thus far.</p>\n<h2>Where I’m At Now</h2>\n<p>I’ve been using iA Writer for about a month now. So far I’m happy with it. Still need to figure out the quick, shorter notes, but it’s not something I’m super concerned about. I definitely want to give it its fair shake. If I continue to write more for my site like I intend to, it should be exactly what I want.</p>\n<p>What is your writing &amp; note system. Do you use a certain app? An organization system?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/58/",
      "url": "https://kpwags.com/reading-log/58/",
      "title": "Reading Log - January 8, 2024 (#58)",
      "content_html": "\n\t\t<p>This week is a little space heavy with news of a Lunar lander having issues, data about Neptune &amp; Uranus, Jupiter's moon Io, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://cezarypiatek.github.io/post/maintainable-test-fixture/\">Common Setup and Teardown in dotnet tests without test framework magic</a> - <em>Cezary Piątek</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://github.blog/2024-01-05-5-ways-to-make-your-devsecops-strategy-developer-friendly/\">5 ways to make your DevSecOps strategy developer-friendly</a> - <em>Nick Liffen</em></li>\n<li><a href=\"https://blog.johnnyreilly.com/bun-overview\">Overview of Bun, a JavaScript runtime</a> - <em>John Reilly &amp; Megan Lee</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.rollingstone.com/culture/culture-commentary/internet-future-about-to-get-weird-1234938403/\">The Internet Is About to Get Weird Again</a> - <em>Anil Dash</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://spacenews.com/peregrine-lander-suffers-anomaly-after-launch/\">Peregrine lander suffers anomaly after launch</a> - <em>Jeff Foust</em></li>\n<li><a href=\"https://phys.org/news/2024-01-images-reveal-neptune-uranus.html\">New images reveal what Neptune and Uranus really look like</a> - <em>University of Oxford</em></li>\n<li><a href=\"https://www.latimes.com/california/story/2024-01-02/space-shuttle-endeavours-giant-orange-external-tank-begins-final-journey\">Space shuttle Endeavour’s giant orange external tank begins final journey</a> - <em>Rong-Gong Lin II</em></li>\n<li><a href=\"https://www.space.com/nasa-juno-spacecraft-jupiter-moon-io-photos\">NASA Juno spacecraft reveals Jupiter's volcanic moon Io like never before in spectacular new images</a> - <em>Robert Lea</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/24029754/wizards-coast-magic-the-gathering-ai-art-marketing-image\">Wizards of the Coast admits using AI art after banning AI artz</a> - <em>Oli Welsh</em></li>\n<li><a href=\"https://www.polygon.com/24023080/tetris-record-kill-screen-beat-nes-blue-scuti\">Watch a 13-year-old become the first person to ever beat Classic Tetris</a> - <em>Nicole Clark</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://hanselminutes.com/889/bings-move-to-net-7-with-principal-engineer-ben-watson\">Hanselminutes #889: Bing's move to .NET 7 with Principal Engineer Ben Watson</a></li>\n<li><a href=\"https://podrocket.logrocket.com/react-and-frontend-development\">PodRocket: React and frontend development with Josh Comeau</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2024/01/03/transforming-the-post-incarceration-experience/\">Transforming the post-incarceration experience</a> - <em>Kai Ryssdal &amp; Maria Hollenhorst</em></li>\n<li><a href=\"https://www.techdirt.com/2024/01/03/republicans-trying-to-kill-program-that-brings-affordable-broadband-to-the-poor/\">Republicans Trying To Kill Program That Brings Affordable Broadband To The Poor</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Deftones - Simple Man</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/fXGp4wC6Ha0\" title=\"Deftones - Simple Man\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/05/what-i-learned-c-primary-constructors/",
      "url": "https://kpwags.com/posts/2024/01/05/what-i-learned-c-primary-constructors/",
      "title": "What I Learned: C# Primary Constructors",
      "content_html": "\n\t\t<p>When writing C# code, I often use dependency injection to inject the various services and repositories I need in the class I’m working on. Sometimes that would end up making the top of the classes rather “busy”. C# 12 has introduced a new way to make constructors and I love it.</p>\n<p>In C# 11 and earlier, I would create a class and its dependencies as follows:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Handler</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">IAuthService</span> _authService<span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">IHttpContextAccessor</span> _httpContextAccessor<span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token function\">Handler</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">IAuthService</span> authService<span class=\"token punctuation\">,</span> <span class=\"token class-name\">IHttpContextAccessor</span> httpContextAccessor<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n\t\t_authService <span class=\"token operator\">=</span> authService<span class=\"token punctuation\">;</span>\n\t\t_httpContextAccessor <span class=\"token operator\">=</span> httpContextAccessor<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token comment\">// the rest of the code</span>\n\t<span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I would have to individually create each of the dependencies as private variables at the top and assign them in the constructor. Normally I only deal with a small number of injected dependencies, but there are a few classes where there might be four or five which can cause the top of the class to feel cluttered.</p>\n<p>It’s not a big deal of course, but if the code can be simplified...</p>\n<p>C# 12 has introduced primary constructors and the above code can be simplified to:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Handler</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">IAuthService</span> authService<span class=\"token punctuation\">,</span> <span class=\"token class-name\">IHttpContextAccessor</span> httpContextAccessor<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token comment\">// the rest of the code</span>\n\t<span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Everywhere in the class I would have used to use <code>_authService</code> and <code>_httpContextAccessor</code>, I now just use <code>authService</code> and <code>httpContextAccessor</code>. The dependency injection continues to work.</p>\n<p>Both methods work, if you prefer the previous way, you can use that. But for me, the new method looks cleaner and I’m a fan.</p>\n<hr />\n<p><em>Side Note:</em> This is the first of what I hope will become a weekly series titled “What I Learned”. Essentially every week I plan to share something I learned over the last week or so. It could be something related to software development like today, or could be related to history, or any number of topics. So keep your eye out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/05/introducing-notes/",
      "url": "https://kpwags.com/posts/2024/01/05/introducing-notes/",
      "title": "Introducing Notes",
      "content_html": "\n\t\t<p>One thing you might have recently noticed is there is now a new header option called “Notes” on my site. I saw <a href=\"https://notes.jim-nielsen.com/\">Jim Nielsen’s notes page</a> and liked the idea so I decided to implement my own version.</p>\n<p>For me, notes will be where I share links that are interesting to me, but where I want to add a little bit of context or a little bit of my own thoughts, or (ahem) <em>notes</em> on it. Think of them like tweets or toots with a link and a few of my thoughts on the matter.</p>\n<p>As with reading logs &amp; book notes, they’ll have their own separate RSS feed, but will also be included in my global feed.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/04/december-2023-check-in/",
      "url": "https://kpwags.com/posts/2024/01/04/december-2023-check-in/",
      "title": "December 2023 Check-In",
      "content_html": "\n\t\t<p>December kind of sucked. Halfway through the month, I caught bronchitis, and it took me 2 weeks to finally kick it to the curb. This completely curtailed the Christmas festivities as I definitely did not want to spread this to anyone else.</p>\n<p>The month started off well enough. The first weekend I was able to brew some beer. I ended up brewing a clone of Harpoon’s Winter Warmer. I just bottled it so I’ll find out in a bit if it’s any good, but it was fun to brew another batch as it had been a little while.</p>\n<p>I also went to the Lehigh Valley Phantoms teddy bear toss game. It was fun throwing all the stuffed animals onto the ice after the Phantoms scored their first goal. The ended up winning 4-1 which made it even sweeter.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/S17dnqB_yK-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/S17dnqB_yK-1920.gif 1920w\" /><img alt=\"Teddy bears littering the ice during a hockey game\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/S17dnqB_yK-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>Unfortunately that was the peak of the month. I caught bronchitis and probably laryngitis, and the rest of the month was me coughing up a lung barely able to speak. I was initially hopeful that I’d be able to recover in time for Christmas, but then it wouldn’t give, and then my wife caught it and we were both down for the count. All things considered though, we had a nice quiet Christmas together, coughing aside.</p>\n<p>Another good thing that came out of it was that I was able to finish migrating my site from Next.js to Eleventy. Shortly after Christmas, I took my Next.js implementation offline and replaced it with Eleventy. So far, I’m quite happy with the result.</p>\n<p>The rest of the month was just us taking it easy.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Nope</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Lifted a little before sickness, but otherwise, not much.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/whitelash-hope-and-horror-in-a-changing-america-wesley-lowery/17944198?ean=9780358393269\">American Whitelash</a> by Wesley Lowery</li>\n<li><a href=\"https://bookshop.org/p/books/humble-pi-when-math-goes-wrong-in-the-real-world-matt-parker/18297581?ean=9780593084694\">Humble Pi</a> by Matt Parker</li>\n<li><a href=\"https://bookshop.org/p/books/the-pale-blue-eye-louis-bayard/8813994?ean=9780060733988\">The Pale Blue Eye</a> by Louis Bayard</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/the-storm-before-the-storm-the-beginning-of-the-end-of-the-roman-republic-mike-duncan/7215014?ean=9781541724037\">The Storm Before the Storm</a> by Mike Duncan</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/53\">December 4 (#53)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/54\">December 11 (#54)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/55\">December 19 (#55)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/56\">December 25 (#56)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/12/03/a-successful-i-hope-brew-day/\">brewing another batch of beer</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/12/06/moving-away-from-nextjs/\">moving away from Next.js</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/12/07/data-privacy/\">data privacy</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/12/08/how-do-guitar-players-make-it-look-so-easy/\">wondering how guitar players make it look so easy</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/12/14/switching-to-eleventy/\">switching to Eleventy</a>, <a href=\"https://kpwags.com/posts/2023/12/27/now-on-11ty/\">now being on Eleventy</a>, and <a href=\"https://kpwags.com/posts/2023/12/28/the-process-of-switching-to-11ty/\">the process of switching</a>.</li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Completed <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n<li>Continued <a href=\"https://www.nintendo.com/us/store/products/super-mario-rpg-switch/\">Super Mario RPG</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/burning-shores/\">Horizon Forbidden West: Burning Shores</a></li>\n<li>Got back into <a href=\"https://www.halowaypoint.com/halo-infinite\">Halo Infinite Multiplayer</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt3526078/\">Schitt’s Creek</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt2261227/\">Altered Carbon</a></li>\n<li>Started season 4 of <a href=\"https://www.imdb.com/title/tt7772588/\">For All Mankind</a></li>\n<li>Started season 3 of <a href=\"https://www.imdb.com/title/tt8111088/\">The Mandalorian</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0374463/\">The Pacific</a></li>\n<li>Started &amp; Finished <a href=\"https://www.imdb.com/title/tt0185906/\">Band of Brothers</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt13103340/\">Father Christmas is Back</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0141926/\">U-571</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1706620/\">Snowpiercer</a></li>\n<li><a href=\"https://www.imdb.com/title/tt9764362/\">The Menu</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0118583/\">Alien: Resurrection</a></li>\n<li><a href=\"https://www.imdb.com/title/tt13405810/\">Quiz Lady</a></li>\n<li><a href=\"https://www.imdb.com/title/tt7131622/\">Once Upon a Time in Hollywood</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1245492/\">This is the End</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/mike-duncan-the-storm-before-the-storm/",
      "url": "https://kpwags.com/books/mike-duncan-the-storm-before-the-storm/",
      "title": "Book Notes for The Storm Before the Storm: The Beginning of the End of the Roman Republic",
      "content_html": "\n\t\t<p>This was an absolutely fascinating look at the Roman Republic leading up to the fall of the republic and the rise of the Roman Empire.</p>\n<p>I was referred to this book from an episode of <a href=\"https://www.dancarlin.com/addendum/\">Hardcore History Addendum</a>. <a href=\"https://www.youtube.com/watch?v=BNB4P_i-Ph0\">Episode 2, Rome Through Duncan’s Eyes</a> had Mike Duncan on to talk about this book.</p>\n<p>The book goes through the different figures who were involved as well as some of the fateful decisions they made that would later weaken and doom the republic.</p>\n<p>As someone who wasn’t super familiar with this era of history, this book did a great job of laying out the details of what the Roman Republic was and the history of the different wars and political intrigue that occurred.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/03/books-i-read-in-2023/",
      "url": "https://kpwags.com/posts/2024/01/03/books-i-read-in-2023/",
      "title": "Books I Read in 2023",
      "content_html": "\n\t\t<p>I read more books in 2023 than I have in any year since I started keeping track. I generally enjoyed most of them but there were some “meh” (at least to me) books as well.</p>\n\n<p>Everyone has different tastes, so please take my ratings with a grain of salt. What I really like, might be bland to you, and vice versa.</p>\n\n<h2>My Favorite Books of the Year</h2>\n\n<p>These were my favorites of the year that I can’t recommend enough.</p>\n\n<media-box title=\"Pacific Crucible: War at Sea in the Pacific, 1941-1942\" author=\"Ian W. Toll\" image=\"https://i.postimg.cc/MpHH9M13/pacific-crucible.jpg\" link=\"https://bookshop.org/p/books/pacific-crucible-war-at-sea-in-the-pacific-1941-1942-ian-w-toll/8754662\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/MpHH9M13/pacific-crucible.jpg\" alt=\"Pacific Crucible: War at Sea in the Pacific, 1941-1942\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/pacific-crucible-war-at-sea-in-the-pacific-1941-1942-ian-w-toll/8754662\">Pacific Crucible: War at Sea in the Pacific, 1941-1942</a></div>\n\t\t\t\t<div class=\"author\">Ian W. Toll</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThe Pacific Theater in WWII is something I wasn’t as familiar with compared to Europe. The writing was fantastic talking about the history of the big players involved and the actions taken at the beginning of the war by both the US and Japan. It was a great read to learn more about WWII and not dry reading either.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Conquering Tides: War in the Pacific Islands, 1942-1944\" author=\"Ian W. Toll\" image=\"https://i.postimg.cc/cH4y7jKp/the-conquering-tide.jpg\" link=\"https://bookshop.org/p/books/the-conquering-tide-war-in-the-pacific-islands-1942-1944-ian-w-toll/8758811?ean=9780393353204\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/cH4y7jKp/the-conquering-tide.jpg\" alt=\"The Conquering Tides: War in the Pacific Islands, 1942-1944\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-conquering-tide-war-in-the-pacific-islands-1942-1944-ian-w-toll/8758811?ean=9780393353204\">The Conquering Tides: War in the Pacific Islands, 1942-1944</a></div>\n\t\t\t\t<div class=\"author\">Ian W. Toll</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n    This book continues right from the last book. It provided a fantastic look into the history or the war in the Pacific.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Twilight of the Gods: War in the Western Pacific, 1944-1945\" author=\"Ian W. Toll\" image=\"https://i.postimg.cc/9FKY27CK/twilight-of-the-gods.jpg\" link=\"https://bookshop.org/p/books/twilight-of-the-gods-war-in-the-western-pacific-1944-1945-ian-w-toll/13150893?ean=9780393868302\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/9FKY27CK/twilight-of-the-gods.jpg\" alt=\"Twilight of the Gods: War in the Western Pacific, 1944-1945\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/twilight-of-the-gods-war-in-the-western-pacific-1944-1945-ian-w-toll/13150893?ean=9780393868302\">Twilight of the Gods: War in the Western Pacific, 1944-1945</a></div>\n\t\t\t\t<div class=\"author\">Ian W. Toll</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis entire trilogy was well-written and incredibly interesting. This book was no different. It was interesting to read about the Allies’ final push and how long it took Japan to accept defeat. It was jaw-dropping and sobering how many lives on both sides were lost because of it all.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Team of Rivals: The Political Genius of Abraham Lincoln\" author=\"Doris Kearns Goodwin\" image=\"https://i.postimg.cc/xTsF7bDf/team-of-rivals.jpg\" link=\"https://bookshop.org/books/team-of-rivals-the-political-genius-of-abraham-lincoln/9780743270755\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/xTsF7bDf/team-of-rivals.jpg\" alt=\"Team of Rivals: The Political Genius of Abraham Lincoln\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/team-of-rivals-the-political-genius-of-abraham-lincoln/9780743270755\">Team of Rivals: The Political Genius of Abraham Lincoln</a></div>\n\t\t\t\t<div class=\"author\">Doris Kearns Goodwin</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI found this book to be incredibly interesting. It was a great look into Lincoln’s political life and how he ran his presidency. The author did a great job of talking about how Lincoln went about making the Emancipation Proclamation as well as getting the 13th amendment passed to end slavery once and for all.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Starter Villain\" author=\"John Scalzi\" image=\"https://i.postimg.cc/KzPTLhm1/starter-villain.jpg\" link=\"https://bookshop.org/p/books/starter-villain-john-scalzi/18753219?ean=9780765389220\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/KzPTLhm1/starter-villain.jpg\" alt=\"Starter Villain\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/starter-villain-john-scalzi/18753219?ean=9780765389220\">Starter Villain</a></div>\n\t\t\t\t<div class=\"author\">John Scalzi</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a fun book to read. I enjoyed the story and the characters.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Black River Orchard\" author=\"Chuck Wendig\" image=\"https://i.postimg.cc/wjrDYkWj/black-river-orchard.jpg\" link=\"https://bookshop.org/p/books/black-river-orchard-chuck-wendig/19598190?ean=9780593158746\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/wjrDYkWj/black-river-orchard.jpg\" alt=\"Black River Orchard\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/black-river-orchard-chuck-wendig/19598190?ean=9780593158746\">Black River Orchard</a></div>\n\t\t\t\t<div class=\"author\">Chuck Wendig</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI really enjoyed the story. It had interesting characters and it kept me on the edge of my seat.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"A City on Mars: Can We Settle Space, Should We Settle Space, and Have We Really Thought This Through?\" author=\"Kelly &amp; Zach Weinersmith\" image=\"https://i.postimg.cc/L5g9MfZP/city-on-mars.jpg\" link=\"https://bookshop.org/p/books/a-city-on-mars-can-we-settle-space-should-we-settle-space-and-have-we-really-thought-this-through-zach-weinersmith/19777591?ean=9781984881724\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/L5g9MfZP/city-on-mars.jpg\" alt=\"A City on Mars: Can We Settle Space, Should We Settle Space, and Have We Really Thought This Through?\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/a-city-on-mars-can-we-settle-space-should-we-settle-space-and-have-we-really-thought-this-through-zach-weinersmith/19777591?ean=9781984881724\">A City on Mars: Can We Settle Space, Should We Settle Space, and Have We Really Thought This Through?</a></div>\n\t\t\t\t<div class=\"author\">Kelly & Zach Weinersmith</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a fantastic look at the various things we’d have to look at as a society to actually settle space. It’s written in an easy to understand way and really made me think about the near future of space exploration and settlement.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<h2>Books I Enjoyed</h2>\n\n<p>They might not have been my favorites, but I still really enjoyed these.</p>\n\n<media-box title=\"Snow Crash\" author=\"Neal Stephenson\" image=\"https://i.postimg.cc/qB1BFc4c/snow-crash.jpg\" link=\"https://bookshop.org/p/books/snow-crash-neal-stephenson/7327954?ean=9780553380958\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/qB1BFc4c/snow-crash.jpg\" alt=\"Snow Crash\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/snow-crash-neal-stephenson/7327954?ean=9780553380958\">Snow Crash</a></div>\n\t\t\t\t<div class=\"author\">Neal Stephenson</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThe “ultra-capitalist” future felt kind of weird. The story itself started off slow but picked up nicely. The ending was a little confusing and befuddling though.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Bond King: How One Man Made a Market, Built an Empire, and Lost It All\" author=\"Mary Childs\" image=\"https://i.postimg.cc/8zsWVF0g/bondking.jpg\" link=\"https://bookshop.org/books/the-bond-king-how-one-man-made-a-market-built-an-empire-and-lost-it-all/9781250120847\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/8zsWVF0g/bondking.jpg\" alt=\"The Bond King: How One Man Made a Market, Built an Empire, and Lost It All\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-bond-king-how-one-man-made-a-market-built-an-empire-and-lost-it-all/9781250120847\">The Bond King: How One Man Made a Market, Built an Empire, and Lost It All</a></div>\n\t\t\t\t<div class=\"author\">Mary Childs</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI’ve heard of Pimco and of Bill Gross. This was an interesting read into his history and a bit of an internal look at trading companies.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Bomb: Presidents, Generals, and the Secret History of Nuclear War\" author=\"Fred Kaplan\" image=\"https://i.postimg.cc/cJcGnZJ7/the-bomb.jpg\" link=\"https://bookshop.org/books/the-bomb-presidents-generals-and-the-secret-history-of-nuclear-war/9781982107307\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/cJcGnZJ7/the-bomb.jpg\" alt=\"The Bomb: Presidents, Generals, and the Secret History of Nuclear War\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-bomb-presidents-generals-and-the-secret-history-of-nuclear-war/9781982107307\">The Bomb: Presidents, Generals, and the Secret History of Nuclear War</a></div>\n\t\t\t\t<div class=\"author\">Fred Kaplan</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an excellent read. It was interesting to see how the presidents from Truman to Trump thought about nuclear weapons and how we’ve managed to avoid using them. The work revealed from many in the Department of Defense and other experts was fascinating.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Bomber Mafia: A Dream, a Temptation, and the Longest Night of the Second World War\" author=\"Malcolm Gladwell\" image=\"https://i.postimg.cc/MK9R40tY/bombermafia.jpg\" link=\"https://bookshop.org/p/books/the-bomber-mafia-a-dream-a-temptation-and-the-longest-night-of-the-second-world-war-malcolm-gladwell/17377135?ean=9780316296816\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/MK9R40tY/bombermafia.jpg\" alt=\"The Bomber Mafia: A Dream, a Temptation, and the Longest Night of the Second World War\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-bomber-mafia-a-dream-a-temptation-and-the-longest-night-of-the-second-world-war-malcolm-gladwell/17377135?ean=9780316296816\">The Bomber Mafia: A Dream, a Temptation, and the Longest Night of the Second World War</a></div>\n\t\t\t\t<div class=\"author\">Malcolm Gladwell</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a good read, especially after having just finished The Bomb. It was interesting reading about how the different early Army Air Corps officers felt about and used their new weapons of war.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"American Nations: A History of the Eleven Rival Regional Cultures of North America\" author=\"Colin Woodard\" image=\"https://i.postimg.cc/QxhkvdDj/american-nations.jpg\" link=\"https://bookshop.org/p/books/american-nations-a-history-of-the-eleven-rival-regional-cultures-of-north-america-colin-woodard/16638225?ean=9780143122029\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/QxhkvdDj/american-nations.jpg\" alt=\"American Nations: A History of the Eleven Rival Regional Cultures of North America\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/american-nations-a-history-of-the-eleven-rival-regional-cultures-of-north-america-colin-woodard/16638225?ean=9780143122029\">American Nations: A History of the Eleven Rival Regional Cultures of North America</a></div>\n\t\t\t\t<div class=\"author\">Colin Woodard</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tIt was an interesting read talking about the history of the different areas of North America and how their founding and upbringing influence us even today. It was written over 10 years ago, but still hits the notes of the division we’re dealing with today.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Liar’s Poker\" author=\"Michael Lewis\" image=\"https://i.postimg.cc/bNQ9q5Mf/liars-poker.jpg\" link=\"https://bookshop.org/p/books/liar-s-poker-michael-lewis/8855267?ean=9780393338690\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/bNQ9q5Mf/liars-poker.jpg\" alt=\"Liar’s Poker\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/liar-s-poker-michael-lewis/8855267?ean=9780393338690\">Liar’s Poker</a></div>\n\t\t\t\t<div class=\"author\">Michael Lewis</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a lot different from his other books. It did provide an interesting look into one of the more famous names in Wall Street in the Saloman Brothers.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"American Gods\" author=\"Neil Gaiman\" image=\"https://i.postimg.cc/vTdLYQ6L/american-gods.jpg\" link=\"https://bookshop.org/p/books/american-gods-neil-gaiman/6438874?ean=9780063081918\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/vTdLYQ6L/american-gods.jpg\" alt=\"American Gods\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/american-gods-neil-gaiman/6438874?ean=9780063081918\">American Gods</a></div>\n\t\t\t\t<div class=\"author\">Neil Gaiman</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tEver read a book and struggle to define the synopsis? I can’t fully define the synopsis, but I enjoyed the story.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Anansi Boys\" author=\"Neil Gaiman\" image=\"https://i.postimg.cc/76znrCbZ/anansi-boys.jpg\" link=\"https://bookshop.org/p/books/anansi-boys-neil-gaiman/6438691?ean=9780063070738\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/76znrCbZ/anansi-boys.jpg\" alt=\"Anansi Boys\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/anansi-boys-neil-gaiman/6438691?ean=9780063070738\">Anansi Boys</a></div>\n\t\t\t\t<div class=\"author\">Neil Gaiman</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI’m not sure whether I liked this better than American Gods, but it was an enjoyable read with some interesting characters.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Heart is a Lonely Hunter\" author=\"Carson McCullers\" image=\"https://i.postimg.cc/9X9QRY1p/heart-lonely-hunter.jpg\" link=\"https://bookshop.org/p/books/heart-is-a-lonely-hunter-carson-mccullers/266374\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/9X9QRY1p/heart-lonely-hunter.jpg\" alt=\"The Heart is a Lonely Hunter\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/heart-is-a-lonely-hunter-carson-mccullers/266374\">The Heart is a Lonely Hunter</a></div>\n\t\t\t\t<div class=\"author\">Carson McCullers</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI have a hard time giving my thoughts on this as it’s so far outside of my normal reading material. I enjoyed the story though and found the characters to be interesting.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Terraformers\" author=\"Annalee Newitz\" image=\"https://i.postimg.cc/PJL5pyZF/terraformers.jpg\" link=\"https://bookshop.org/p/books/the-terraformers-annalee-newitz/19537833?ean=9781250228017\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/PJL5pyZF/terraformers.jpg\" alt=\"The Terraformers\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-terraformers-annalee-newitz/19537833?ean=9781250228017\">The Terraformers</a></div>\n\t\t\t\t<div class=\"author\">Annalee Newitz</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a fun sci-fi story. I felt like there was more that could’ve been explored a bit with the characters but I still enjoyed it.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Bullshit Jobs\" author=\"David Graeber\" image=\"https://i.postimg.cc/W16LS1GQ/bullshit-jobs.jpg\" link=\"https://bookshop.org/p/books/bullshit-jobs-a-theory-david-graeber/6692761?ean=9781501143335\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/W16LS1GQ/bullshit-jobs.jpg\" alt=\"Bullshit Jobs\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/bullshit-jobs-a-theory-david-graeber/6692761?ean=9781501143335\">Bullshit Jobs</a></div>\n\t\t\t\t<div class=\"author\">David Graeber</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThere are many memorable stories and anecdotes in this. David does a decent job of going through what bullshit jobs are and how we got here.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Learning Patterns\" author=\"Lydia Hallie &amp; Addy Osmani\" image=\"https://i.postimg.cc/g0w0Yz6D/learning-patterns.jpg\" link=\"https://leanpub.com/learningpatterns\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/g0w0Yz6D/learning-patterns.jpg\" alt=\"Learning Patterns\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://leanpub.com/learningpatterns\">Learning Patterns</a></div>\n\t\t\t\t<div class=\"author\">Lydia Hallie & Addy Osmani</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThe first part of the book gave some good overview of different dev patterns. The rest of the book gave some great insights into better ways to build and make sites more performant. Dangerous because it made me consider some redesigning of my site.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Out of Office: The Big Problem and Bigger Promise of Working from Home\" author=\"Charlie Warzel &amp; Anne Helen Petersen\" image=\"https://i.postimg.cc/sgH9zy1j/outofoffice.jpg\" link=\"https://bookshop.org/p/books/out-of-office-the-big-problem-and-bigger-promise-of-working-from-home-anne-helen-petersen/16467530?ean=9780593460382\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/sgH9zy1j/outofoffice.jpg\" alt=\"Out of Office: The Big Problem and Bigger Promise of Working from Home\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/out-of-office-the-big-problem-and-bigger-promise-of-working-from-home-anne-helen-petersen/16467530?ean=9780593460382\">Out of Office: The Big Problem and Bigger Promise of Working from Home</a></div>\n\t\t\t\t<div class=\"author\">Charlie Warzel & Anne Helen Petersen</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an interesting read and definitely follows close to the current return to office back and forth we’re seeing. It did a good job going into why that’s not necessarily the full picture or what we should be looking at, but rather, finding a better work-life balance for everyone.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Shutdown: How Covid Shook the World's Economy\" author=\"Adam Tooze\" image=\"https://i.postimg.cc/JnRT7q0f/shutdown-covid.jpg\" link=\"https://bookshop.org/p/books/shutdown-how-covid-shook-the-world-s-economy-adam-tooze/16278362?ean=9780593297551\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/JnRT7q0f/shutdown-covid.jpg\" alt=\"Shutdown: How Covid Shook the World's Economy\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/shutdown-how-covid-shook-the-world-s-economy-adam-tooze/16278362?ean=9780593297551\">Shutdown: How Covid Shook the World's Economy</a></div>\n\t\t\t\t<div class=\"author\">Adam Tooze</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI found his look back at the different world governments’ response to COVID to be interesting. It was in-depth and provided some good details. I did feel like it bounced around a little more than I would’ve expected which made it a little difficult to follow.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Dead Wake: The Last Crossing of the Lusitania\" author=\"Erik Larson\" image=\"https://i.postimg.cc/yN2RYVhj/dead-wake.jpg\" link=\"https://bookshop.org/p/books/dead-wake-the-last-crossing-of-the-lusitania-erik-larson/7296476?ean=9780307408877\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/yN2RYVhj/dead-wake.jpg\" alt=\"Dead Wake: The Last Crossing of the Lusitania\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/dead-wake-the-last-crossing-of-the-lusitania-erik-larson/7296476?ean=9780307408877\">Dead Wake: The Last Crossing of the Lusitania</a></div>\n\t\t\t\t<div class=\"author\">Erik Larson</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a fascinating look from both those on the Lusitania and from the captain of the U-Boat that sunk the Lusitania. It was compelling even though you already knew the ending.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"A History of the World in 6 Glasses\" author=\"Tom Standage\" image=\"https://i.postimg.cc/PxN0P55s/history-of-the-world-6-glasses.jpg\" link=\"https://bookshop.org/p/books/a-history-of-the-world-in-6-glasses-tom-standage/16634565?ean=9780802715524\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/PxN0P55s/history-of-the-world-6-glasses.jpg\" alt=\"A History of the World in 6 Glasses\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/a-history-of-the-world-in-6-glasses-tom-standage/16634565?ean=9780802715524\">A History of the World in 6 Glasses</a></div>\n\t\t\t\t<div class=\"author\">Tom Standage</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an enjoyable and informative look back at how different drinks came to determine so much of our history of a species. I really enjoyed it.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Packing for Mars: The Curious Science of Life in the Void\" author=\"Mary Roach\" image=\"https://i.postimg.cc/gjqWwyD4/packing-for-mars.jpg\" link=\"https://bookshop.org/p/books/packing-for-mars-the-curious-science-of-life-in-the-void-mary-roach/1517059?ean=9781324036050\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/gjqWwyD4/packing-for-mars.jpg\" alt=\"Packing for Mars: The Curious Science of Life in the Void\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/packing-for-mars-the-curious-science-of-life-in-the-void-mary-roach/1517059?ean=9781324036050\">Packing for Mars: The Curious Science of Life in the Void</a></div>\n\t\t\t\t<div class=\"author\">Mary Roach</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI actually really enjoyed this. It went into a lot of the smaller details of all the things that go into space travel many don’t think about.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Talking to Strangers: What We Should Know about the People We Don't Know\" author=\"Malcolm Gladwell\" image=\"https://i.postimg.cc/d12csjBb/talking-to-strangers.jpg\" link=\"https://bookshop.org/p/books/talking-to-strangers-what-we-should-know-about-the-people-we-don-t-know-malcolm-gladwell/16344994?ean=9780316299220\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/d12csjBb/talking-to-strangers.jpg\" alt=\"Talking to Strangers: What We Should Know about the People We Don't Know\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/talking-to-strangers-what-we-should-know-about-the-people-we-don-t-know-malcolm-gladwell/16344994?ean=9780316299220\">Talking to Strangers: What We Should Know about the People We Don't Know</a></div>\n\t\t\t\t<div class=\"author\">Malcolm Gladwell</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tReading reminded me how hard it is to know exactly how hard it can be to interact with strangers. It was an interesting read talking about how these struggles have had dire consequences. The biggest takeaway I took from it kind of echoes the classic “trust, but verify” and that empathy can be helpful.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Trigger Warning\" author=\"Neil Gaiman\" image=\"https://i.postimg.cc/xdkyM4hx/trigger-warning.jpg\" link=\"https://bookshop.org/p/books/trigger-warning-short-fictions-and-disturbances-neil-gaiman/15543280?ean=9780063075764\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/xdkyM4hx/trigger-warning.jpg\" alt=\"Trigger Warning\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/trigger-warning-short-fictions-and-disturbances-neil-gaiman/15543280?ean=9780063075764\">Trigger Warning</a></div>\n\t\t\t\t<div class=\"author\">Neil Gaiman</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis book is hard to judge since it’s a collection of short stories. Some I liked, some I didn’t, others I was “meh” on.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Coders: The Making of a New Tribe and the Remaking of the World\" author=\"Clive Thompson\" image=\"https://i.postimg.cc/bY7n4WtG/coders.jpg\" link=\"https://bookshop.org/p/books/coders-the-making-of-a-new-tribe-and-the-remaking-of-the-world-clive-thompson/12477150?ean=9780735220584\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/bY7n4WtG/coders.jpg\" alt=\"Coders: The Making of a New Tribe and the Remaking of the World\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/coders-the-making-of-a-new-tribe-and-the-remaking-of-the-world-clive-thompson/12477150?ean=9780735220584\">Coders: The Making of a New Tribe and the Remaking of the World</a></div>\n\t\t\t\t<div class=\"author\">Clive Thompson</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI saw a lot of myself while reading this. It’s a good book that goes into both the good and the bad of what we’ve built with computers.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"On Writing: A Memoir of the Craft\" author=\"Stephen King\" image=\"https://i.postimg.cc/qBGnvrmY/on-writing.jpg\" l=\"\" link=\"https://bookshop.org/p/books/on-writing-a-memoir-of-the-craft-stephen-king/14560198\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/qBGnvrmY/on-writing.jpg\" alt=\"On Writing: A Memoir of the Craft\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/on-writing-a-memoir-of-the-craft-stephen-king/14560198\">On Writing: A Memoir of the Craft</a></div>\n\t\t\t\t<div class=\"author\">Stephen King</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tAs someone who is starting to write more, I enjoyed his thoughts on his career and advice for other writers.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Your Face Belongs to Us: A Secretive Startup's Quest to End Privacy as We Know It\" author=\"Kashmir Hill\" image=\"https://i.postimg.cc/DyyGWNHz/your-face-belongs-to-us.jpg\" link=\"https://bookshop.org/p/books/your-face-belongs-to-us-a-secretive-startup-s-quest-to-end-privacy-as-we-know-it-kashmir-hill/19573494?ean=9780593448564\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/DyyGWNHz/your-face-belongs-to-us.jpg\" alt=\"Your Face Belongs to Us: A Secretive Startup's Quest to End Privacy as We Know It\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/your-face-belongs-to-us-a-secretive-startup-s-quest-to-end-privacy-as-we-know-it-kashmir-hill/19573494?ean=9780593448564\">Your Face Belongs to Us: A Secretive Startup's Quest to End Privacy as We Know It</a></div>\n\t\t\t\t<div class=\"author\">Kashmir Hill</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tYeah, this book scared me a bit. Hill did a great job talking about the history of facial recognition, what Clearview AI has done for it, and the risks moving forward.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Number Go Up: Inside Crypto's Wild Rise and Staggering Fall\" author=\"Zeke Faux\" image=\"https://i.postimg.cc/43hVfhMb/number-go-up.jpg\" link=\"https://bookshop.org/p/books/number-go-up-inside-crypto-s-wild-rise-and-staggering-fall-zeke-faux/19900961?ean=9780593443811\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/43hVfhMb/number-go-up.jpg\" alt=\"Number Go Up: Inside Crypto's Wild Rise and Staggering Fall\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/number-go-up-inside-crypto-s-wild-rise-and-staggering-fall-zeke-faux/19900961?ean=9780593443811\">Number Go Up: Inside Crypto's Wild Rise and Staggering Fall</a></div>\n\t\t\t\t<div class=\"author\">Zeke Faux</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThere was one quote that stood out to me: \"The crypto bubble wasn’t as dumb as you think. It was even dumber.” This book goes into the rise of crypto and NFTs and how obvious it should have been that much of it was kind of scammy at best.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Be Useful: Seven Tools for Life\" author=\"Arnold Schwarzenegger\" image=\"https://i.postimg.cc/L85jWW3W/be-useful.jpg\" link=\"https://bookshop.org/p/books/be-useful-seven-tools-for-life-arnold-schwartzenegger/19976031\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/L85jWW3W/be-useful.jpg\" alt=\"Be Useful: Seven Tools for Life\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/be-useful-seven-tools-for-life-arnold-schwartzenegger/19976031\">Be Useful: Seven Tools for Life</a></div>\n\t\t\t\t<div class=\"author\">Arnold Schwarzenegger</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tIt was an interesting read. Arnold talked a bit about his own life and gave some useful tips on how to do better to reach your goals.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Forge of God\" author=\"Greg Bear\" image=\"https://i.postimg.cc/8cx5mmjP/the-forge-of-god.jpg\" link=\"https://bookshop.org/p/books/the-forge-of-god-greg-bear/7252312\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/8cx5mmjP/the-forge-of-god.jpg\" alt=\"The Forge of God\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-forge-of-god-greg-bear/7252312\">The Forge of God</a></div>\n\t\t\t\t<div class=\"author\">Greg Bear</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI enjoyed the story. It was interesting and brought a good mix of thriller and science fiction.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Anvil of Stars\" author=\"Greg Bear\" image=\"https://i.postimg.cc/Wbh6Ds4F/gregbear-anvilofstars.jpg\" link=\"https://bookshop.org/p/books/anvil-of-stars-greg-bear/7252548\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/Wbh6Ds4F/gregbear-anvilofstars.jpg\" alt=\"Anvil of Stars\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/anvil-of-stars-greg-bear/7252548\">Anvil of Stars</a></div>\n\t\t\t\t<div class=\"author\">Greg Bear</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI didn’t like this as much as the first book in the series, but I’m having a hard time articulating why. It wasn’t bad, just didn’t live up to The Forge of God.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Creative ACT: A Way of Being\" author=\"Rick Rubin\" image=\"https://i.postimg.cc/14xF3Q0H/the-creative-act.jpg\" link=\"https://bookshop.org/p/books/the-creative-act-a-way-of-being-rick-rubin/18543579?ean=9780593652886\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/14xF3Q0H/the-creative-act.jpg\" alt=\"The Creative ACT: A Way of Being\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-creative-act-a-way-of-being-rick-rubin/18543579?ean=9780593652886\">The Creative ACT: A Way of Being</a></div>\n\t\t\t\t<div class=\"author\">Rick Rubin</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tAs someone who is trying to explore his creative side more, I appreciated the insights provided.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Emotional Intelligence 2.0\" author=\"Dr. Travis Bradberry &amp; Dr. Jean Greaves\" image=\"https://i.postimg.cc/wvDYSj7C/emotional-intelligence-20.jpg\" link=\"https://bookshop.org/p/books/emotional-intelligence-2-0-with-access-code-travis-bradberry/1516289?ean=9780974320625\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/wvDYSj7C/emotional-intelligence-20.jpg\" alt=\"Emotional Intelligence 2.0\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/emotional-intelligence-2-0-with-access-code-travis-bradberry/1516289?ean=9780974320625\">Emotional Intelligence 2.0</a></div>\n\t\t\t\t<div class=\"author\">Dr. Travis Bradberry & Dr. Jean Greaves</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI was given this book by my job to help with my career trajectory. It was an interesting look at how we handle ourselves and gave good advice on how to improve our interactions with others.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"American Whitelash: A Changing Nation and the Cost of Progress\" author=\"Wesley Lowery\" image=\"https://i.postimg.cc/FzbsPnL9/american-whitelash.jpg\" link=\"https://bookshop.org/p/books/whitelash-hope-and-horror-in-a-changing-america-wesley-lowery/17944198?ean=9780358393269\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/FzbsPnL9/american-whitelash.jpg\" alt=\"American Whitelash: A Changing Nation and the Cost of Progress\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/whitelash-hope-and-horror-in-a-changing-america-wesley-lowery/17944198?ean=9780358393269\">American Whitelash: A Changing Nation and the Cost of Progress</a></div>\n\t\t\t\t<div class=\"author\">Wesley Lowery</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an interesting, if depressing read. It’s sad to see how racist we still are as a nation.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Humble Pi: When Math Goes Wrong in the Real World\" author=\"Matt Parker\" image=\"https://i.postimg.cc/Df1ZymYt/humble-pi.jpg\" link=\"https://bookshop.org/p/books/humble-pi-when-math-goes-wrong-in-the-real-world-matt-parker/18297581?ean=9780593084694\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/Df1ZymYt/humble-pi.jpg\" alt=\"Humble Pi: When Math Goes Wrong in the Real World\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/humble-pi-when-math-goes-wrong-in-the-real-world-matt-parker/18297581?ean=9780593084694\">Humble Pi: When Math Goes Wrong in the Real World</a></div>\n\t\t\t\t<div class=\"author\">Matt Parker</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI really enjoyed this read. Matt had a good sense of humor and it was interesting to realize some of the many ways math affects us without us realizing until it goes wrong.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Pale Blue Eye\" author=\"Louis Bayard\" image=\"https://i.postimg.cc/brfw9jdC/pale-blue-eye.jpg\" link=\"https://bookshop.org/p/books/the-pale-blue-eye-louis-bayard/8813994?ean=9780060733988\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/brfw9jdC/pale-blue-eye.jpg\" alt=\"The Pale Blue Eye\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-pale-blue-eye-louis-bayard/8813994?ean=9780060733988\">The Pale Blue Eye</a></div>\n\t\t\t\t<div class=\"author\">Louis Bayard</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThe book was slow at times and seemingly wandered off track. The finish was definitely a good one though.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<h2 style=\"margin-top: 32px\">“Meh” Books</h2>\n\n<p>These I didn’t quite enjoy all that much. But keep in mind that that might just be my tastes.</p>\n\n<media-box title=\"Extremely Online: The Untold Story of Fame, Influence, and Power on the Internet\" author=\"Taylor Lorenz\" image=\"https://i.postimg.cc/fyM9fqbB/extremely-online.jpg\" link=\"https://bookshop.org/p/books/extremely-online-the-untold-story-of-fame-influence-and-power-on-the-internet-taylor-lorenz/19718842?ean=9781982146863\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/fyM9fqbB/extremely-online.jpg\" alt=\"Extremely Online: The Untold Story of Fame, Influence, and Power on the Internet\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/extremely-online-the-untold-story-of-fame-influence-and-power-on-the-internet-taylor-lorenz/19718842?ean=9781982146863\">Extremely Online: The Untold Story of Fame, Influence, and Power on the Internet</a></div>\n\t\t\t\t<div class=\"author\">Taylor Lorenz</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an interesting read about the creator culture of the internet. It also happened to remind me I will never understand pop culture.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"Subprime Attention Crisis: Advertising and the Time Bomb at the Heart of the Internet\" author=\"Tim Hwang\" image=\"https://i.postimg.cc/1XMNC0nP/subprime-attention-crisis.jpg\" link=\"https://bookshop.org/books/subprime-attention-crisis-advertising-and-the-time-bomb-at-the-heart-of-the-internet/9780374538651\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/1XMNC0nP/subprime-attention-crisis.jpg\" alt=\"Subprime Attention Crisis: Advertising and the Time Bomb at the Heart of the Internet\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/subprime-attention-crisis-advertising-and-the-time-bomb-at-the-heart-of-the-internet/9780374538651\">Subprime Attention Crisis: Advertising and the Time Bomb at the Heart of the Internet</a></div>\n\t\t\t\t<div class=\"author\">Tim Hwang</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an interesting, though kind of dry read about some of the dangers that lurk in the world of online advertising.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box title=\"The Poison Eaters and Other Stories\" author=\"Holly Black\" image=\"https://i.postimg.cc/zBZWVGYm/posion-eaters.jpg\" link=\"https://bookshop.org/p/books/the-poison-eaters-and-other-stories-holly-black/6315246\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/zBZWVGYm/posion-eaters.jpg\" alt=\"The Poison Eaters and Other Stories\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/the-poison-eaters-and-other-stories-holly-black/6315246\">The Poison Eaters and Other Stories</a></div>\n\t\t\t\t<div class=\"author\">Holly Black</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI enjoyed some of the stories. Others, not as much\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/02/tv-i-watched-in-2023/",
      "url": "https://kpwags.com/posts/2024/01/02/tv-i-watched-in-2023/",
      "title": "TV I Watched in 2023",
      "content_html": "\n\t\t<p>Sometimes I find it hard to just sit down and watch TV. It’s why my backlog is quite long.</p>\n<h2>My Favorite Series</h2>\n<p><em>Star Trek</em> kind of overloads my favorites, but given my biases, that’s to be expected.</p>\n<ol>\n<li>\n<p><strong>Star Trek: Picard</strong>\nThe final season was definitely a nostalgia fest. It was nice to see the whole cast back together.</p>\n</li>\n<li>\n<p><strong>Star Trek: Lower Decks</strong>\nSeason 4 of Lower Decks continues to live up to both the message of Star Trek while also being irreverent and humorous. Still getting plenty of laughs and enjoyment.</p>\n</li>\n<li>\n<p><strong>Star Trek: Strange New Worlds</strong>\nSeason 2 continued to deliver. The cast and stories were fantastic.</p>\n</li>\n<li>\n<p><strong>Band of Brothers</strong>\nThis had been on my list for a long time and the series was absolutely fantastic. It’s a dramatization of “Easy” Company, 2nd Battalion, 506th Parachute Infantry Regiment of the 101st Airborne Division in World War II. It was done really well, the acting is phenomenal, and it gives you a lot of respect for what the soldiers went through. I would <em>highly</em> recommend.</p>\n</li>\n</ol>\n<h2>Series I Enjoyed</h2>\n<p>While not my favorites, these were enjoyable as well.</p>\n<ol>\n<li>\n<p><strong>Jack Ryan</strong>\nFinally watched seasons 3 and 4. Both were enjoyable. The cast was solid and there was a good amount of intrigue.</p>\n</li>\n<li>\n<p><strong>Frasier (2023)</strong>\nMany reboots end up falling flat. Season 1 of the Frasier reboot was good. I enjoyed it and its humor.</p>\n</li>\n<li>\n<p><strong>For All Mankind</strong>\nSeason 3 was excellent, and season 4 so far has been great as well.</p>\n</li>\n<li>\n<p><strong>Mythic Quest</strong>\nAs a video game fan, and a fan of Sunny, this so far has been a great series. I’m looking forward to the next season.</p>\n</li>\n<li>\n<p><strong>Halo</strong>\nThis one I’m not quite sure of. I’m not sure where exactly they’re taking the series. Didn’t hate it, but as a fan of the video games, I’m slightly skeptical.</p>\n</li>\n<li>\n<p><strong>Altered Carbon</strong>\nSeason 1 was definitely better than 2. But overall it was an interesting sci-fi story.</p>\n</li>\n<li>\n<p><strong>American Gods</strong>\nThe biggest knock on this is that the series was cancelled before they could finish the story. It left a very bad taste in my mouth, but I can’t exactly blame the writing.</p>\n</li>\n<li>\n<p><strong>Salt Fat Acid Heat</strong>\nThis was an interesting documentary on some of the foundations of cooking. I wish there was a little more info on the recipes she cooked for the show, but that might be related towards buying the book.</p>\n</li>\n<li>\n<p><strong>Schitt’s Creek</strong>\nI enjoyed this, good humor and some good characters.</p>\n</li>\n<li>\n<p><strong>The Roosevelts</strong>\nThis was a phenomenal documentary series on Teddy, FDR &amp; Eleanor. I learned quite a bit about their lives, what they went through, and some of the “why” they did what they did.</p>\n</li>\n</ol>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/content-moderation-is-impossible/",
      "url": "https://kpwags.com/notes/content-moderation-is-impossible/",
      "title": "Content Moderation is Impossible",
      "content_html": "\n\t\t<blockquote>\n<p>Content moderation at scale is utterly impossible to get ‘right’, where the online crowd and journalists and politicians all agree you’ve done the correct things. This doesn’t absolve sites from having to try, to do the best job they can under the circumstances. But it should make us a bit more sympathetic when we see stories about how terrible some site’s efforts at moderation are.</p>\n</blockquote>\n<p>It's one thing to get things wrong from time to time. It's going to happen and we shouldn't always pile on them for every little mistake.</p>\n<blockquote>\n<p>I don’t know the answers to any of this! The point I want to emphasize is that all of this is impossibly nuanced, impossibly complex, and impossible to do in such a way that satisfies everyone. You still have to draw a line somewhere, but be prepared to get yelled at anyways.</p>\n</blockquote>\n<p>I'll leave finding the answers to people smarter than me, I'd just like to see a legitimate effort.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/notes/an-image-dialog-web-component/",
      "url": "https://kpwags.com/notes/an-image-dialog-web-component/",
      "title": "An Image Dialog Web Component",
      "content_html": "\n\t\t<p>This is actually a pretty cool use for web components and I might have to steal this for my photography site.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2024/01/01/movies-i-watched-in-2023/",
      "url": "https://kpwags.com/posts/2024/01/01/movies-i-watched-in-2023/",
      "title": "Movies I Watched in 2023",
      "content_html": "\n\t\t<p>My wife and I have a system where we often have movie nights and take turns picking the movie. We continued it this year and have watched quite a few. Some of them I’ve seen before. Others I have not.</p>\n<h2>My Favorite Movies Seen in 2023</h2>\n<p>These were my top movies seen and would highly recommend.</p>\n<ol>\n<li>\n<p><strong>Glass Onion:</strong> This had a good cast and Daniel Craig was fantastic. Definitely some good twists.</p>\n</li>\n<li>\n<p><strong>Raiders of the Lost Ark:</strong> 40 some years later, this still holds up.</p>\n</li>\n<li>\n<p><strong>The Shawshank Redemption:</strong> I don’t know if I ever saw this all the way through, but the movie was fantastic. Tim Robbins &amp; Morgan Freeman were great in it.</p>\n</li>\n<li>\n<p><strong>Dungeons &amp; Dragons: Among Thieves:</strong> I enjoyed this movie. It was a good fantasy flick with a good mix of humor. Chris Pine was funny, Michelle Rodriguez brought the action and the supporting cast were likable.</p>\n</li>\n<li>\n<p><strong>Star Trek: Into Darkness:</strong> I know there’s a bunch of hate over the Khan reveal, but I actually enjoyed this movie. It even brings in some of the moral commentary Star Trek is known for.</p>\n</li>\n<li>\n<p><strong>Barbie:</strong> I enjoyed this. It had a good mix of humor with a positive message.</p>\n</li>\n<li>\n<p><strong>Alien:</strong> Even 40 years later the sci fi &amp; horror aspects hold up. The movie was and is fantastic!</p>\n</li>\n<li>\n<p><strong>Oppenheimer:</strong> I enjoyed this. I’m not 100% sure how much was dramatized, but it provided a good look at both the interest in the science and the post-WWII realization of what they did.</p>\n</li>\n<li>\n<p><strong>Star Trek: Nemesis:</strong> I know this movie gets a bad rap and it does have its issues, but I still enjoy it. Last time seeing the Enterprise E in action.</p>\n</li>\n<li>\n<p><strong>Aliens:</strong> I enjoyed this one. It holds up well enough too after over 30 years.</p>\n</li>\n</ol>\n<h2>Movies I Enjoyed</h2>\n<p>While not my favorites, I enjoyed these as well and would recommend them.</p>\n<ol>\n<li>\n<p><strong>Amsterdam:</strong> This was a weird movie. Felt kind of weird given the way the story was told versus the true parts of the story</p>\n</li>\n<li>\n<p><strong>The Irishman:</strong> I’m not sure what the hype was around this. De Niro, Pesci &amp; Pacino were good, but the movie dragged on way too long.</p>\n</li>\n<li>\n<p><strong>Clerks:</strong> The movie was not as good as I remember it being.</p>\n</li>\n<li>\n<p><strong>You People:</strong> Had a lot of good laughs from this. Jonah Hill and Lauren London had good performances.</p>\n</li>\n<li>\n<p><strong>The Harder they Fall:</strong> I enjoyed the movie. It had good action sequences and the cast was fantastic.</p>\n</li>\n<li>\n<p><strong>Death on the Nile:</strong> Had some nice twist and turns. While the ending made sense, not entirely sure how we got there.</p>\n</li>\n<li>\n<p><strong>Margin Call:</strong> I’m not sure how to feel about this other than it feels very much like Wall Street.</p>\n</li>\n<li>\n<p><strong>This is Where I Leave You:</strong> Wasn’t a bad movie. It had a good mix of humor and drama. It was a little predictable though.</p>\n</li>\n<li>\n<p><strong>Gatsby:</strong> Some things I remembered from the book...some things I didn’t. I didn’t hate the adaptation.</p>\n</li>\n<li>\n<p><strong>The Gray Man:</strong> This was definitely a good action flick. Ryan Gosling and Chris Evans both did a great job.</p>\n</li>\n<li>\n<p><strong>Inside Man:</strong> I enjoyed this with its twists and turns.</p>\n</li>\n<li>\n<p><strong>Charlie Wilson’s War:</strong> I’m not entirely sure what I was expecting when I started this. It wasn’t a bad movie and Tom Hanks did a great job, parts of it  just felt kinda “meh”.</p>\n</li>\n<li>\n<p><strong>The Out-Laws:</strong> This was particularly dumb, but it still had some good humor. It wasn’t the best movie ever, but I enjoyed it.</p>\n</li>\n<li>\n<p><strong>For the Love of Spock:</strong> This was a nice look back into Leonard Nimoy and what he brought to Star Trek and science fiction in general. It was through the eyes of his son Adam and had actors from all walks of Trek and other shows on it. It wasn’t afraid to talk about the more-grim side either.</p>\n</li>\n<li>\n<p><strong>Star Trek (2009):</strong> I enjoyed the reintroduction to the Star Trek series. The replacements for Kirk &amp; crew do a great job reprising the roles and there’s a good mix of humor and action.</p>\n</li>\n<li>\n<p><strong>Star Trek Beyond:</strong> I’m not entirely sure I enjoyed this as much of the others, but it was definitely Star Trek and a good Trek action film.</p>\n</li>\n<li>\n<p><strong>Bros:</strong> This was a typical romantic comedy. It had some good scenes and a positive message.</p>\n</li>\n<li>\n<p><strong>Bull Durham:</strong> Typical ‘80s movie, but enjoyable. Some good bits of humor and baseball.</p>\n</li>\n<li>\n<p><strong>BlackBerry:</strong> I thought this was ok. Glenn Howerton reminded me of his Dennis character from Sunny.</p>\n</li>\n<li>\n<p><strong>Interstellar:</strong> The visuals for the movie were phenomenal. The story was solid and was interesting.</p>\n</li>\n<li>\n<p><strong>A Haunting in Venice:</strong> Always love a good mystery movie.</p>\n</li>\n<li>\n<p><strong>Alien3:</strong> I think I liked the first 2 movies better, but this was still an enjoyable sci-fi thriller. The ending was a little too predictable.</p>\n</li>\n<li>\n<p><strong>Father Christmas is Back:</strong> Had some good humor to it with your typical Christmas tropes. Somewhat predictable but still watchable.</p>\n</li>\n<li>\n<p><strong>U-571:</strong> This was a typical war movie that was enjoyable, albeit a little predictable.</p>\n</li>\n<li>\n<p><strong>Alien: Resurrection:</strong> It was okay. Definitely felt like the series was drawn out 1 sequel too many.</p>\n</li>\n</ol>\n<h2>Movies I Was “Meh” On</h2>\n<p>These movies, well, I wasn't the biggest fan of, but that could just be my tastes.</p>\n<ol>\n<li>\n<p><strong>Jurassic World: Dominion:</strong> Definitely glad I didn’t see this in the theaters. Nothing compares to the first Jurassic Park movie.</p>\n</li>\n<li>\n<p><strong>Sorry to Bother You:</strong> This movie started off good...then jumped the shark.</p>\n</li>\n<li>\n<p><strong>Mad Max: Fury Road:</strong> Maybe I’m not the target audience but I found this movie to be weird and incredibly predictable.</p>\n</li>\n<li>\n<p><strong>Young Frankenstein:</strong> I know this is considered a classic, but I can’t say I liked it all that much. It had its lines, but I’m a “meh” at best on it.</p>\n</li>\n<li>\n<p><strong>Snowpiercer:</strong> This movie was kind of weird for my tastes. Some good action scenes, but the ending seemed a little lackluster.</p>\n</li>\n<li>\n<p><strong>The Menu:</strong> Another weird one. I’m really not sure how I feel about it other than “meh”.</p>\n</li>\n<li>\n<p><strong>Once Upon a Time in Hollywood:</strong> I found the movie to be dragged out far longer than it needed to be.</p>\n</li>\n<li>\n<p><strong>This is the End:</strong> I didn’t go into this with high expectations. I was not disappointed, dumb, but did have its moments.</p>\n</li>\n</ol>\n<hr />\n<p><em>Edit 1/2/24: Corrected reviews for Once Upon a Time in Hollywood &amp; This is the End</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/57/",
      "url": "https://kpwags.com/reading-log/57/",
      "title": "Reading Log - January 1, 2024 (#57)",
      "content_html": "\n\t\t<p>A little light this week with the Christmas to New Year's holiday. Substack welcomes Nazis, JavaScript weirdness, and more are included.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://blog.nimblepros.com/blogs/where-csharp-primary-constructors-make-sense/\">Where C# Primary Constructors Make Sense</a> - <em>Steve Smith</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://nolanlawson.com/2023/12/30/shadow-dom-and-the-problem-of-encapsulation/\">Shadow DOM and the Problem of Encapsulation</a> - <em>Nolan Lawson</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/12/making-sense-of-senseless-javascript-features/\">Making Sense Of “Senseless” JavaScript Features</a> - <em>Juan Diego Rodríguez</em></li>\n<li><a href=\"https://www.raymondcamden.com/2023/12/13/an-image-dialog-web-component\">An Image Dialog Web Component</a> - <em>Raymond Camden</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/12/26/substack-turns-on-its-nazis-welcome-sign/\">Substack Turns On Its ‘Nazis Welcome!’ Sign</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Sunrise Skater Kids - All the Old Things</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/MBi58kPYdZw\" title=\"Sunrise Skater Kids - All the Old Things\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2024-01-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/31/aspirations-for-2024/",
      "url": "https://kpwags.com/posts/2023/12/31/aspirations-for-2024/",
      "title": "Aspirations for 2024",
      "content_html": "\n\t\t<p>As is my tradition, I try to set some goals for myself each year. Some of them I hit, others I don’t. I try not to be too hard on myself for missing any as they’re more aspirations, something to strive for.</p>\n<p>This year, my hopes are for:</p>\n<h2>Aspiration 1: Average 5 Days a Week of Working Out</h2>\n<p>For 2024, I’m not going to set any specific goal for what exercises I do or what total distances I want to go. I’m just going to target being active on average 5 days a week. Each day could be a run, a walk, a lifting session, hockey, whatever. Just be active 5 days a week.</p>\n<h2>Aspiration 2: Finish a Side Project</h2>\n<p>This is relatively self-explanatory. I often start projects and never finish. This year I want to complete just one. Any one.</p>\n<h2>Aspiration 3: Write 100 Blog Posts</h2>\n<p>Not including my reading logs, I want to continue to write blog posts. I’m going to set my target at 100 posts this year.</p>\n<h2>Aspiration 4: Finish Writing the Story I Started in September</h2>\n<p>In September, I started writing what was originally just going to be a short story. Well it’s ballooned at this point. I’m not sure how long it will end up being, but there’s still plenty to write. My desire this year will be to finish it.</p>\n<h2>Aspiration 5: Finish Our Sunroom</h2>\n<p>We have a sunroom off the back of our house that has become sort go a mudroom or a catch all. It’s been on our list to redo it and turn it into more of a sitting and reading room. It will require repainting the walls and baseboard heaters, replacing the ceiling fan, and a few other miscellaneous little tasks. But it’s been on our list of things to do for several years now. I’m hoping to finish it this year finally.</p>\n<h2>Aspiration 6: Read 40 Books</h2>\n<p>Last year I set a goal of 30 and ended up reading 41. This year I hope to read 40.</p>\n<hr />\n<p>What are your goals (hard ones or fungible ones), what do you hope to accomplish in 2024? You can follow mine on my <a href=\"https://kpwags.com/progress/2024\">progress page</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/29/2023-retrospective/",
      "url": "https://kpwags.com/posts/2023/12/29/2023-retrospective/",
      "title": "2023 Retrospective",
      "content_html": "\n\t\t<p>Another year has come and gone. I’m a year older and I suppose a little wiser, though the latter one is a little hard to judge. I had a good year and really can’t complain.</p>\n<h2>Looking Back at 2023</h2>\n<p>The biggest happening of 2023 was probably Lauren and I celebrating our 10 year anniversary. We ended up spending almost 2 weeks in Aruba and it was amazing. Hot, but amazing. Sometimes I find it hard to believe we’ve been married for 10 years. There are times where it doesn’t feel nearly that long, and there are other times where I can’t remember a time without her.</p>\n<p>Some other things that happened:</p>\n<ul>\n<li><strong>Won the I-League Championship:</strong> The team I play goalie for won the championship in the winter season. It’s just beer league hockey, but it was fun and memorable.</li>\n<li><strong>Started Writing More:</strong> I started to write more at the end of September. I started writing a story and have been writing more blog posts.</li>\n<li><strong>Worked on Side Projects:</strong> Over the course of the year I’ve worked on various side projects (never finishing any of course) using React, TypeScript, Blazor, Astro, and more.</li>\n<li><strong>Went on Some Trips:</strong> Traveled to Hershey, PA, Cape May, NJ, New York City, Baltimore and more. Mostly just weekend or long weekend trips, but they were still fun.</li>\n<li><strong>Rebuilt My Site:</strong> I rebuilt my site using <a href=\"https://www.11ty.dev/\">Eleventy</a>. Seeing the JS bundle size of Next.js going up, I decided to switch over to a different platform.</li>\n</ul>\n<h2>My 2023 Goals</h2>\n<h3>1. Re-Learn Guitar</h3>\n<p>I wanted to teach myself 10 “modern” rock songs. Can’t say I even learned one. The only thing I can say is that I’ve been playing with my guitar most days of late and am starting to get the hang of switching chords again.</p>\n<h3>2. Read 30 Books</h3>\n<p>I’m on my 42nd book of the year now, so this was a resounding success. Most nights I’ve been spending a good 45 minutes to an hour reading before crawling into bed. Hockey nights especially since I’m generally too amped up to sleep anyway.</p>\n<h3>3. Write 12 Technical Posts</h3>\n<p>I can’t say I hit 12 technical posts, but I did hit 10. Better than last year, but I also have written more this year for my blog than any other so the failure is a little muted.</p>\n<h3>4. Hit the 1,000 lbs. Club</h3>\n<p>My goal this year was to hit 1,000 lbs. total across deadlift, squat, &amp; bench press. I managed 400 lbs. on deadlifts, 365 lbs. on squats, and 240 lbs. on bench press for a grand total of 1,005 lbs. Mission accomplished. I immediately deloaded and have been slowly working my way back up focusing on reps as well as sheer weight.</p>\n<h3>5. Bike &amp; Run 400 Miles Each</h3>\n<p>Yeah, this didn’t happen. I never really got into the groove much with running and hip/groin injuries didn’t help matters.</p>\n<h3>6. Take More Photos</h3>\n<p>Outside of taking photos for my sister-in-law’s wedding, I didn’t end up taking my camera out any.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/28/the-process-of-switching-to-11ty/",
      "url": "https://kpwags.com/posts/2023/12/28/the-process-of-switching-to-11ty/",
      "title": "The Process of Switching to 11ty",
      "content_html": "\n\t\t<p>Over the course of the last month or so, I began the process of converting my site from Next.js to 11ty. It was actually a pretty straightforward process and I’m happy with the result. I figure I’ll share some of the gotchas and the challenges that I faced moving my various pages over.</p>\n<h2>Handling All My Blog Posts</h2>\n<p>This was one of the first tasks I set out to do. I wanted to move all my blog posts into 11ty and also keep their URLs. The last thing I wanted to do was to break all my previous links. In Next.js, my URL structure was <code>/posts/{year}/{month}/{day}/{slug}</code> so I needed to maintain that. That meant that I had to move all the markdown files into the corresponding directories and subdirectories.</p>\n<h3>An Easier Permalink Solution</h3>\n<p>I unfortunately realized the permalink front matter property existed AFTER I created all the subdirectories. I considered re-organizing, but have decided against it. I will probably change things up slightly for 2024 and beyond, but it didn’t seem worth the effort to go through all the old posts and all the work I did to get them in the correct directories.</p>\n<p>So in hopes of saving someone from my folly, you can add the following to your front matter to have 11ty automatically place the generated content in the proper spot:</p>\n<pre class=\"language-markdown\" tabindex=\"0\"><code class=\"language-markdown\"><span class=\"token front-matter-block\"><span class=\"token punctuation\">---</span>\n<span class=\"token front-matter yaml language-yaml\">permalink: '/posts/2023/12/27/now-on-11ty'</span>\n<span class=\"token punctuation\">---</span></span></code></pre>\n<h3>MDX to Markdown</h3>\n<p>I also had to rename all my markdown files from <code>.mdx</code> to <code>.md</code> so 11ty could find and read them. Thankfully I didn’t use too many JSX components, so I was easily able to convert them to <a href=\"https://www.11ty.dev/docs/languages/liquid/#shortcodes\">shortcodes</a> which made things relatively simple.</p>\n<h3>Shortcode Conversion Example</h3>\n<p>One example of an JSX component I have is for YouTube embeds. For Next.js, this is what I used:</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> Head <span class=\"token keyword\">from</span> <span class=\"token string\">'next/head'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> YouTubeEmbed <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n   id<span class=\"token punctuation\">,</span>\n   title<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSX</span><span class=\"token punctuation\">.</span><span class=\"token parameter\">Element</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n   <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n       </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Head</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n           </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>module<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/scripts/fit-vids.js<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n       </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Head</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n       </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>fit-vids</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n           </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>iframe</span>\n               <span class=\"token attr-name\">width</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token number\">560</span><span class=\"token punctuation\">}</span></span>\n               <span class=\"token attr-name\">height</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token number\">315</span><span class=\"token punctuation\">}</span></span>\n               <span class=\"token attr-name\">src</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">https://www.youtube.com/embed/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">}</span></span>\n               <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>title<span class=\"token punctuation\">}</span></span>\n               <span class=\"token attr-name\">allow</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture<span class=\"token punctuation\">\"</span></span>\n               <span class=\"token attr-name\">allowfullscreen</span>\n           <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n       </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>fit-vids</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n   </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> YouTubeEmbed<span class=\"token punctuation\">;</span></code></pre>\n<p>Converting it to a shortcode was relatively simple:</p>\n<pre class=\"language-js\" tabindex=\"0\"><code class=\"language-js\">module<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">exports</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">id<span class=\"token punctuation\">,</span> title</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n&lt;fit-vids>\n    &lt;iframe\n        width=\"560\"\n        height=\"315\"\n        src=\"https://www.youtube.com/embed/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">\"\n        title=\"</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>title<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">\"\n        allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n        allowfullscreen>&lt;/iframe>\n&lt;/fit-vids>\n</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">;</span></code></pre>\n<p>I was happy with how it ended up working out as I don’t have to worry about duplicating all the iframe code each time I want to embed a YouTube video.</p>\n<h2>Handling My Archives Page</h2>\n<p>One thing that I did end up losing in the conversion is the yearly view for my archives pages. This was probably the page I spent the most time working on and after a lot of grief, I opted to push on without it for the initial version, and go back and <a href=\"https://github.com/kpwags/kpwags.11ty/issues/68\">add it in later</a>. For my <a href=\"https://kpwags.com/archives/\">archives</a>, all I have currently is all posts in a given month. I figure it’s a little more narrow and might be slightly more useful all things considered.</p>\n<p>I was able to get that working thanks to a <a href=\"https://jamesdoc.com/blog/2021/11ty-posts-by-year/\">great blog post by James Doc</a>.</p>\n<h2>Supporting My Notion Data</h2>\n<p>This part is something I’ve been adding to my site over the last year. I’ve been pulling in my Notion lists for books, video games, TV shows, music, &amp; movies. I wanted to maintain that in my new build and I was able to do that. I found this <a href=\"https://danabyerly.com/articles/using-airtable-with-eleventy/\">walkthrough for accessing data for AirTable</a> and was able to use that as a template to take the code from my Next.js implementation and apply that to 11ty.</p>\n<p>The only thing I’ve lost in the conversion is the real time updates of any data changes in Notion. This was by choice. One of the things I’ve noticed with my Next.js site was that performance was a little less than stellar for those pages while they fetched the data. I decided with my hope to post more, my site would naturally be built more often and thus updated. I also figure it wouldn’t matter if the pages aren’t quite up to date. They’ll be close and the performance improvements would be worth it.</p>\n<h2>Overall Thoughts</h2>\n<p>Overall, the process of converting my site over to 11ty was relatively smooth. I had some small hiccups, but they’re to be expected whenever you are learning a new platform or tool. I’m happy with how things have ended up and already have a few features and enhancements I intend on adding to my site.</p>\n<p>For anyone building a new blog or personal site, I’d highly recommend 11ty as the tool to use.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/27/now-on-11ty/",
      "url": "https://kpwags.com/posts/2023/12/27/now-on-11ty/",
      "title": "Now on 11ty",
      "content_html": "\n\t\t<p>You might have noticed some changes to the site. That’s expected as it is now running on <a href=\"https://www.11ty.dev/\">11ty</a>.</p>\n<p>I mentioned earlier I was going to <a href=\"https://kpwags.com/posts/2023/12/06/moving-away-from-nextjs\">move away from Next.js</a> and that move is now complete. Hopefully everything will be running properly and if you get overloaded by old posts in my RSS feed, I’m sorry (not sure how that will end up working).</p>\n<p>I’m looking forward to continuing to write and continuing to improve my site.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/56/",
      "url": "https://kpwags.com/reading-log/56/",
      "title": "Reading Log - December 25, 2023 (#56)",
      "content_html": "\n\t\t<p>Merry Christmas to those who celebrate. A little light this year for the holidays.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://www.milanjovanovic.tech/blog/5-awesome-csharp-refactoring-tips\">5 Awesome C# Refactoring Tips</a> - <em>Milan Jovanović</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/classes-vs.-prototypes-in-javascript/\">Classes vs. prototypes in JavaScript</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/12/marketing-changed-oop-javascript/\">How Marketing Changed OOP In JavaScript</a> - <em>Juan Diego Rodríguez</em></li>\n<li><a href=\"https://www.zachleat.com/web/netlify-and-nextjs/\">Netlify’s Disingenuous Survey-based Attack on Next.js (and Eleventy, too)</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://12daysofweb.dev/2023/popover-api/\">Popover API</a> - <em>Ryan Trimble</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.devleader.ca/2023/11/26/rewriting-vs-refactoring-code-how-to-navigate-the-two/\">Rewriting vs Refactoring Code: How To Navigate The Two</a> - <em>Nick Cosentino</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2023/12/06/privacy-first/#but-not-just-privacy\">Privacy First</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://pluralistic.net/2023/12/08/playstationed/#tyler-james-hill\">&quot;If buying isn't owning, piracy isn't stealing&quot;</a> - <em>Cory Doctorow</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2023/12/22/why-does-it-sometimes-take-so-long-to-manufacture-and-ship-action-figures/\">Why does it sometimes take so long to manufacture and ship action figures?z</a> - <em>Janet Nguyen</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/the-patriots-are-returning-to-type\">The Patriots Are Reverting To Type</a> - <em>Charles P. Pierce</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://therestishistory.com/322-east-germany-life-behind-the-iron-curtain/\">The Rest is History #322: East Germany: Life Behind the Iron Curtain</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2023/12/20/how-much-do-political-campaigns-know-about-you-way-more-than-you-might-think/\">How much do political campaigns know about you? Way more than you might think.</a> - <em>Kimberly Adams</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://web.mit.edu/jmorzins/www/C-H-speech.html\">Bill Watterson’s 1990 Commencement Speech to Kenyon College</a> - <em>Bill Watterson</em></li>\n<li><a href=\"https://www.techdirt.com/2023/12/21/tesla-lied-to-customers-blaming-them-for-shoddy-parts-the-company-knew-were-defective/\">Tesla Lied To Customers, Blaming Them For Shoddy Parts The Company Knew Were Defective</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - Spider Bites</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/aL_6MQ-ffUA\" title=\"The Gaslight Anthem - Spider Bites\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/55/",
      "url": "https://kpwags.com/reading-log/55/",
      "title": "Reading Log - December 19, 2023 (#55)",
      "content_html": "\n\t\t<p>A day late this week, but still a bunch of great articles on Apple, CSS animations, why you don't always need JavaScript, and more.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/learn-dotnet8-beginner-videos/\">Learn .NET 8 with New Beginner Videos</a> - <em>Katie Savage &amp; Jayme Singleton</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://www.htmhell.dev/adventcalendar/2023/2/\">You don't need JavaScript for that</a> - <em>Kilian Valkhof</em></li>\n<li><a href=\"https://www.bennadel.com/blog/4536-creating-a-marquee-effect-with-css-animations.htm\">Creating A Marquee Effect With CSS Animations</a> - <em>Ben Nadel</em></li>\n<li><a href=\"https://joshcollinsworth.com/blog/antiquated-react\">Things you forgot (or never knew) because of React</a> - <em>Josh Collinsworth</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.inverse.com/tech/apple-app-store-15th-anniversary-past-present-future\">15 Years Ago, Apple’s App Store Changed Everything. Now It Needs a Reboot.</a> - <em>Christina Warren</em></li>\n<li><a href=\"https://www.theverge.com/2023/12/13/23990706/google-apple-court-order-required-push-notification-ron-wyden-letter-surveillance-e2e-encryptionz\">Apple will make it harder for governments to get your push notifications</a> - <em>Wes Davis</em></li>\n<li><a href=\"https://www.techdirt.com/2023/12/11/apples-nonsensical-attack-on-beeper-for-making-apples-own-users-safer/\">Apple’s Nonsensical Attack On Beeper For Making Apple’s Own Users Safer</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/12/how-the-internet-killed-e3/\">E3 is officially dead, and so is the version of the industry it was made for</a> - <em>Kyle Orland</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/12/18/24005996/adobe-figma-acquisition-abandoned-termination-fee\">Adobe abandons $20 billion acquisition of Figma</a> - <em>Jess Weatherbed</em></li>\n<li><a href=\"https://defector.com/the-rise-and-fall-of-starter-the-coolest-company-on-earth\">The Rise And Fall Of Starter, The Coolest Company On Earth</a> - <em>Keith Paradise</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://changelog.com/podcast/535\">The Changelog #535: Examining capitalism's chokepoints</a></li>\n<li><a href=\"https://nodogmapodcast.bryanhogan.net/172-stormy-peters-supporting-open-source-software-communities/\">No Dogma #172: Stormy Peters, Supporting Open Source Software Communities</a></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/12/14/republicans-are-mad-the-fcc-rejected-elon-musks-attempt-to-get-a-billion-dollars-in-subsidies-to-deliver-pricey-satellite-broadband-to-some-traffic-medians/\">Republicans Are Mad The FCC Rejected Elon Musk’s Attempt To Get A Billion Dollars In Subsidies To Deliver Pricey Satellite Broadband To Some Traffic Medians</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/12/cvs-rite-aid-walgreens-hand-out-medical-records-to-cops-without-warrants/\">CVS, Rite Aid, Walgreens hand out medical records to cops without warrants</a> - <em>Beth Mole</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>“Weird Al” Yankovic - The Night Santa Went Crazy</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0FJU4GrXztE\" title=\"“Weird Al” Yankovic - The Night Santa Went Crazy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/14/switching-to-eleventy/",
      "url": "https://kpwags.com/posts/2023/12/14/switching-to-eleventy/",
      "title": "Switching to Eleventy",
      "content_html": "\n\t\t<p>I think at this point, my plan is to rebuild my blog with <a href=\"https://www.11ty.dev/\">Eleventy</a>. Playing around with it I feel like it’s the simplest tool to do what I need. I still have a lot to learn with it, but I’m hoping that it will be the platform everything I’ve read says it is.</p>\n<h2>Initial Thoughts</h2>\n<h3>No TypeScript</h3>\n<p>I know I’m going to get some flak for this, but this is the first time in a little while I haven’t used TypeScript. There have been some places I’ve missed it, but it’s not a big deal. It certainly makes the build and upgrade path easier.</p>\n<h3>I Kind of Miss MDX</h3>\n<p>One of the nice things I appreciated with Next.js is the ability to write my posts in MDX. I could include the various components I’ve written for my posts to make things a little simpler when writing posts that used shareable components. I haven’t quite figured this part out yet on Eleventy.</p>\n<p>Eleventy has WebC and it has what it calls short codes that allow me to put templates into my markdown files, but they don’t feel quite the same as the React components I’m used to being able to use. This could certainly be a “personal taste” thing.</p>\n<h3>Simpler Build Process</h3>\n<p>The build process for Eleventy is simpler than that of Next.js. It generates static HTML which feels cleaner. It should also make deployments easier. I haven’t really looked into that yet, but I figure it shouldn’t be too difficult.</p>\n<hr />\n<h2>My Current Status</h2>\n<p>My current status is that I have a GitHub project where I will be going through and rebuilding all my pages in Eleventy. I got all my blog posts moved over, and am currently working on my reading logs. It’s a slow(ish) process, but I’m also working on a different look and feel. I’m also doing my best to keep it maintainable for the future. My plan is to write a lot more in 2024 so I want to have my site be in a good place when this is all over.</p>\n<p>I definitely won’t be finished by the end of the year, but the process of learning and building with Eleventy has been fun.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/54/",
      "url": "https://kpwags.com/reading-log/54/",
      "title": "Reading Log - December 11, 2023 (#54)",
      "content_html": "\n\t\t<p>A little light this week, but a bunch of podcasts this time.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://dodov.dev/blog/your-framework-is-not-your-religion\">Your Framework Is Not Your Religion</a></h2>\n\t<div class=\"in-depth-meta\">Hristiyan Dodov</div>\n\t<div class=\"in-depth-text\">\n<p>I have to completely agree with his take.</p>\n<blockquote><p>Pick tools because they work well for your team and your project, not because you have their stickers on your laptop.</p></blockquote>\n<p>When building anything, build with what makes sense to you, the team you’re working with, and whatever you’re trying to build. Not every tool makes sense for every project. Choose what you like and have fun building.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/security/2023/12/just-about-every-windows-and-linux-device-vulnerable-to-new-logofail-firmware-attack/\">Just about every Windows and Linux device vulnerable to new LogoFAIL firmware attack</a> - <em>Dan Goodin</em></li>\n<li><a href=\"https://www.reuters.com/technology/cybersecurity/governments-spying-apple-google-users-through-push-notifications-us-senator-2023-12-06/\">Governments spying on Apple, Google users through push notifications - US senator</a> - <em>Raphael Satter</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/12/the-milky-way-will-probably-devour-all-the-tiny-galaxies-that-surround-it/\">The Milky Way will probably devour all the tiny galaxies that surround it</a> - <em>Elizabeth Rayne</em></li>\n<li><a href=\"https://www.npr.org/2023/12/10/1218418262/missing-tomato-international-space-station\">Houston, we have a tomato: ISS astronauts locate missing fruit (or vegetable)</a> - <em>Erika Ryan</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/23990841/hello-games-light-no-fire-trailer\">Light No Fire is the next ambitious game from the studio behind No Man’s Sky</a> - <em>Andrew Webster</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/business/2023/12/05/elon-musks-messiah-complex-may-bring-him-down\">Elon Musk’s messiah complex may bring him down</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://dotnetcore.show/episode-120-inside-avalonias-cross-platform-ui-toolkit-and-the-quest-for-quality-documentation-with-mike-james/\">.NET Core Podcast #120: Inside Avalonia's Cross-Platform UI Toolkit and the Quest for Quality Documentation with Mike James</a></li>\n<li><a href=\"https://dot-social.simplecast.com/episodes/mike-masnick\">Dot Social #1: Decentralizing Innovation, with Techdirt’s Mike Masnick</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/what-is-maganomics-actually/\">Make Me Smart #1060: What is MAGAnomics, actually?</a></li>\n<li><a href=\"https://freakonomics.com/podcast/why-does-one-tiny-state-set-the-rules-for-everyone/\">Freakonomics #539: Why Does One Tiny State Set the Rules for Everyone?</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>A Day to Remember - If It Means a Lot to You</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bx7l7X7qy2g\" title=\"A Day to Remember - If It Means a Lot to You\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/08/how-do-guitar-players-make-it-look-so-easy/",
      "url": "https://kpwags.com/posts/2023/12/08/how-do-guitar-players-make-it-look-so-easy/",
      "title": "How Do Guitar Players Make it Look So Easy?",
      "content_html": "\n\t\t<p>I set a goal this year of picking back up guitar and learning to play 10 songs. I can safely say that learning 10 songs is probably not going to happen. But I have picked up the guitar again and am trying to teach myself and practice.</p>\n<p>I’ve been practicing mostly being able to go back and forth between the G, C, D, E &amp; A chords. It’s what caused me frustration back in high school and college when I got my first guitar. I’ve been doing better this time. And my fingers haven’t been hurting nearly as much as when I first started.</p>\n<p>But I started looking for some “easier” songs to learn online and looking at the chords, they should be on the easier side. But for the life of me, I’m struggling to both change chords, and something that’s a little more new to me, get the strumming right. Musicians and other guitar players make it look easy.</p>\n<p>Most of the songs I attempt to play, well let’s just say they don’t really sound quite like they’re supposed to. My wife is a saint for putting up with my practicing.</p>\n<p>I’m not going to give up, and while I’m likely not to hit my goal, I’m going to keep at it. I’m just hoping that with more practice, will come better results.</p>\n<p>Like with just about anything worth doing, you need to practice, and that’s what I’m going to keep doing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/07/data-privacy/",
      "url": "https://kpwags.com/posts/2023/12/07/data-privacy/",
      "title": "Data Privacy",
      "content_html": "\n\t\t<p>We always seem to be concerned with China &amp; TikTok, yet completely ignore what’s going on in our backyard. The US can ban TikTok tomorrow, but if China wants data, it’s not hard for them to just go out and buy the data.</p>\n<p><a href=\"https://www.rollingstone.com/culture/culture-features/data-brokers-trump-tech-spying-privacy-threat-1234897098/\">We Spied on Trump’s ‘Southern White House’ From Our Couches</a></p>\n<blockquote>\n<p>Even though the data is technically “anonymized” (we can’t see the age, income, or ethnicity of a specific visitor, let alone their name), the pinpoint locations of where they spend their days and nights makes educated guesswork pretty easy.</p>\n</blockquote>\n<p>Anonymized data in bulk can lose its anonymous status pretty easily. This was proven <a href=\"https://arstechnica.com/information-technology/2014/03/surprise-surprise-my-online-metadata-actually-reveals-where-ive-been/\">after the Edward Snowden leaks</a>, and it continues now.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/06/moving-away-from-nextjs/",
      "url": "https://kpwags.com/posts/2023/12/06/moving-away-from-nextjs/",
      "title": "Moving Away from Next.js",
      "content_html": "\n\t\t<p>I’ve toyed with the idea over the last year about possibly <a href=\"https://kpwags.com/posts/2023/04/28/some-site-and-design-updates\">moving</a> <a href=\"https://kpwags.com/posts/2023/08/21/digging-into-astro\">away</a> from using Next.js for my website. A recent <a href=\"https://fediverse.zachleat.com/@zachleat/111524558114433017\">post on Mastodon</a> from Zach Leatherman gave me a little bit more of a push.</p>\n<p><social-embed link=\"https://fediverse.zachleat.com/@zachleat\" author=\"Zach Leatherman\" date=\"December 4, 2023\" site=\"mastodon\"><div class=\"social-media-embed\">\n<div class=\"content\"></div></div></social-embed></p>\n<p></p><p>Vercel’s Next.js v14 has shipped and (as one does) I had a look at the JavaScript footprint of the production build of Hello World:</p>\n<p>v14 (2023): 299 kB<br />v13 (2022): 272 kB<br />v12 (2021): 228 kB</p>\n<p>Unfortunately the same trend continues, even with a new bundler: the bundles are growing!</p>\n<p>(and with Tailwind included by default, too)</p><p></p>\n<p>\n</p><div class=\"source\">\n<div class=\"author-date\">\n<a href=\"https://fediverse.zachleat.com/@zachleat\" target=\"_blank\" rel=\"noreferrer\">Zach Leatherman</a>\n<span class=\"date\">December 4, 2023</span>\n</div><p></p>\n<p></p><div>\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-label=\"Mastodon Logo\">\n<path d=\"M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z\"></path>\n</svg>\n</div><p></p>\n<p></p></div><p></p>\n\n<style>\n\t.social-media-embed {\n\t\tborder-radius: 8px;\n\t\tbackground-color: var(--background-shaded);\n\t\tcolor: var(--text);\n\t\tpadding: 16px;\n\t\tmargin: 32px;\n\t\tborder: 1px solid var(--secondary-color);\n\t}\n\n\t.social-media-embed .content p {\n\t\tmargin-block-start: 0;\n\t\tline-height: 1.5;\n\t\tmargin: 0 0 12px;\n\t}\n\n\t.social-media-embed p:empty {\n\t\tdisplay: none;\n\t}\n\n\t.social-media-embed .source {\n\t\tdisplay: flex;\n\t\tgap: 16px;\n\t\tjustify-content: flex-end;\n\t\talign-items: center;\n\t\tline-height: 1;\n\t}\n\n\t.social-media-embed .source .author-date {\n\t\tdisplay: flex;\n\t\tgap: 16px;\n\t\tline-height: 1;\n\t}\n\n\t.social-media-embed .source p {\n\t\tmargin: 0;\n\t}\n\n\t.social-media-embed .source .date {\n\t\tfont-style: italic;\n\t}\n\n\t.social-media-embed .source p,\n\t.social-media-embed .source div,\n\t.social-media-embed .source a {\n\t\tline-height: 1;\n\t}\n\n\t.social-media-embed .source svg {\n\t\tfill: var(--primary-color);\n\t}\n\n\t@media (max-width: 500px) {\n\t\t.social-media-embed {\n\t\t\tmargin: 32px 0;\n\t\t}\n\n\t\t.social-media-embed .source {\n\t\t\tmargin-top: 24px;\n\t\t}\n\n\t\t.social-media-embed .source .author-date {\n\t\t\tflex-direction: column;\n\t\t\tgap: 8px;\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n<p>I’ve been concerned about my site’s performance has been a concern to me, albeit I’ll admit I haven’t done that much about it. Looking at the future path of Next.js, I’m not sure it’s what I want for the future of my site.</p>\n<p>I had been playing with <a href=\"https://astro.build/\">Astro</a>, and now I’m playing with <a href=\"https://www.11ty.dev/\">Eleventy</a>.</p>\n<p>I kind of think right now I’m going to move forward with Eleventy and see if it can indeed do everything I’m looking for.</p>\n<p>The biggest benefit of my site system is that all my posts are simple markdown files. This allows me to move between systems with minimal trouble. I no longer have to worry about backing up a Wordpress database or anything. (No disrespect to Wordpress, I just like simple markdown files.)</p>\n<p>My site for the most part is static content. The only thing really dynamic are the pages like my bookshelf, video games, TV, movies, &amp; music. I changed them a little while back to pull from Notion. From a performance perspective, they’re really the only non-performant pages given the JavaScript load.</p>\n<p>So I think I’m finally going to pull the trigger and rebuild my site from the ground up. I’m just not 100% certain which tool I’m going to use. I’m going to get some basic framing up and see which one performs best and which is easiest for me to work with.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/wesley-lowery-american-whitelash/",
      "url": "https://kpwags.com/books/wesley-lowery-american-whitelash/",
      "title": "Book Notes for American Whitelash: A Changing Nation and the Cost of Progress",
      "content_html": "\n\t\t<p>I had heard of this book from a <a href=\"https://www.marketplace.org/shows/make-me-smart/\">Make Me Smart podcast episode</a>.</p>\n<p>The book is an interesting and slightly depressing look at the racism that clearly still exists in America. The book looks back at various points in history where there were spikes in racial animosity.</p>\n<blockquote>\n<p>There is an obvious futility to the search—there is no satisfying explanation for evil. Yet in moments of chaos and tragedy, human nature demands that we seek answers. For a journalist, the busywork of reporting can be soothing, even if it often feels like we're groping aimlessly in the dark. Understanding the present cannot always be achieved by examining what lays in front of us. Often the answers lie as much in our past as they do in our present, requiring us to turn around and look back.</p>\n</blockquote>\n<p>I’m not so naive to think that racism is dead, but I guess until 2016, I thought we were starting to get better. This book only shows that we still have a long way to go.</p>\n<p>One example mentions is that the election of Barack Obama as president caused a backlash from white supremacists and the far-right. To make me even more angry about things, the Department of Homeland Security (DHS) saw the rise of the far-right terrorism and reported it only to have the Republican Party push to have the DHS retract the report. Instead of tackling the problem, the GOP allowed for terrorists to simmer.</p>\n<p>This book is informative, but it disappoints me seeing how little we have changed as a country.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/53/",
      "url": "https://kpwags.com/reading-log/53/",
      "title": "Reading Log - December 4, 2023 (#53)",
      "content_html": "\n\t\t<p>This week I read about the US' complete lack of data privacy, an old look at the Space Shuttle, and more.</p>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://chriscoyier.net/2023/11/27/the-hanging-punctuation-property-in-css/\">The <code>hanging-punctuation property</code> in CSS</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>General Development</h2>\n<ul>\n<li><a href=\"https://www.viget.com/articles/maintenance-matters-good-tests/\">Maintenance Matters: Good Tests</a> - <em>David Eisinger</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://live-whistleblower-aid.pantheonsite.io/joan-donovan-press-release/\">Harvard Gutted Initial Team Examining Facebook Files Following $500 Million Donation from Chan Zuckerberg Initiative, Whistleblower Aid Client Reveals</a> - <em>Whistleblower Aid</em></li>\n<li><a href=\"https://www.techdirt.com/2023/11/29/musks-faulty-vision-of-free-speech-is-driving-speech-off-extwitter/\">Musk’s Faulty Vision Of ‘Free Speech’ Is Driving Speech Off ExTwitter</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://techcrunch.com/2023/11/29/okta-admits-hackers-accessed-data-on-all-customers-during-recent-breach/\">Okta admits hackers accessed data on all customers during recent breach</a> - <em>Carly Page</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.rollingstone.com/culture/culture-features/data-brokers-trump-tech-spying-privacy-threat-1234897098/\">We Spied on Trump’s ‘Southern White House’ From Our Couches</a> - <em>Aram Sinnreich &amp; Jesse Gilbert</em></li>\n<li><a href=\"https://www.techdirt.com/2023/12/04/our-ongoing-refusal-to-regulate-data-brokers-is-going-to-bite-us-on-the-ass/\">Our Ongoing Refusal To Regulate Data Brokers Is Going To Bite Us On The Ass</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/12/neptune-sized-exoplanet-is-too-big-for-its-host-star/\">Neptune-sized exoplanet is too big for its host star</a> - <em>John Timmer</em></li>\n<li><a href=\"http://www.iasa-intl.com/folders/shuttle/GoodbyeColumbia.html\">Beam Me Out Of This Death Trap, Scotty (1980)</a> - <em>Gregg Easterbrook</em></li>\n<li><a href=\"https://www.marketplace.org/2023/11/29/low-earth-orbit-open-for-business-varda-space-industries/\">“Low Earth orbit is now open for business”</a> - <em>Kai Ryssdal &amp; Maria Hollenhorst</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theregister.com/2023/11/29/adobes_buy_of_figma_is/\">Adobe's buy of Figma is 'likely' bad for developers, rules UK regulator</a> - <em>Paul Kunert</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/04/11/1169205866/npr-host-mary-louise-kelly-reflects-on-juggling-motherhood-and-chasing-the-news\">NPR’s Fresh Air: NPR host Mary Louise Kelly reflects on juggling motherhood and chasing the news</a></li>\n<li><a href=\"https://www.coffeeandopensource.com/guest/chris-klug.html\">Coffee &amp; Open Source: Chris Klug</a></li>\n<li><a href=\"https://www.radiolab.org/podcast/library-alexandra\">Radiolab: The Library of Alexandra</a></li>\n<li><a href=\"https://www.npr.org/2023/11/29/1197958541/pareto-principle-80-20-rule-to-the-test\">The Indicator #1491: Putting the 80/20 rule to the test</a></li>\n<li><a href=\"https://freakonomics.com/podcast/a-radically-simple-way-to-boost-a-neighborhood/\">Freakonomics #538: A Radically Simple Way to Boost a Neighborhood</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/12/live-long-and-prosper-a-retrospective-of-video-game-roles-played-by-star-trek-actors/\">The surprisingly robust careers of Star Trek stars who became video game voice actors</a> - <em>Anna Washenko</em></li>\n</ul>\n<hr />\n<h2>Politics</h2>\n<ul>\n<li><a href=\"https://www.scotusblog.com/2023/11/justices-to-consider-multi-pronged-constitutional-attack-on-sec/\">Supreme Court to consider multi-pronged constitutional attack on SEC</a> - <em>Ronald Mann</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://ofdollarsanddata.com/solving-the-wrong-problem/\">Solving the Wrong Problem</a> - <em>Nick Maggiulli</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Tim Barry - Dad’s iPad</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/uaFh068POWM\" title=\"Tim Barry - Dad’s iPad\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/03/november-2023-check-in/",
      "url": "https://kpwags.com/posts/2023/12/03/november-2023-check-in/",
      "title": "November 2023 Check-In",
      "content_html": "\n\t\t<p>I can’t believe Thanksgiving has come and gone and that we’re already into December. November was a good month, after a 2 week vacation I had to come back to the real world and back to work, but I still had some good breaks during the month.\nAs I mentioned <a href=\"https://kpwags.com/posts/2023/10/29/aruba\">previously</a>, my wife and I spent 2 weeks that second half of October in Aruba to celebrate our 10 year anniversary. After spending a glorious 2 weeks in a tropical paradise without a care in the world, we had to come back to reality and return to the workplace. It wasn’t the end of the world of course, but I’d rather be sitting back on the beach with a cocktail.</p>\n<h2>Writing - Umm, Not as Much</h2>\n<p>I went into this month planning to do more writing and even take part in NaNoWriMo. The month started out strong, I was writing 1,000+ words a day. Then it all got away from me and I hardly wrote much at all. I want to get back into it to some extent.</p>\n<h2>Some Smaller Trips</h2>\n<p>The middle two weekends of the month I ended up taking two trips. My wife and I first took a long weekend to go down to Cape May, New Jersey for her to go to a cross-stitch retreat she had been looking forward to. I got to spend the time checking out the local breweries and enjoying the surprisingly mild weather.</p>\n<p>The next weekend, I drove down to Maryland to meet up with my best friend to go see The Menzingers play in his neck of the woods. Like my previous times seeing them, they put on an awesome show. The opening acts were pretty good too.</p>\n<h2>The Fun of Home Ownership</h2>\n<p>Halfway through the month, I happened to notice that our hot water heater was leaking. There was some water in the drip tray so there was probably a pinhole leak or slight crack in the bottom of the heater. So that had to be replaced. Fortunately my father-in-law was able to help me out and we were able to get a new one in place in a couple hours.</p>\n<p>This led to the next problem. The old hot water heater wouldn’t drain. Apparently the drain got gunked up with mineral deposits. It’s still sitting in the basement while we try to come up with a plan of attack. This led me to the next day cleaning out our water softener in an attempt to help prevent the gunk from building up in the new system. I’d known that it needed to be cleaned, I just didn’t realize how bad it had gotten. That was a fun task with a shopvac and a broom handle to suck up the water and break up all the salt.</p>\n<p>Buy a house they said…it will be fun they said…harumph!</p>\n<h2>A Sick Thanksgiving</h2>\n<p>Unfortunately for us, I got sick on Thanksgiving, and my wife caught it shortly thereafter. Just a rather nasty cold, but it kept us home and muted our plans. It wasn’t a huge deal, just a lot of relaxing on the couch which was nice. I’m not a huge turkey fan, so it was nice to have an alternative menu for dinner. I ended up feeling well enough to cook up some steak and seafood.</p>\n<p>Now…onto the holiday season!</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> 15.43 miles</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>I’ve mostly gotten back into my PHUL routine I started back before Aruba.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/the-forge-of-god-greg-bear/7252312\">The Forge of God</a> by Greg Bear</li>\n<li><a href=\"https://bookshop.org/p/books/anvil-of-stars-greg-bear/7252548\">Anvil of Stars</a> by Greg Bear</li>\n<li><a href=\"https://bookshop.org/p/books/the-creative-act-a-way-of-being-rick-rubin/18543579?ean=9780593652886\">The Creative ACT</a> by Rick Rubin</li>\n<li><a href=\"https://bookshop.org/p/books/a-city-on-mars-can-we-settle-space-should-we-settle-space-and-have-we-really-thought-this-through-zach-weinersmith/19777591?ean=9781984881724\">A City on Mars</a> by Kelly &amp; Zach Weinersmith</li>\n<li><a href=\"https://bookshop.org/p/books/emotional-intelligence-2-0-with-access-code-travis-bradberry/1516289?ean=9780974320625\">Emotional Intelligence 2.0</a> by Dr. Travis Bradberry &amp; Dr. Jean Greaves</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/whitelash-hope-and-horror-in-a-changing-america-wesley-lowery/17944198?ean=9780358393269\">American Whitelash</a> by Wesley Lowery</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/49\">November 6 (#49)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/50\">November 13 (#50)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/51\">November 20 (#51)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/52\">November 21 (#52)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/11/21/the-media-and-protecting-democracy\">the media and democracy</a></li>\n<li>Wrote about the <a href=\"https://kpwags.com/posts/2023/11/27/default-apps\">default apps I use</a></li>\n<li>Wrote about the <a href=\"https://kpwags.com/posts/2023/11/30/fitvids\"><code>fit-vids</code> web component</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued to play <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n<li>Started <a href=\"https://www.nintendo.com/us/store/products/super-mario-rpg-switch/\">Super Mario RPG</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt3526078/\">Schitt’s Creek</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt0090605/\">Aliens</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0816692/\">Interstellar</a></li>\n<li><a href=\"https://www.imdb.com/title/tt22687790/\">A Haunting in Venice</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0103644/\">Alien3</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-03T15:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/12/03/a-successful-i-hope-brew-day/",
      "url": "https://kpwags.com/posts/2023/12/03/a-successful-i-hope-brew-day/",
      "title": "A Successful (I Hope) Brew Day",
      "content_html": "\n\t\t<p>Yesterday I had my first brew day in almost 2 years. I ended up brewing a Harpoon <a href=\"https://www.harpoonbrewery.com/beer/winter-warmer/\">Winter Warmer</a> clone.\n<picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/YbNeEEzpkP-960.webp 960w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/YbNeEEzpkP-960.gif 960w\" /><img alt=\"My small water pot sitting on my propane stove heating up to steep the grains\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/YbNeEEzpkP-960.jpeg\" width=\"960\" height=\"1280\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/7qJRbUdm0Z-960.webp 960w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/7qJRbUdm0Z-960.gif 960w\" /><img alt=\"My large pot sitting on the propane stove heating up the wort\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/7qJRbUdm0Z-960.jpeg\" width=\"960\" height=\"1280\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/rK7dvL9ofx-960.webp 960w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/rK7dvL9ofx-960.gif 960w\" /><img alt=\"My large pot boiling the wort with steam coming up out of it\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/rK7dvL9ofx-960.jpeg\" width=\"960\" height=\"1280\" /></picture></p>\n<p>I was able to get all the ingredients the night before and the day thankfully went mostly smoothly. The only hiccup was that I ran out of sparging water and had to quickly heat some more up. Other than that, things went well and hopefully in a month or so I’ll have 2 dozen plus 22 ounce bottles of winter beer.</p>\n<p>The big downside of brewing is that it takes a while to know if you screwed up.</p>\n<p>One more note, I actually did buy a 6-pack of Harpoon’s Winter Warmer to compare with when all is said and done.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-12-03T14:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/11/30/fitvids/",
      "url": "https://kpwags.com/posts/2023/11/30/fitvids/",
      "title": "FitVids",
      "content_html": "\n\t\t<p>On each one of my reading logs, I add a YouTube video for “A Song to Leave You With”. It uses a React component to render the embedded YouTube video. Thanks to <a href=\"https://daverupert.com/\">Dave Rupert</a>, I’ve been able to improve it.</p>\n<p>The one thing I’ve had to deal with was handling different browser sizes. Suffice it to say, I only rendered the iFrame in 2 different sizes. It worked, but was, how shall we put it, sub-optimal. Recently I added a width selector as part of my custom themes for my site and the width issue on the embedded video reared its ugly head again.</p>\n<p>Dave recently posted about <a href=\"https://daverupert.com/2023/10/fitvids-has-a-web-component-now/\">FitVids having a web component</a> and all of a sudden the pieces clicked.</p>\n<p>Thanks to his <code>&lt;fit-vids&gt;</code> web component, my embedded YouTube videos now fit whatever screen they’re displayed on, at whatever width the user chooses on my site.</p>\n<p>Thanks Dave!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/11/27/default-apps/",
      "url": "https://kpwags.com/posts/2023/11/27/default-apps/",
      "title": "Default Apps",
      "content_html": "\n\t\t<p>I’ve seen several people posting the default apps they use for various tasks so I figured I’d join in.</p>\n<p>📨 <strong>Mail Client:</strong> Default MacOS / iOS Mail App, <a href=\"https://www.thunderbird.net/en-US/\">Thunderbird</a> on PC</p>\n<p>📮 <strong>Mail Server:</strong> <a href=\"http://fastmail.com/\">FastMail</a> &amp; <a href=\"https://mail.google.com/\">Gmail</a></p>\n<p>📝 <strong>Notes:</strong> Mixture of <a href=\"http://notion.so/\">Notion</a> &amp; <a href=\"https://bear.app/\">Bear</a></p>\n<p>✅ <strong>To-Do:</strong> <a href=\"https://culturedcode.com/things/\">Things</a></p>\n<p>📷 <strong>Photo Shooting:</strong> Mostly my iPhone 14 Pro, but I occasionally will use my Canon 60D or my Canon G1X</p>\n<p>🎨 <strong>Photo Editing:</strong> <a href=\"https://lightroom.adobe.com/\">Adobe Lightroom</a></p>\n<p>📆 <strong>Calendar:</strong> Google Calendar for family, FastMail Calendar for personal</p>\n<p>📁 <strong>Cloud File Storage:</strong> <a href=\"http://dropbox.com/\">Dropbox</a> mostly</p>\n<p>📖 <strong>RSS:</strong> <a href=\"https://feedbin.com/\">Feedbin</a> with <a href=\"https://www.reederapp.com/\">Reeder</a></p>\n<p>🙍🏻‍♂️ <strong>Contacts:</strong> MacOS/iOS Contacts</p>\n<p>🌐 <strong>Browser:</strong> Desktop: Safari/Arc/Firefox, Mobile: Safari</p>\n<p>💬 <strong>Chat:</strong> Apple Messages</p>\n<p>🔖 <strong>Bookmarks:</strong> All over the place</p>\n<p>📑 <strong>Read It Later:</strong> <a href=\"http://omnivore.app/\">Omnivore</a> &amp; <a href=\"http://feedbin.com/\">Feedbin</a></p>\n<p>📜 <strong>Word Processing:</strong> Microsoft Word</p>\n<p>📈 <strong>Spreadsheets:</strong> Microsoft Excel</p>\n<p>📊 <strong>Presentations:</strong> Don’t really do these, but would use Microsoft PowerPoint</p>\n<p>🛒 <strong>Shopping Lists:</strong> Apple Notes for Shared, <a href=\"https://bear.app/\">Bear</a> for Personal</p>\n<p>🍴 <strong>Meal Planning:</strong> Google Calendar &amp; <a href=\"https://macrofactorapp.com/\">MacroFactor</a></p>\n<p>💰 <strong>Budgeting and Personal Finance:</strong> Shared Google Sheets</p>\n<p>📰 <strong>News:</strong> RSS</p>\n<p>🎵 <strong>Music:</strong> <a href=\"https://music.apple.com/us/browse\">Apple Music</a> &amp; <a href=\"https://brushedtype.co/doppler/\">Doppler</a></p>\n<p>🎤 <strong>Podcasts:</strong> <a href=\"https://pocketcasts.com/\">PocketCasts</a></p>\n<p>🔐 <strong>Password Management:</strong> <a href=\"https://1password.com/\">1Password</a></p>\n<p>🧑‍💻 <strong>Code Editor:</strong> <a href=\"https://code.visualstudio.com/\">VS Code</a>, <a href=\"https://www.jetbrains.com/rider/\">Rider</a>, &amp; <a href=\"https://visualstudio.microsoft.com/\">Visual Studio</a></p>\n<p>✈️ <strong>VPN:</strong> <a href=\"https://nordvpn.com/\">NordVPN</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/52/",
      "url": "https://kpwags.com/reading-log/52/",
      "title": "Reading Log - November 27, 2023 (#52)",
      "content_html": "\n\t\t<p>I've been wanting to do more with web components, and a lot of this week is tied to that. Also, NASA makes a calculated risk and more new features in C#.</p>\n<hr />\n<h2>.NET</h2>\n<ul>\n<li><a href=\"https://pmichaels.net/c-sharp-interceptors/\">C# Interceptors</a> - <em>Paul Michaels</em></li>\n<li><a href=\"https://laurentkempe.com/2023/11/14/whats-new-in-csharp-12/\">What's new in C# 12</a> - <em>Laurent Kempé</em></li>\n</ul>\n<hr />\n<h2>Web Development</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/detecting-when-a-web-component-is-loaded-with-css/\">Detecting when a Web Component is loaded with CSS</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://jakelazaroff.com/words/web-components-eliminate-javascript-framework-lock-in/\">Web Components Eliminate JavaScript Framework Lock-in</a> - <em>Jake Lazaroff</em></li>\n<li><a href=\"https://mikeaparicio.com/posts/2023-05-22-why-were-bad-at-css/\">Why we're bad at CSS</a> - <em>Mike Aparicio</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/11/few-ways-css-easier-write-2023/\">A Few Ways CSS Is Easier To Write In 2023</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/html-web-components-an-example/\">HTML Web Components: An Example</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/width-and-height-in-css/\">Width and Height in CSS</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://gomakethings.com/an-example-of-an-html-web-component/\">An example of an HTML Web Component</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://www.telerik.com/blogs/react-basics-guide-useeffect-hook\">React Basics: Guide to the useEffect Hook</a> - <em>John Au-Yeung</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/11/21/congrats-to-elon-musk-i-didnt-think-you-had-it-in-you-to-file-a-lawsuit-this-stupid-but-you-crazy-bastard-you-did-it/\">Congrats To Elon Musk: I Didn’t Think You Had It In You To File A Lawsuit This Stupid. But, You Crazy Bastard, You Did It!</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.theverge.com/2023/11/20/23970274/x-elon-musk-media-matters-lawsuit-nazi-ads-filed\">X sues Media Matters to silence moderation criticism</a> - <em>Adi Robertson</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/11/nasa-will-launch-a-mars-mission-on-blue-origins-first-new-glenn-rocket/\">NASA will launch a Mars mission on Blue Origin’s first New Glenn rocket</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/business/autos/tesla-vs-toyota-is-the-new-hot-battle-in-cars-571a8e68\">Tesla vs. Toyota Is the New Hot Battle in Cars</a> - <em>Tim Higgins</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/bring-us-canada\">Bring Us Canada</a> - <em>Barry Petchesky</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - Ultraviolet</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/exSRCXS8tlw\" title=\"The Menzingers - Ultraviolet\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/kelly-zach-weinersmith-a-city-on-mars/",
      "url": "https://kpwags.com/books/kelly-zach-weinersmith-a-city-on-mars/",
      "title": "Book Notes for A City on Mars: Can We Settle Space, Should We Settle Space, and Have We Really Thought This Through?",
      "content_html": "\n\t\t<p>If you haven’t already picked up on it, I’m a pretty big space geek. I love reading about it and have dreamed of going up into space. This book was right up my alley.</p>\n<p>This book throws some cold water on humanity’s dream of truly settling space, at least in the near term. Kelly and Zach do a fantastic job of going through the different challenges, technologic, scientific and legal of us as a species venturing into space. They touch on a lot of things that we often don’t think about when talking about sending humans into space.</p>\n<p>The book is fascinating and is written in such a way to be realistic about things, but also with the hope for the future and the caveats that there is much we don’t know and don’t have data for.</p>\n<p>I’m a fan of Zach’s <a href=\"https://www.smbc-comics.com/\">Saturday Morning Breakfast Cereal</a> comics and this book has the same humor that he’s known for. If you enjoy space and science, I’d highly recommend this book.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/51/",
      "url": "https://kpwags.com/reading-log/51/",
      "title": "Reading Log - November 20, 2023 (#51)",
      "content_html": "\n\t\t<p>This week the latest version of .NET was released as weell as SpaceX taking their next step with <em>Starship</em> and more.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/html-web-components/\">HTML Web Components</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://www.code4it.dev/csharptips/unit-test-model-validation/\">How to create Unit Tests for Model Validation</a> - <em>Davide Bellone</em></li>\n<li><a href=\"https://trstringer.com/oss-compensation-broken/\">The Lack of Compensation in Open Source Software is Unsustainable</a> - <em>Thomas Stringer</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-csharp-12/\">Announcing C# 12</a> - <em>Kathleen Dollard</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8/\">Announcing .NET 8</a> - <em>Gaurav Seth</em></li>\n</ul>\n<hr />\n<h2>The Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/11/14/but-what-do-we-do-if-google-is-legitimately-just-a-better-search-engine/\">But What Do We Do If Google Is Legitimately Just A Better Search Engine?</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/security/2023/11/the-fcc-says-new-rules-will-curb-sim-swapping-im-pessimistic/\">The FCC says new rules will curb SIM swapping. I’m pessimistic</a> - <em>Dan Goodin</em></li>\n<li><a href=\"https://www.theverge.com/2023/11/16/23964171/apple-iphone-rcs-support\">Apple says iPhones will support RCS in 2024</a> - <em>Emma Roth</em></li>\n<li><a href=\"https://www.zdnet.com/article/microsoft-is-still-paying-for-its-mobile-mistakes-10-years-later/\">Microsoft is still paying for its mobile mistakes 10 years later</a> - <em>Ed Bott</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/11/spacex-can-celebrate-three-big-wins-after-second-starship-test-flight/\">Starship brought the thunder as it climbed into space for the first time</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/11/jupiters-moon-ganymede-is-telling-us-more-about-its-alien-ocean/\">Jupiter’s moon Ganymede is telling us more about its alien ocean</a> - <em>Elizabeth Rayne</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.half-life.com/en/halflife25/\">Half-Life 25th Anniversary Update</a> - <em>Valve</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/5049098/2023/11/10/cj-stroud-bio-wiki-life-story/\">Steeled by lessons off the field, C.J. Stroud is taking the NFL by storm</a> - <em>Zak Keefer</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/11/15/1197954635/chinas-real-estate-crisis-explained\">Planet Money #1693: China's real estate crisis, explained</a></li>\n<li><a href=\"https://www.npr.org/2023/11/15/1197958305/school-vouchers-choice-learning\">The Indicator #1483: The evidence on school vouchers that'll please nobody</a></li>\n<li><a href=\"https://podcasts.apple.com/us/podcast/sci-fi-writer-andy-weir-doesnt-love-writing/id1346314086?i=1000607234826\">WorkLife with Adam Grant: Sci-fi writer Andy Weir doesn't love writing</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://defector.com/heres-75-give-me-one-frosty-tesla-cyberbeer-please-gzzt-mzzzzt-zzzzztt-error-error-fatal-error\">Here’s $75, Give Me One Frosty Tesla Cyberbeer Please GZZT MZZZZT ZZZZZTT ERROR ERROR FATAL ERROR</a> - <em>Albert Burneko</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Mercy Union - The Void</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ZTCVqQBse-w\" title=\"Mercy Union - The Void\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/rick-rubin-the-creative-act/",
      "url": "https://kpwags.com/books/rick-rubin-the-creative-act/",
      "title": "Book Notes for The Creative ACT: A Way of Being",
      "content_html": "\n\t\t<blockquote>\n<p>Nothing in this book is known to be true. It's a reflection on what I've noticed. Not facts so much as thoughts.</p>\n</blockquote>\n<blockquote>\n<p>Some ideas may resonate, others may not. A few may awaken an inner knowing you forgot you had. Use what's helpful. Let go of the rest.</p>\n</blockquote>\n<p>That’s Rick Rubin’s introduction to the book. From my perspective, it was a good way to go into the book.</p>\n<p>Recently I’ve been trying to branch into my creative side and have been writing a lot more. I even started what started out as a short story and has since only been growing into something more like a novella.</p>\n<blockquote>\n<p>Notice yourself feeling the weight of self-criticism or the pressure to live up to expectations. And remember that commercial success is completely out of your control. All that matters is that you are making something you love, to the best of your ability, here and now.</p>\n</blockquote>\n<p>I enjoyed this book as it gave me a lot of helpful thoughts to get over my concerns that what I’m working on isn’t good. (I mean it might not be good, but it certainly won’t be any good if I just give up.) If I’m enjoying it, which I am, then that’s what matters.</p>\n<blockquote>\n<p>One of the greatest rewards of making art is our ability to share it. Even if there is no audience to receive it, we build the muscle of making something and putting it out into the world. Finishing our work is a good habit to develop. It boosts confidence. Despite our insecurities, the more times we can bring ourselves to release our work, the less weight insecurity has.</p>\n</blockquote>\n<blockquote>\n<p>Avoid overthinking. When you're happy with the work and you're moved to share it with a friend, it might be time to share it with the world as well.</p>\n</blockquote>\n<p>Again, I have no idea if anything I write will ever be really consumed. I’m not expecting or even targeting commercial success or anything, I’m just trying something new, doing something I’m enjoying. This book helped by pointing that out.</p>\n<p>The book also provided some good tips on breaking through various blockers artists, musicians and writers often face. Some of them would also help with my software development work as well.</p>\n<p>If you’re interested in any kind of creative work, I’d recommend this book.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/50/",
      "url": "https://kpwags.com/reading-log/50/",
      "title": "Reading Log - November 13, 2023 (#50)",
      "content_html": "\n\t\t<p>I can't believe this is the 50th issue of my current take on my reading logs. This week I read about the renaissance of CSS, issues at SpaceX, the cancellation of a promising new nuclear power station, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://pdx.su/blog/2023-10-25-css-is-fun-again\">CSS is fun again</a></h2>\n\t<div class=\"in-depth-meta\">Jeff Sandberg</div>\n\t<div class=\"in-depth-text\">\n<blockquote><p>CSS has been undergoing a quiet renaissance lately. Lots of big features which previously required an external tool to use, are now native parts of the language, and its growing more and more all the time. If you haven’t used CSS in a long time, for whatever reason, now is the time to take a look again.</p></blockquote>\n<p>It’s really amazing how far CSS has come recently with all the new features that make both big and little things easier.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://blog.jim-nielsen.com/2023/websites-are-for-normies/\">Making a Website is for Everyone</a></h2>\n\t<div class=\"in-depth-meta\">Jim Nielsen</div>\n\t<div class=\"in-depth-text\">\n<p>I agree with both - <a href=\"https://indieweb.social/@nachtfunke/110912228740815266\">Thomas</a> and Jim on this.</p>\n<blockquote><p>The web’s low barrier to entry led me to a career that has been a boon for my life. I hope it can do the same for others.</p></blockquote>\n<p>While certain parts of web design and development can be far more difficult than others, the tools available for everyone to build their own website have only grown better and easier. Long past are the times of Geocities and MySpace customization.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.mensurdurakovic.com/hard-to-swallow-truths-they-wont-tell-you-about-software-engineer-job/\">10 hard-to-swallow truths they won't tell you about software engineer job</a></h2>\n\t<div class=\"in-depth-meta\">Mensur Durakovic</div>\n\t<div class=\"in-depth-text\">\n<p>I agree with some of them more than others, but this one stuck with me:</p>\n<blockquote><p>Sometimes you don’t know the whole story. I have seen some cases where a person just can’t do their job properly. They are burdened with tons of tasks and doing work for 2 people.</p></blockquote>\n<p>With both work and life, we don’t necessarily know what others are going through. I know I sometimes get annoyed with the timeliness of responses from a certain team at work, but also have to take a deep breath and remember that the team is currently understaffed (they’re working on it) and often overworked. We’re on the same (larger) team and want the projects to succeed and that’s what’s important.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://chriscoyier.net/2023/10/19/style-scoped/\">Style Scoped</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://michaelscodingspot.com/premature-infrastructure-is-evil/\">Premature Infrastructure is the Root of All Evil</a> - <em>Michael Shpilt</em></li>\n<li><a href=\"https://geoffgraham.me/what-exactly-is-modern-css/\">What Exactly is “Modern” CSS?</a> - <em>Geoff Graham</em></li>\n<li><a href=\"https://lea.verou.me/blog/2023/minimalist-affordances/\">Minimalist Affordances: Making the right tradeoffs</a> - <em>Lea Verou</em></li>\n<li><a href=\"https://gomakethings.com/how-do-build-tools-break-backwards-compatibility/\">How do build tools break backwards compatibility?</a> - <em>Chris Ferdinandi</em></li>\n</ul>\n<hr />\n<h2>Space</h2>\n<ul>\n<li><a href=\"https://www.reuters.com/investigates/special-report/spacex-musk-safety/\">At SpaceX, worker injuries soar in Elon Musk’s rush to Mars</a> - <em>Marisa Taylor</em></li>\n<li><a href=\"https://www.scientificamerican.com/article/heres-how-to-bring-mars-down-to-earth-let-nasa-do-what-nasa-does-best/\">Here’s How to Bring Mars Down to Earth: Let NASA Do What NASA Does Best</a> - <em>Phil Plait</em></li>\n</ul>\n<hr />\n<h2>Climate Change</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/first-small-scale-nuclear-plant-us-nuscale-canceled/\">The First Small-Scale Nuclear Plant in the US Died Before It Could Live</a> - <em>Gregory Barber</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://wondery.com/shows/how-i-built-this/episode/10386-twilio-jeff-lawson/\">How I Built This #504: Twilio: Jeff Lawson</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/carbon-capture-promises-risks/\">Make Me Smart #1042: The promises and risks of carbon capture</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jonathan Coulton - If You Could Read My Mind</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/2FA9Aj5-E_w\" title=\"Jonathan Coulton - If You Could Read My Mind\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/11/07/october-2023-check-in/",
      "url": "https://kpwags.com/posts/2023/11/07/october-2023-check-in/",
      "title": "October 2023 Check-In",
      "content_html": "\n\t\t<p>October was a good month. I spent the latter half of it in Aruba and had a great time. But outside Aruba, the month was mostly quiet.</p>\n<h2>Aruba</h2>\n<p>Aruba was gorgeous. I wrote about my trip <a href=\"https://kpwags.com/posts/2023/10/29/aruba\">here</a> and was happy to spend 2 weeks in paradise with my wife for our 10 year anniversary. I spent so much of it just enjoying the rest and relaxation. I was happy to come back home to my own bed though.</p>\n<h2>Writing More</h2>\n<p>One of the things I said I was going to do at the end of September was to write more, and to write every day. While I can’t say that I’ve succeeded in writing every day, I have written something almost every day. I only missed 9 days, and 2 of them were travel days to and from Aruba. A lot of what I wrote were either blog posts or draft blog posts that may or may not ever see the light of day. I did get back into writing a story I started back in June. I’m not sure how long the story will end up being, but I plan on spending a lot of time on it in November for NaNoWriMo. Not sure how many blog posts I’ll end up writing, but I’m sure I’ll write some.</p>\n<h2>Getting Back into Fitness</h2>\n<p>When I got back from Aruba and weighed in, I realized I had started to slip a little bit with my fitness goals. I have no issue with letting go while I was in Aruba. It’s a vacation and we only have 1 life to live. Enjoy it. But getting back, I have started to buckle down and pay closer attention to my diet and exercise habits. I’m hoping to continue that into November...and...the holidays.</p>\n<h2>Analog Journaling</h2>\n<p>I had written a month or so ago about my back and forth on whether I liked <a href=\"https://kpwags.com/posts/2023/09/28/analog-versus-digital\">analog or digital</a>. I decided that for my journaling I was going to go back to a moleskine-like notebook and physically write about my days. I have to say I like it. Even during vacation, I spent a little bit of time before bed writing about my days.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Only 12.5 miles this month. Being in Aruba for 2 weeks didn’t help.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>I’ve been slacking off on this, but I’ve started back up at the end of the month.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/team-of-rivals-the-political-genius-of-abraham-lincoln/9780743270755\">Team of Rivals: The Political Genius of Abraham Lincoln</a> by Doris Kearns Goodwin</li>\n<li><a href=\"https://bookshop.org/p/books/coders-the-making-of-a-new-tribe-and-the-remaking-of-the-world-clive-thompson/12477150?ean=9780735220584\">Coders: The Making of a New Tribe and the Remaking of the World</a> by Clive Thompson</li>\n<li><a href=\"https://bookshop.org/p/books/on-writing-a-memoir-of-the-craft-stephen-king/14560198\">On Writing: A Memoir of the Craft</a> by Stephen King</li>\n<li><a href=\"https://bookshop.org/p/books/starter-villain-john-scalzi/18753219?ean=9780765389220\">Starter Villain</a> by John Scalzi</li>\n<li><a href=\"https://bookshop.org/p/books/your-face-belongs-to-us-a-secretive-startup-s-quest-to-end-privacy-as-we-know-it-kashmir-hill/19573494?ean=9780593448564\">Your Face Belongs to Us: A Secretive Startup's Quest to End Privacy as We Know It</a> by Kashmir Hill</li>\n<li><a href=\"https://bookshop.org/p/books/number-go-up-inside-crypto-s-wild-rise-and-staggering-fall-zeke-faux/19900961?ean=9780593443811\">Number Go Up: Inside Crypto's Wild Rise and Staggering Fall</a> by Zeke Faux</li>\n<li><a href=\"https://bookshop.org/p/books/black-river-orchard-chuck-wendig/19598190?ean=9780593158746\">Black River Orchard</a> by Chuck Wendig</li>\n<li><a href=\"https://bookshop.org/p/books/extremely-online-the-untold-story-of-fame-influence-and-power-on-the-internet-taylor-lorenz/19718842?ean=9781982146863\">Extremely Online: The Untold Story of Fame, Influence, and Power on the Internet</a> by Taylor Lorenz</li>\n<li><a href=\"https://bookshop.org/p/books/be-useful-seven-tools-for-life-arnold-schwartzenegger/19976031\">Be Useful: Seven Tools for Life</a> by Arnold Schwarzenegger</li>\n<li><a href=\"https://bookshop.org/books/subprime-attention-crisis-advertising-and-the-time-bomb-at-the-heart-of-the-internet/9780374538651\">Subprime Attention Crisis: Advertising and the Time Bomb at the Heart of the Internet</a> by Tim Hwang</li>\n<li><a href=\"https://bookshop.org/p/books/the-poison-eaters-and-other-stories-holly-black/6315246\">The Poison Eaters: And Other Stories</a> by Holly Black</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/the-forge-of-god-greg-bear/7252312\">The Forge of God</a> by Greg Bear</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/46\">October 2</a></li>\n<li><a href=\"https://kpwags.com/reading-log/47\">October 9</a></li>\n<li><a href=\"https://kpwags.com/reading-log/48\">October 30</a></li>\n</ul>\n</li>\n<li>Wrote about\n<ul>\n<li><a href=\"https://kpwags.com/posts/2023/10/01/staying-silent-is-political-too\">Staying silent is political too</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/02/personal-sites-are-never-done\">How I’m constantly tweaking my site</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/03/unit-testing-and-react-hook-form\">My solution for unit testing React Hook Form</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/06/in-defense-of-typescript\">Defending TypeScript</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/06/its-another-red-october\">More Phillies postseason baseball</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/07/the-kids-online-safety-act-must-fail\">The danger of the Kids Online Safety Act (KOSA)</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/09/the-stress-of-the-playoffs\">The stress of being a fan whose team is in the playoffs</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/13/gary-bettman-and-the-nhl-are-cowards-part-2\">The NHL and Gary Bettman being cowards (to put it mildly)</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/29/aruba\">My trip to Aruba</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/10/30/i-need-more-time-in-the-day\">Being busy and needing more time in the day</a></li>\n</ul>\n</li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continuing <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished season 4 of <a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt3526078/\">Schitt’s Creek</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li>None</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/49/",
      "url": "https://kpwags.com/reading-log/49/",
      "title": "Reading Log - November 6, 2023 (#49)",
      "content_html": "\n\t\t<p>Caught up on some of my RSS feeds this week. This week it's the new text-wrap CSS property, a new entrant to the space race, Microsoft cracking down (dangerously?) on game controllers, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://developer.chrome.com/blog/css-text-wrap-balance/\">CSS text-wrap: balance</a></h2>\n\t<div class=\"in-depth-meta\">Adam Argyle</div>\n\t<div class=\"in-depth-text\">\n<p>I’ve been using this for a little bit for my headlines. I like it. I just hope Firefox &amp; Safari pick it up soon.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://blog.ploeh.dk/2023/10/23/domain-model-first/\">Domain Model first</a> - <em>Mark Seeman</em></li>\n<li><a href=\"https://jonhilton.net/blazor-search-page/\">When a form is actually... oh it's a form</a> - <em>Jon Hilton</em></li>\n<li><a href=\"https://jakelazaroff.com/words/web-components-will-outlive-your-javascript-framework/\">Web Components Will Outlive Your JavaScript Framework</a> - <em>Jake Lazaroff</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/10/beginner-web-development-working-career/\">What I Wish I Knew About Working In Development Right Out Of School</a> - <em>Victoria Johnson</em></li>\n<li><a href=\"https://www.roundthecode.com/dotnet-tutorials/primary-constructors-adds-class-parameters-csharp-12\">Primary constructors adds class parameters in C# 12</a> - <em>Round The Code</em></li>\n<li><a href=\"https://www.bram.us/2023/10/13/whats-new-in-css-2022-10-12-frontmania/?ref=web-design-weekly.com\">What’s new in CSS? </a> - <em>Bramus Van Damme</em></li>\n<li><a href=\"https://eli.thegreenplace.net/2023/es-module-imports-in-nodejs-and-the-browser/\">ES Module imports in Node.js and the browser</a> - <em>Eli Bendersky</em></li>\n<li><a href=\"https://blog.stephaniestimac.com/posts/2023/10/css-text-wrap/?ref=web-design-weekly.com\">When to use CSS text-wrap: balance; vs text-wrap: pretty;</a> - <em>Stephanie Stimac</em></li>\n<li><a href=\"https://yarnpkg.com/blog/release/4.0\">Release: Yarn 4.0</a> - <em>Maël Nison</em></li>\n<li><a href=\"https://jwdallas.com/posts/namingcssvariables/\">Naming Variables In CSS</a> - <em>Jonathan Dallas</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.economist.com/business/2023/11/05/silicon-valley-is-piling-in-to-the-business-of-snooping\">Silicon Valley is piling in to the business of snooping</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.techdirt.com/2023/10/31/in-one-lawsuit-louisiana-in-another-theyre-looking-to-pressure-websites-to-change/\">In One Lawsuit, Louisiana &amp; Missouri Say Gov’t Can Never Pressure Websites To Change; In Another, They’re Looking To Pressure Websites To Change</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.wired.com/story/unciphered-ironkey-password-cracking-bitcoin/\">They Cracked the Code to a Locked USB Drive Worth $235 Million in Bitcoin. Then It Got Weird</a> - <em>Andy Greenberg</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/11/after-decades-of-dreams-a-commercial-spaceplane-is-almost-ready-to-fly/\">After decades of dreams, a commercial spaceplane is almost ready to fly</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/10/i-spy-with-my-cold-war-satellite-eye-nearly-400-roman-forts-in-the-middle-east/\">I spy with my Cold War satellite eye… nearly 400 Roman forts in the Middle East</a> - <em>Jennifer Ouellette</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/10/this-is-how-we-could-possibly-build-paved-roads-on-the-moon/\">This is how we could possibly build paved roads on the Moon</a> - <em>Elizabeth Rayne</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.rockpapershotgun.com/the-lord-of-the-rings-return-to-moria-review\">The Lord Of The Rings: Return To Moria review: solid cozy survival fun for a group of pals</a> - <em>Alice Bell</em></li>\n<li><a href=\"https://howtomarketagame.com/2023/09/25/john-romero-on-his-book-doom-guy-and-developing-games-at-a-small-scale/\">John Romero on his Book Doom Guy and Developing Games at a Small Scale</a> - <em>ZUKALOUS</em></li>\n<li><a href=\"https://www.nme.com/news/gaming-news/xbox-will-block-third-party-controllers-to-preserve-the-console-experience-3525752\">Xbox will block third-party controllers to “preserve the console experience”</a> - <em>Imogen Donovan</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/10/31/the-retail-theft-surge-that-isnt-report-says-crime-is-being-exaggerated-to-cover-up-other-retail-issues/\">The Retail Theft Surge That Isn’t: Report Says Crime Is Being Exaggerated To Cover Up Other Retail Issues</a> - <em>Tim Cushing</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.bloomberg.com/news/audio/2023-11-02/zeke-faux-on-crypto-and-the-digital-asset-frenzy-podcast\">Masters in Business: Zeke Faux on Crypto and the Digital Asset Frenzy</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.esquire.com/entertainment/books/a45686651/why-i-love-paperback-books/\">Why I Love Paperbacks</a> - <em>Isaac Fitzgerald</em></li>\n<li><a href=\"https://www.vice.com/en/article/7kxdmx/one-regulation-could-have-stopped-a-nationwide-car-theft-wave-why-dont-we-have-it\">One Regulation Could Have Stopped a Nationwide Car Theft Wave. Why Don't We Have It?</a> - <em>Aaron Gordon</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>blink-182 - Anthem Part 3</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/lv-cOIuJ1k0\" title=\"blink-182 - Anthem Part 3\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-11-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/30/i-need-more-time-in-the-day/",
      "url": "https://kpwags.com/posts/2023/10/30/i-need-more-time-in-the-day/",
      "title": "I Need More Time in the Day",
      "content_html": "\n\t\t<p>I really need more time in the day. I have so many things I want to do. I want to write more, I want to finish a side project, practice guitar, and more. But after work and cooking dinner, the hours in the day aren’t quite there.</p>\n<p>Over the course of vacation I read two books that have inspired me to buckle down and focus on side projects and writing.</p>\n<h2>Side Projects</h2>\n<p>I read <a href=\"https://bookshop.org/p/books/coders-the-making-of-a-new-tribe-and-the-remaking-of-the-world-clive-thompson/12477150?ean=9780735220584\">Coders</a> by Clive Thompson. In the book, he talked about the different companies and developers, and what they have been able to accomplish. I’m by no means naive enough to think that my little side projects are going to change the world or anything, but it’d be nice to finish something. Even if the app is just for me and no one else has any use for it, it would make me happy.</p>\n<h2>Writing</h2>\n<p>The other book I read was <a href=\"https://bookshop.org/p/books/on-writing-a-memoir-of-the-craft-stephen-king/14560198\">On Writing</a> by Stephen King. I’ve had several ideas for short stories, novellas, &amp; novels, but have never really sat down and started writing. The book was an interesting look at how he got to be where he is today, and some of the tips and thoughts that have helped him succeed. And while what works for him is by no means universal, it has given me a slight push to write more.</p>\n<p>His one suggestion is to write 1,000 words a day. I have been trying to write every day, but I never really had a word goal. I think that is going to change to be 1,000 words a day.</p>\n<p>Most days while in Aruba, I would spend the late afternoons, after the pool and the sun, but before dinner, in the lobby bar writing over a martini or other cocktail. I’ve made good progress in my writing and am off to a good start, but I’ll need to spend time to keep it up.</p>\n<h2>Everything Else</h2>\n<p>Other things I want to focus on for the last two months of the year are guitar, and my fitness. I’ve been a little lazy of late for fitness, and I want to change that in November and December. I also want to make the time to practice guitar more often. I had been doing it only sporadically, but am hoping to do it at least every other day.</p>\n<p>Like I said, I need more time in the day.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/48/",
      "url": "https://kpwags.com/reading-log/48/",
      "title": "Reading Log - October 30, 2023 (#48)",
      "content_html": "\n\t\t<p>Still have a lot of my RSS feeds to go through after vacation, but I did read a bit while in Aruba.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://blog.pragmaticengineer.com/bun-lessons-from-disrupting/\">Bun: lessons from disrupting a tech ecosystem</a> - <em>Gergely Orosz</em></li>\n<li><a href=\"https://blog.pragmaticengineer.com/how-microsoft-does-qa/\">How Microsoft does Quality Assurance (QA)</a> - <em>Gergely Orosz</em></li>\n<li><a href=\"https://pdx.su/blog/2023-07-26-tailwind-and-the-death-of-craftsmanship\">Tailwind, and the death of web craftsmanship</a> - <em>Jeff Sandberg</em></li>\n<li><a href=\"https://jeremybytes.blogspot.com/2023/10/dont-use-taskwhenall-for-interdependent.html\">Don't Use &quot;Task.WhenAll&quot; for Interdependent Tasks</a> - <em>Jeremy Clarke</em></li>\n<li><a href=\"https://herman.bearblog.dev/how-i-stay-motivated-as-a-solo-creator/\">How I stay motivated as a solo-creator</a> - <em>Herman Martinus</em></li>\n<li><a href=\"https://www.svix.com/blog/strong-typing-hill-to-die-on/\">Strong static typing, a hill I'm willing to die on...</a> - <em>Tom Hacohen</em></li>\n<li><a href=\"https://www.code4it.dev/blog/feature-flags-dotnet/\">Feature Flags 101: A Guide for ASP.NET Core Developers</a> - <em>Davide Bellone</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/the-convenience-of-dotnet/\">The convenience of .NET</a> - <em>Richard Lander</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/05ecdd16-8dc4-490f-b1cf-780c994346a4\">A new way of doing reflection with .NET 8</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://andrewlock.net/should-you-use-the-dotnet-8-identity-api-endpoints/\">Should you use the .NET 8 Identity API endpoints?</a> - <em>Andrew Lock</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/10/25/ny-times-tried-to-block-the-internet-archive/\">NY Times Tried To Block The Internet Archive</a> - <em>Glyn Moody</em></li>\n<li><a href=\"https://buttondown.email/blog/dear-mailchimp-users\">Dear Mailchimp Users</a> - <em>Buttondown.email</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/10/inspector-general-on-nasas-plans-to-reduce-sls-costs-highly-unrealistic/\">NASA should consider commercial alternatives to SLS, inspector general says</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/10/microsoft-finally-owns-candy-crush-as-it-closes-69b-activision-blizzard-deal/\">Microsoft completes $69B Activision Blizzard deal, its biggest merger ever</a> - <em>Kevin Purdy</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://nextbigideaclub.com/magazine/number-go-inside-cryptos-wild-rise-staggering-fall-bookbite/45644/\">Number Go Up: Inside Crypto’s Wild Rise and Staggering Fall</a> - <em>Zeke Faux</em></li>\n<li><a href=\"https://www.economist.com/business/2023/10/08/who-profits-most-from-americas-baffling-health-care-system\">Who profits most from America’s baffling health-care system?</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.marketplace.org/2023/10/10/how-can-a-film-make-almost-1-billion-at-the-box-office-but-still-lose-money/\">How can a film make almost $1 billion at the box office but still “lose” money?</a> - <em>Janet Nguyen</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/thats-more-like-the-marlins-we-all-know-and-ignore\">That’s More Like The Marlins We All Know And Ignore</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://theathletic.com/4959514/2023/10/13/mlb-playoff-system-phillies-astros-braves-dodgers/\">Stop whining about MLB’s playoff system. Phillies, Astros show how to have October success</a> - <em>Jayson Stark</em></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gadgets/2023/10/report-apple-cancels-the-problem-with-jon-stewart-over-china-ai-topics/\">The Problem with Jon Stewart cancellation highlights a problem for Apple’s content</a> - <em>Samuel Axon</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - Try</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/O-YlefL9PIM\" title=\"The Menzingers - Try\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/29/aruba/",
      "url": "https://kpwags.com/posts/2023/10/29/aruba/",
      "title": "Aruba",
      "content_html": "\n\t\t<p>My wife and I recently returned from a 12 day, 11 night stay in Aruba for our 10 year anniversary. We decided to splurge a bit since it’s such a special occasion and it was worth it.</p>\n<p>The trip down was mostly uneventful. Only blip was that our first flight from Philadelphia to Charlotte had a maintenance issue right before we took off which required us to have to taxi back to the gate. We didn’t have to disembark but our flight did take off one and a half hours late, though only arrived in Charlotte an hour late. We had a four hour layover so it wasn’t that big of a deal for us, but I felt bad for those that ended up missing their connecting flight.</p>\n<p>Landing in Aruba, I was faced with its incredibly hot temperatures. I was not expecting it to be as hot as it was for whatever reason. It also didn’t help we were by the airport and didn’t have the ocean breeze to help. We got the hotel and all checked in, but unfortunately I struggled a bit to get acclimated to the hotter temperatures. Going from weeks in the mid-50s to low-60s to all of a sudden being at 90+ degrees gave me a jolt and my body was straining to adapt. Basically sweat through the first shirt I put on and needed a lukewarm shower and a couple hours in AC to truly cool down.</p>\n<h2>First Full Day in Paradise</h2>\n<p>I spent the morning of my first full day hanging out by the pool trying to find as much shade as I could. The breeze made the temperature more tolerable, but I was still struggling to maintain a reasonable comfort level. The shade helped and was hoping my body will continue to get better with the heat. Part of me was perplexed because this is our third trip to Aruba and I don’t remember it ever being this bad for me. I ended up spending afternoon in the hotel bar reading and writing with a drink.</p>\n<p>The loss of an afternoon by the pool on our first day was kind of a bummer, but either way, I’m still on vacation and can relax. So I ended up spending the afternoon relaxing inside in the AC with a few tasty drinks. Not a bad way to spend it.</p>\n<p>We had an amazing dinner at the Hibachi restaurant. The chef even let me try tossing and cracking an egg in style. I almost succeeded, but unfortunately missed it slightly on the way down.</p>\n<p>After dinner was just some more drinks and watching the beginning of game 2 of the NLCS.</p>\n<h2>Getting into a Routine</h2>\n<p>After the first full day in Aruba, we got ourselves into a routine. Wake up at 5:30am so we can claim an ideal spot by the pool under an umbrella for shade. Come back up to the room and douse ourselves in sunscreen so we don’t burn, then return to our spots and enjoy the peacefulness before the pool area gets crowded and the music starts. The mornings are so peaceful.</p>\n<p>I don’t like having to get up at 5:30 in the morning just to reserve a pool chair, but it is <strong><em>SO</em></strong> peaceful then. The temperature is a little cooler and we can enjoy our books and the quiet. Until 8 or so, there's hardly anyone by the pool. I love it.</p>\n<p>Outside of grabbing breakfast and lunch, we generally just hung out under the umbrellas until 2-3pm. I got better acclimated to the heat which made things better. At this point, I would have to re-apply sunscreen and it didn’t seem worth it; nor did I want to risk sunburn. We would venture up to the room, shower, and then come back downstairs to the lobby bar for a drink or two before dinner. We would read or write and take it easy.</p>\n<p>We scheduled all our dinners for 6-6:30pm. They were all good. We loved the hibachi and the Asian restaurants the most. Hibachi is always a good show, and the menu for the Asian-themed restaurant was fantastic. After dinner we would venture back to the lobby bar and enjoy some live music and another drink or two.</p>\n<p>The one exception to this was when we went to have dinner on the beach for our actual anniversary. The resort we were staying at offered a private dinner of the beach as a nice little add-on. We couldn’t resist since this trip is a celebration for our ten year anniversary. The dinner was romantic, and the food was amazing, though the main course was too much food. Felt a little overly stuffed afterwards. Still, would completely recommend it and would do it again.</p>\n<p>Then bed, to do it all over again.</p>\n<p>It might feel boring for a vacation, but it’s how Lauren and I vacation, and we both love it. I managed to read 9 books while in Aruba, and got the relaxation I’d been looking for.</p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/coders-the-making-of-a-new-tribe-and-the-remaking-of-the-world-clive-thompson/12477150?ean=9780735220584\">Coders</a> by Clive Thompson</li>\n<li><a href=\"https://bookshop.org/p/books/on-writing-a-memoir-of-the-craft-stephen-king/14560198\">On Writing</a> by Stephen King</li>\n<li><a href=\"https://bookshop.org/p/books/starter-villain-john-scalzi/18753219?ean=9780765389220\">Starter Villain</a> by John Scalzi</li>\n<li><a href=\"https://bookshop.org/p/books/your-face-belongs-to-us-a-secretive-startup-s-quest-to-end-privacy-as-we-know-it-kashmir-hill/19573494?ean=9780593448564\">Your Eyes Belong to Us</a> by Kashmir Hill</li>\n<li><a href=\"https://bookshop.org/p/books/number-go-up-inside-crypto-s-wild-rise-and-staggering-fall-zeke-faux/19900961?ean=9780593443811\">Number Go Up</a> by Zeke Faux</li>\n<li><a href=\"https://bookshop.org/p/books/black-river-orchard-chuck-wendig/19598190?ean=9780593158746\">Black River Orchard</a> by Chuck Wendig</li>\n<li><a href=\"https://bookshop.org/p/books/extremely-online-the-untold-story-of-fame-influence-and-power-on-the-internet-taylor-lorenz/19718842?ean=9781982146863\">Extremely Online</a> by Taylor Lorenz</li>\n<li><a href=\"https://bookshop.org/p/books/be-useful-seven-tools-for-life-arnold-schwartzenegger/19976031\">Be Useful</a> by Arnold Schwarzenegger</li>\n<li><a href=\"https://bookshop.org/books/subprime-attention-crisis-advertising-and-the-time-bomb-at-the-heart-of-the-internet/9780374538651\">Subprime Attention Crisis</a> by Tim Hwang</li>\n</ul>\n<h2>Pictures, Because Why Not?</h2>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/uMA2fgDWIw-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/uMA2fgDWIw-1024.gif 1024w\" /><img alt=\"A picture of the resort we stayed at featuring a pool in the center, an apartment tower behind it, and the Atlantic Ocean to the side\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/uMA2fgDWIw-1024.jpeg\" width=\"1024\" height=\"768\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/9yf0sl7-fG-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/9yf0sl7-fG-1024.gif 1024w\" /><img alt=\"A picture of the sun setting over the ocean with the resort in the foreground\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/9yf0sl7-fG-1024.jpeg\" width=\"1024\" height=\"768\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/TonQTjV-T6-768.webp 768w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/TonQTjV-T6-768.gif 768w\" /><img alt=\"A picture of palm trees against a blue sky\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/TonQTjV-T6-768.jpeg\" width=\"768\" height=\"1024\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/lJwY_pEX7A-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/lJwY_pEX7A-1024.gif 1024w\" /><img alt=\"A picture of the ocean at dusk\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/lJwY_pEX7A-1024.jpeg\" width=\"1024\" height=\"768\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/jajbRD-we7-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/jajbRD-we7-1024.gif 1024w\" /><img alt=\"A gray-brown iguana sitting on a rock\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/jajbRD-we7-1024.jpeg\" width=\"1024\" height=\"768\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/Uy8RtnIf4W-768.webp 768w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/Uy8RtnIf4W-768.gif 768w\" /><img alt=\"A picture of the pool from the umbrella I was sitting under\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/Uy8RtnIf4W-768.jpeg\" width=\"768\" height=\"1024\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/zeke-faux-number-go-up/",
      "url": "https://kpwags.com/books/zeke-faux-number-go-up/",
      "title": "Book Notes for Number Go Up: Inside Crypto&#39;s Wild Rise and Staggering Fall",
      "content_html": "\n\t\t<blockquote>\n<p>From the beginning, I thought that crypto was pretty dumb. And it turned out to be even dumber than I imagined. Never before has so much wealth been generated with such flimsy schemes. But what shocked me was not the vapidity of the crypto bros. It was how their heedlessness had devastating consequences for people across the world. By the end, I’d find myself in Cambodia, investigating how crypto fueled a vast human-trafficking scheme run by Chinese gangsters.</p>\n</blockquote>\n<p>I had heard about this book on an <a href=\"https://www.marketplace.org/shows/make-me-smart/crypto-goes-to-court/\">episode of Make Me Smart</a> and added it to my list. I have been a <a href=\"https://kpwags.com/posts/2022/11/18/on-ftx-and-crypto-in-general\">skeptic of crypto</a> and this book only cemented my feeling that I made the right call skipping over the whole Crypto and NFT craze.</p>\n<blockquote>\n<p>I realized I had walked in on a presentation for a timeshare that I would pay money not to join.</p>\n</blockquote>\n<p>Zeke did a good job going over some of the many crazes, cons, and schemes so many different companies and people have done over the last decade-plus related to cryptocurrency, Initial Coin Offerings (ICOs), and NFTs.</p>\n<blockquote>\n<p>Celsius, it turned out, had $18 billion in assets. I couldn’t believe it. Somehow Celsius had accumulated as much money as a large hedge fund with a business plan that wouldn’t even work for a kid’s lemonade stand.</p>\n</blockquote>\n<p>He presented it with clear language, a good sense of humor, and humility especially after dealing with Sam Bankman-Fried and FTX.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/kashmir-hill-your-face-belongs-to-us/",
      "url": "https://kpwags.com/books/kashmir-hill-your-face-belongs-to-us/",
      "title": "Book Notes for Your Face Belongs to Us: A Secretive Startup&#39;s Quest to End Privacy as We Know It",
      "content_html": "\n\t\t<p>I’ve read several of Kashmir’s articles in the New York Times, so I knew she knows her stuff when it comes to privacy and technology. It’s the primary reason I bought the book. I had heard and read about Clearview because of her reporting.</p>\n<p>This book does a good job going into the history of facial recognition, its failures, weaknesses and potential for a very scary future where privacy as we currently know it might not exist.</p>\n<p>She does mention Illinois’ biometrics privacy laws as a good example of how to find a balance of privacy vs. accepting new technology, but it’s still kind of eerie that this kind of technology exists. And since it’s owned by a private company, it can make it harder to deal with.</p>\n<p>I’d highly recommend this book if for no other reason than to understand the scope of what we’re dealing with in terms of facial recognition. You’ll learn some history of the technology too.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/13/gary-bettman-and-the-nhl-are-cowards-part-2/",
      "url": "https://kpwags.com/posts/2023/10/13/gary-bettman-and-the-nhl-are-cowards-part-2/",
      "title": "Gary Bettman and the NHL are Cowards (Part 2)",
      "content_html": "\n\t\t<p>I wrote a post earlier this year about how <a href=\"https://kpwags.com/posts/2023/06/24/gary-bettman-and-the-nhl-are-cowards\">Gary Bettman and the NHL are Cowards</a> for getting rid of the specialty jerseys before games. Well now they're also <a href=\"https://www.npr.org/2023/10/12/1205476006/nhl-bans-pride-tape-backlash\">banning the use of pride tape</a>.</p>\n<p>Instead of standing up for the LGBT community and against bigotry, they're caving to it. I said it before, and I'll say it again.</p>\n<p style=\"font-size: 2rem; texta-align: center; font-weight: bold\">Hockey is for Everyone</p>\n<p>If anyone wants to play hockey, they should be able to regardless of their gender or sexual orientation. If they just want to cheer on their favorite team, they should be able to do that without fear of discrimination or fear of attack. They should be able to cheer with reckless abandon like the rest of us.</p>\n<p>Gary Bettman and the NHL are absolute cowards for cowing to the bigots and the assholes.</p>\n<p>I'll again add Brian Burke's quote:</p>\n<blockquote>\n<p>I repeat that I am extremely disappointed. I wish players would understand that the pride sweaters are about inclusion and welcoming everybody. A player wearing pride colors or tape isn’t endorsing a set of values or enlisting in a cause! He is saying you are welcome here. And you are. In ever single NHL building.</p>\n</blockquote>\n<p>Wearing the pride jersey isn't about them, it's about welcoming the LGBT community and letting them know they're welcome, and that hockey is for everyone. It's incredibly disappointing to see the sport I love take such a backwards step.</p>\n<p>I hope Scott Laughton and other NHL players follow through and <a href=\"https://allphly.com/scott-laughton-says-hell-still-wear-pride-tape-regardless-of-nhl-ban/\">defy NHL's ban</a>.</p>\n<p>I love the sport of hockey. I play the sport 2-3 times a week and want to see the sport grow. Sadly, all too often they seem to be very good at shooting themselves in the foot.</p>\n<p>Now if you'll excuse me, I'm gonna go buy myself some <a href=\"https://pridetape.com/\">pride tape</a> for my sticks.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/doris-kearns-goodwin-team-of-rivals/",
      "url": "https://kpwags.com/books/doris-kearns-goodwin-team-of-rivals/",
      "title": "Book Notes for Team of Rivals: The Political Genius of Abraham Lincoln",
      "content_html": "\n\t\t<p>This was a really fascinating look at Lincoln's rise to the presidency. and how he ran the Union during America's darkest hours.</p>\n<p>The book starts out by describing how both Lincoln and the three other presidential hopefuls in the 1860 Republican Primary race got to be on the ballot in 1860. Doris Kearns Goodwin does a fantastic job of describing the backgrounds of Abraham Lincoln, William Seward, Salmon Chase and Edward Bates and how each one of them got to where they were, their history in politics, and what their political viewpoints were.</p>\n<p>It was interesting to read how Lincoln wound up garnering enough support to win both the primary and then the presidency itself. While there were certain key events that ended up being strokes of luck, the book does a good job of describing Lincoln's natural ability to find political angles to get the followers and support he needed.</p>\n<p>From a historical perspective, it's interesting to read about how the former Whig party dissolved into the Republican Party in the 10 years prior to Lincoln's inauguration. I had never realized how new the Republican party was when Lincoln became the first Republican president.</p>\n<p>It was interesting to read about how Lincoln built his cabinet. He nominated his rivals to his cabinet to get multiple different perspectives on the many tough decisions he had to deal with as President. In truth, many of his cabinet members didn't get along and it was amazing to read how Lincoln was able to help keep Washington and the federal government together as the Civil War got started and then continued to be fought.</p>\n<p>The book also talks about how Lincoln was able to corral his cabinet and prepare the country for his Emancipation Proclamation, and then later get the votes together for passage of the 13th amendment ending slavery permanently.</p>\n<p>I really appreciated Doris' writing, It gave me a much better understanding of the kind of person Lincoln was and why he made such a great president aside from him keeping the country together and ending slavery.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/09/the-stress-of-the-playoffs/",
      "url": "https://kpwags.com/posts/2023/10/09/the-stress-of-the-playoffs/",
      "title": "The Stress of the Playoffs",
      "content_html": "\n\t\t<p>I'm sitting here watching Game 2 of the NLDS between my Philadelphia Phillies versus the Atlanta Braves with the Phillies up 1 game to 0 and am still so anxious.</p>\n<p>I'm obviously only a fan of the Phillies, I'm not playing, and I am nervous and anxious as all get out. I'm both happy and excited that the Phillies are making another playoff run. It's not very often I've seen them play well enough to make noise into October.</p>\n<p>Even with them playing well, my heart keeps jumping out of my chest and I'm always at the edge of my seat. I feel the same then my hockey teams are playing in the playoffs. At least with that, I'm on the ice, playing and involved. Simply watching is more than enough to keep remind me to breathe.</p>\n<p>There's something to be said about enjoying watching games when you have no skin in the game, but I want to be yelling and screaming and cheering, and I wouldn't have it any other way.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/47/",
      "url": "https://kpwags.com/reading-log/47/",
      "title": "Reading Log - October 9, 2023 (#47)",
      "content_html": "\n\t\t<p>Very podcast heavy this week. The FCC also fines Dish Network for space junk, and more.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://daverupert.com/2023/10/nine-a11y-jobs-where-robots-suck/\">Nine things automated accessibility tests can’t test</a> - <em>Dave Rupert</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/10/05/kosa-wont-make-the-internet-safer-for-kids-so-what-will/\">KOSA Won’t Make The Internet Safer For Kids. So What Will?</a> - <em>Matthew Lane</em></li>\n<li><a href=\"https://podcasts.apple.com/us/podcast/cory-doctorow-on-why-the-internet-broke-and-how-to-fix-it/id1441708044?i=1000630225019\">Cory Doctorow on Why the Internet Broke and How to Fix It</a> - <em>Cyber Podcast</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/10/dish-botches-satellite-deorbit-gets-hit-with-fccs-first-space-debris-fine/\">Dish botches satellite deorbit, gets hit with FCC’s first space-debris fine</a> - <em>Jon Brodkin</em></li>\n<li><a href=\"https://blog.mozilla.org/en/products/firefox/encrypted-hello/\">Say (an encrypted) hello to a more private internet.</a> - <em>Dennis Jackson</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.bbc.com/future/article/20231006-the-soviet-spacecraft-cemetery-in-the-pacific\">The Soviet spacecraft cemetery in the Pacific</a> - <em>Zaria Gorvett</em></li>\n<li><a href=\"https://www.grc.nasa.gov/www/k-12/airplane/guided.htm\">Beginner's Guide to Aeronautics</a> - <em>NASA</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/crypto-goes-to-court/\">Make Me Smart #1017: Crypto goes to court</a></li>\n<li><a href=\"https://podcasts.apple.com/gb/podcast/316-the-first-abolitionist/id1537788786?i=1000605966605\">The Rest is History #316: The First Abolitionist</a></li>\n<li><a href=\"https://podrocket.logrocket.com/state-of-js-frameworks\">Podrocket Podcast: The state of JS frameworks with Chris Ferdinandi</a></li>\n<li><a href=\"https://changelog.com/jsparty/268\">JS Party #268: Recreating Node.js from scratch</a></li>\n<li><a href=\"https://hanselminutes.com/885/leading-engineers-as-a-non-engineer-with-dailys-sarah-milstein\">Hanselminutes #885: Leading engineers as a non-engineer with Daily's Sarah Milstein</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1838\">.NET Rocks #1838: Blazor United with Javier Nelson and Steve Sanderson</a></li>\n<li><a href=\"https://freakonomics.com/podcast/insurance-is-sexy-discuss/\">Freakonomics Podcast #537: “Insurance Is Sexy.” Discuss.</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Haunted</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bFB4lVRETsc\" title=\"Spanish Love Songs - Haunted\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/06/its-another-red-october/",
      "url": "https://kpwags.com/posts/2023/10/06/its-another-red-october/",
      "title": "It&#39;s Another Red October",
      "content_html": "\n\t\t<p>Last year, my Phillies eked into the playoffs and then proceeded to knock out the St. Louis Cardinals, Atlanta Braves, &amp; San Diego Padres to make\nit all the way to the world series. There, they sadly lost to the Houston <s>Cheaters</s> Astros. This year, they're back in the playoffs and already\ntook out the Miami Marlins to reach the NLDS for a rematch against the Braves.</p>\n<div class=\"video-container\">\n    <video controls=\"\" autoplay=\"false\" width=\"480\" height=\"320\">\n        <source src=\"https://kpwags.com/videos/posts/2023-10-06-its-another-red-october/phillies-stott-grand-slam.mp4\" type=\"video/mp4\" />\n         Not Supported\n    </video>\n</div>\n<p>I'm psyched and excited to watch them make another World Series run!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-06T17:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/06/in-defense-of-typescript/",
      "url": "https://kpwags.com/posts/2023/10/06/in-defense-of-typescript/",
      "title": "In Defense of TypeScript",
      "content_html": "\n\t\t<p>The other day in my quest to go through my podcast queue I was listening to an episode of PodRocket, <a href=\"https://podrocket.logrocket.com/state-of-js-frameworks\">The state of JS frameworks with Chris Ferdinandi</a>. It was a good discussion on some of the downsides of frameworks like React, Vue, and the like. I would highly recommend listening to it.</p>\n<p>During the discussion, it veers into TypeScript. Chris questions some of the &quot;gung ho&quot; attitudes people have about TypeScript. And while his criticisms are completely valid and he makes some good points, I wanted to defend some of the uses of TypeScript.</p>\n<p>One of the applications I work on at my job, is an app with a .NET backend with a React/TypeScript frontend. The application is fairly large with a large range of components and models to support all the business cases and logic.</p>\n<p>While we do have a core dev team working on it, other devs have come in and have helped out from time to time. Given the large code base, I do believe TypeScript is a blessing. I think it makes the process of getting up to speed on certain areas within the app smoother and faster. When generating objects or adding components, it becomes easier to know what props and properties the components and objects need as well as their types.</p>\n<p>This does require developers to carefully craft the models so they're useful, and it does carry some extra overhead, but for large projects, I've found it invaluable.</p>\n<p>Could this be written without TypeScript? Absolutely. But in use cases of large apps, I believe TypeScript is worth it.</p>\n<p>Me arguing for TypeScript doesn't mean that Chris' arguments are wrong or that he's wrong. For smaller, simpler sites and web apps, TypeScript is most certainly overkill. You'll spend more time working with and tweaking the TypeScript config than you would just building in JavaScript.</p>\n<blockquote>\n<p>I think that's true of most of the tools that we use. State-based UI libraries provide an incredible benefit for certain types of user interfaces and add a lot of overhead and create a lot of potential break points in many, many others. But we have a tendency today to just use them for everything. So, for me, that's what it's really about, being a little bit more thoughtful about the tools that we choose to use and when and why we choose to use them.</p>\n</blockquote>\n<p>I think this is the key point to all of this. We should be give more consideration to the tools we use and make sure the languages, libraries, frameworks, and all tools are the best ones for the task at hand.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-06T15:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/04/september-2023-check-in/",
      "url": "https://kpwags.com/posts/2023/10/04/september-2023-check-in/",
      "title": "September 2023 Check-In",
      "content_html": "\n\t\t<p>The fall season has begun. The weather has <a href=\"https://kpwags.com/posts/2023/09/16/summer-is-fading\">started to chill</a> which is thankful since our AC still needs repairing or replacement.</p>\n<h2>Started Writing More</h2>\n<p>Towards the end of the month, I decided I wanted to start to write more, and made a goal of writing a bit every day. It hasn't been that long, but so far, I've been sticking with it. I'm not always writing a lot, but the thought is to get something down every day. More and or better can come as time progresses I figure.</p>\n<h2>A Dull Month</h2>\n<p>Overall, it's been a pretty dull month, which isn't a bad thing. The fall hockey season started up and I spent a lot of evenings on the couch watching TV and reading with my wife. I started &quot;attacking&quot; my podcast queue and have slowly been making a little bit of progress.</p>\n<p>I'm not mad about a quiet month, definitely has its plusses.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> 20.98 miles</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Haven’t lifted that much, was kind of a lazy month in that aspect</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/dead-wake-the-last-crossing-of-the-lusitania-erik-larson/7296476?ean=9780307408877\">Dead Wake: The Last Crossing of the Lusitania</a> by Erik Larson</li>\n<li><a href=\"https://bookshop.org/p/books/a-history-of-the-world-in-6-glasses-tom-standage/16634565?ean=9780802715524\">A History of the World in 6 Glasses</a> by Tom Standage</li>\n<li><a href=\"https://bookshop.org/p/books/packing-for-mars-the-curious-science-of-life-in-the-void-mary-roach/1517059?ean=9781324036050\">Packing for Mars</a> by Mary Roach</li>\n<li><a href=\"https://bookshop.org/p/books/talking-to-strangers-what-we-should-know-about-the-people-we-don-t-know-malcolm-gladwell/16344994?ean=9780316299220\">Talking to Strangers</a> by Malcolm Gladwell</li>\n<li><a href=\"https://bookshop.org/p/books/trigger-warning-short-fictions-and-disturbances-neil-gaiman/15543280?ean=9780063075764\">Trigger Warning</a> by Neil Gaiman</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/team-of-rivals-the-political-genius-of-abraham-lincoln/9780743270755\">Team of Rivals: The Political Genius of Abraham Lincoln</a> by Doris Kearns Goodwin</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/42\">September 4</a></li>\n<li><a href=\"https://kpwags.com/reading-log/43\">September 11</a></li>\n<li><a href=\"https://kpwags.com/reading-log/44\">September 18</a></li>\n<li><a href=\"https://kpwags.com/reading-log/45\">September 25</a></li>\n</ul>\n</li>\n<li>Wrote about\n<ul>\n<li><a href=\"https://kpwags.com/posts/2023/09/06/added-book-notes\">Adding book notes to my site</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/08/integrating-notion-into-my-site\">Integrating Notion into my site</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/16/summer-is-fading\">Summer fading</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/22/writing-everyday\">Writing every day</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/23/the-strange-inability-to-finish-a-project\">My inability to finish a side project</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/25/my-blogging-workflow\">My blogging workflow</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/27/tackling-my-podcast-queue\">Trying to tackle my podcast queue</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/28/analog-versus-digital\">Analog versus digital and my draw to analog</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/29/one-more-time-by-blink-182\">Blink-182's latest single</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/09/29/digging-into-blazor-forms\">Building simple forms in Blazor</a></li>\n</ul>\n</li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Still playing through <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt2261227/\">Altered Carbon</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt5057054/\">Jack Ryan</a></li>\n<li>Started season 4 of <a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n<li>Started a re-watch of <a href=\"https://www.imdb.com/title/tt0092455/\">Star Trek: The Next Generation</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt3526078/\">Schitt's Creek</a></li>\n<li>Started, and finished season 3 of <a href=\"https://www.imdb.com/title/tt7772588/\">For All Mankind</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt1392190/\">Mad Max: Fury Road</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0072431/\">Young Frankenstein</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0253754/\">Star Trek: Nemesis</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/03/unit-testing-and-react-hook-form/",
      "url": "https://kpwags.com/posts/2023/10/03/unit-testing-and-react-hook-form/",
      "title": "Unit Testing and React Hook Form",
      "content_html": "\n\t\t<p>One of my side projects uses <a href=\"https://react-hook-form.com/\">React Hook Form</a> for my forms and ran into some speed bumps while building tests for the individual components. I figure I can’t be the only one so I figure I’ll share my solution.</p>\n<p>The issue I was dealing with was that I was trying to use a react hook outside a react component.</p>\n<pre class=\"language-tsx\" tabindex=\"0\"><code class=\"language-tsx\"><span class=\"token function\">test</span><span class=\"token punctuation\">(</span><span class=\"token string\">'It renders the control'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> register <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">useForm</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">TextInput</span></span>\n            <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">label</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Name<span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">error</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">required</span>\n            <span class=\"token attr-name\">register</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>register<span class=\"token punctuation\">}</span></span>\n        <span class=\"token punctuation\">/></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>screen<span class=\"token punctuation\">.</span><span class=\"token function\">getByLabelText</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">Name</span><span class=\"token regex-delimiter\">/</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toBeInTheDocument</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Yeah, that didn't work too well. Wasn't something I immediately thought of when I wrote the test. Vitest immediately yelled at me for it.</p>\n<p>The big thing here is that I'm not testing a form as a whole, I'm testing an individual control I'm planning on using throughout the project. If I was testing a whole form, this wouldn't pose much of an issue as I wouldn't need to mock the hook.</p>\n<p>After some searching, I realized that I had to put it in a wrapper. I created a helper function file in my tests directory.</p>\n<pre class=\"language-tsx\" tabindex=\"0\"><code class=\"language-tsx\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> useForm<span class=\"token punctuation\">,</span> FormProvider <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-hook-form'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> render <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@testing-library/react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactNode<span class=\"token punctuation\">,</span> ReactElement <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> renderWithReactHookForm <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>ui<span class=\"token operator\">:</span> ReactElement<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> defaultValues <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">any</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Wrapper</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> children <span class=\"token punctuation\">}</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> children<span class=\"token operator\">:</span> ReactNode <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> methods <span class=\"token operator\">=</span> <span class=\"token function\">useForm</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> defaultValues <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">FormProvider</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>methods<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">FormProvider</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token operator\">...</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>ui<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> wrapper<span class=\"token operator\">:</span> Wrapper <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> renderWithReactHookForm<span class=\"token punctuation\">;</span></code></pre>\n<p>What this does is it creates a functional component wrapper for what I want to render, in this case my <code>TextInput</code> control. The <a href=\"https://react-hook-form.com/docs/formprovider\">FormProvider</a> allowed me to refactor my <code>TextInput</code> control to not have to pass the form helper as a prop.</p>\n<p>Because I'm using the <code>FormProvider</code> now in both the wrapper and the form, I can grab the form context from the nested input control by using the following line:</p>\n<pre class=\"language-ts\" tabindex=\"0\"><code class=\"language-ts\"><span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> register <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token generic-function\"><span class=\"token function\">useFormContext</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span><span class=\"token builtin\">any</span><span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>So now all I have to do is tweak the unit test slightly.</p>\n<pre class=\"language-tsx\" tabindex=\"0\"><code class=\"language-tsx\"><span class=\"token function\">test</span><span class=\"token punctuation\">(</span><span class=\"token string\">'It renders the control'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">renderWithReactHookForm</span><span class=\"token punctuation\">(</span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">TextInput</span></span>\n            <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">label</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Name<span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">error</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span>\n            <span class=\"token attr-name\">required</span>\n        <span class=\"token punctuation\">/></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>screen<span class=\"token punctuation\">.</span><span class=\"token function\">getByLabelText</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">Name</span><span class=\"token regex-delimiter\">/</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toBeInTheDocument</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I render the <code>TextInput</code> control within the functional component so the react hook works, the control renders, and I can continue my tests.</p>\n<p>I run into stuff like this when I'm working, especially with new libraries. I figured I'd share what I found through my searching and experimentation in hopes that it helps you or someone else.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/10/02/personal-sites-are-never-done/",
      "url": "https://kpwags.com/posts/2023/10/02/personal-sites-are-never-done/",
      "title": "Personal Sites are Never &quot;Done&quot;",
      "content_html": "\n\t\t<p>One of these days I'm going to stop itching to redesign my site.</p>\n<p>I'm always tinkering around with my site. I see other people's personal sites and see ideas I'm interested in potentially implementing. I'm adding or adjusting new features, tweaking the look and feel, and who knows what else.</p>\n<p>In the last week, I completely redesigned my homepage and how I lay out my blog, reading logs, &amp; book notes. This is exactly what I'm talking about, I can't just let things be and focus on the content. I have to be tweaking things. I have a whole bunch of <a href=\"https://kpwags.com/posts/2023/09/23/the-strange-inability-to-finish-a-project\">unfinished side projects</a> that I could be spending time on, instead.</p>\n<p>I was even planning a complete redesign of my site, but have tabled that...thankfully I guess.</p>\n<p>My goal to write every day has started to provide me with a steady flow of content and posts that I'll have for the site. It's also taken up some of the time I might've originally spent tinkering. Maybe I can recapture some of my time and maybe I can finally shift my focus to finishing one of the side projects that are on my list.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/46/",
      "url": "https://kpwags.com/reading-log/46/",
      "title": "Reading Log - October 2, 2023 (#46)",
      "content_html": "\n\t\t<p>This week I read about why analytics are a privacy nightmare and not worth it, NASA seeing what they got back from the asteroid, the FTC going after Amazon and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.newyorker.com/magazine/1995/05/29/the-fifty-nine-story-crisis-citicorp-center\">The Skyscraper That Could Have Toppled Over in the Wind</a></h2>\n\t<div class=\"in-depth-meta\">Joseph Morgenstern</div>\n\t<div class=\"in-depth-text\">\n<p>I remember the first time I heard about this story, it was on a - <a href=\"https://99percentinvisible.org/episode/structural-integrity/\">99% Invisible podcast episode</a>.</p>\n<p>The story was riveting, and also scary. I’d highly suggest reading this article and listening to the episode.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://redd.one/blog/one-thing-nobody-explained-to-you-about-typescript\">One Thing Nobody Explained To You About TypeScript</a> - <em>Artem Zakharchenko</em></li>\n<li><a href=\"https://meyerweb.com/eric/thoughts/2023/09/12/nuclear-anchored-sidenotes/\">Nuclear Anchored Sidenotes</a> - <em>Eric A. Meyer</em></li>\n<li><a href=\"https://jeremydmiller.com/2023/09/14/notes-on-teaching-test-driven-development/\">Notes on Teaching Test Driven Development</a> - <em>Jeremy D. Miller</em></li>\n<li><a href=\"https://github.com/readme/podcast/accessible-software-development\">Innovation Without Barriers</a> - <em>The ReadME Podcast #27</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/9/25/23888009/spotify-podcast-translation-voice-replication-open-ai\">Spotify is going to clone podcasters’ voices — and translate them to other languages</a> - <em>Amrita Khalid</em></li>\n<li><a href=\"https://pcmaffey.com/counting-ghosts\">Counting Ghosts</a> - <em>P.C. Maffey</em></li>\n<li><a href=\"https://kotaku.com/sony-playstation-hack-breach-ransomware-ransomed-vc-1850870993\">‘All Of Sony Systems’ Allegedly Hacked By New Ransomware Group</a> - <em>Levi Winslow</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/09/scientists-get-first-glimpse-of-samples-returned-from-asteroid/\">Scientists just opened the lid to NASA’s asteroid sample canister</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/09/ftc-files-the-big-one-a-lawsuit-alleging-amazon-illegally-maintains-monopoly/\">FTC files “the big one,” a lawsuit alleging Amazon illegally maintains monopoly</a> - <em>Jon Brodkin</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/julie-ertz-was-the-uswnt\">Julie Ertz Was The USWNT</a> - <em>Tom Ley</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://longform.org/player/longform-podcast-527-mary-childs\">Longform Podcast #527: Mary Childs</a></li>\n<li><a href=\"https://podrocket.logrocket.com/elk\">PodRocket: Building Elk with Daniel Roe</a></li>\n<li><a href=\"https://www.npr.org/sections/health-shots/2023/03/13/1162585010/this-veterinarian-says-pets-have-a-lot-to-teach-us-about-love-and-grief\">Fresh Air: A veterinarian says pets have a lot to teach us about love and grief</a></li>\n<li><a href=\"https://www.programmingthrowdown.com/episodes/153-chatgpt/\">Programming Throwdown #153: ChatGPT</a></li>\n<li><a href=\"https://www.npr.org/2023/03/09/1162156179/weve-doubled-life-expectancy-in-100-years-how-did-we-do-it\">TED Radio Hour #519: We've doubled life expectancy in 100 years. How did we do it?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://defector.com/not-even-the-patron-stooge-of-fawning-biographies-can-make-elon-musk-look-good\">Not Even The Patron Stooge Of Fawning Biographies Can Make Elon Musk Look Good</a> - <em>James Robins</em></li>\n<li><a href=\"https://arstechnica.com/space/2023/09/space-force-chief-foresees-role-in-protecting-commercial-satellites/\">Space Force chief says commercial satellites may need defending</a> - <em>Stephen Clark</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jerry Goldsmith - A New Ending</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0fTTL5Wv2ug\" title=\"Jerry Goldsmith - A New Ending\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-10-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/29/digging-into-blazor-forms/",
      "url": "https://kpwags.com/posts/2023/09/29/digging-into-blazor-forms/",
      "title": "Digging Into Blazor - Forms",
      "content_html": "\n\t\t<p>One of the regular things you have to do when building interactive websites and applications is to build forms to allow users to enter data. In this post, I’m going to show how to build a simple form in Blazor.</p>\n<p>This is the 4th entry in my digging into Blazor posts.</p>\n<section class=\"blog-series\">\n    <h2>Series: Digging into Blazor</h2>\n    <ul class=\"posts\">\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions\">First Impressions</a></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework\">Integrating with Entity Framework</a></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/07/31/blazor-custom-authentication\">Setting Up Custom Authentication</a></li>\n        <li class=\"post\"><span class=\"current\">Forms</span></li>\n    </ul>\n</section>\n<p>To keep things simple, I'm going to show the &quot;Add Brand&quot; form. If you've read the other posts, you will know I'm building a little web app to organize my sports cards. One of the key pieces of data I want to record is the brand. Back in the day there were all kinds of brands, <em>Topps</em>, <em>Donruss</em>, <em>Upper Deck</em>, etc. For each brand, I want to save the name, and what type of card it makes. For my purposes, the types currently are Baseball &amp; Football.</p>\n<p>Let's dig in.</p>\n<h2>Building the Model</h2>\n<p>The first thing I wanted to do was build the model.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>ComponentModel<span class=\"token punctuation\">.</span>DataAnnotations</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">CardOrganizer<span class=\"token punctuation\">.</span>ViewModels</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">AddBrandViewModel</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Required</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span>ErrorMessage <span class=\"token operator\">=</span> <span class=\"token string\">\"Name is required\"</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">StringLength</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span><span class=\"token number\">150</span><span class=\"token punctuation\">,</span> ErrorMessage <span class=\"token operator\">=</span> <span class=\"token string\">\"Must be less than 150 characters\"</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Name <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Range</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> ErrorMessage <span class=\"token operator\">=</span> <span class=\"token string\">\"Type is required\"</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">Required</span><span class=\"token attribute-arguments\"><span class=\"token punctuation\">(</span>ErrorMessage <span class=\"token operator\">=</span> <span class=\"token string\">\"Type is required\"</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">int</span></span> CardTypeId <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see, there are two properties in the model. The name, and the card type.</p>\n<h3>Data Annotations</h3>\n<p>For both properties, I have data annotations to help with validation. Both are required so I use the <code>[Required]</code> annotation.</p>\n<p>For the brand name, I have it as a <code>NVARCHAR(150)</code> in the database, so I want to limit the input to 150 characters to avoid truncation. This can be done using the <code>[StringLength]</code> annotation. We don't want the user to wonder why the value isn't what they entered.</p>\n<p>For the card type, there are only two options, &quot;Baseball&quot; and &quot;Football&quot;. For the model's purposes, they're tied to their IDs. '1' for baseball, '2' for football. To make sure that the value is valid, I use the <code>[Range]</code> annotation to indicate what the valid range for the value is. In this case, '1' or '2'.</p>\n<p><em>Note:</em> I'll be using a <code>&lt;select&gt;</code> control on the page, so the chances of it ever being out of range is slight, but better safe than to have to deal with weird data.</p>\n<h2>Building the Form</h2>\n<p>Now for the fun part! Building the actual form on the page. Let's just quickly set up the frame for the page.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token directive\"><span class=\"token keyword\">@page</span> <span class=\"token csharp language-csharp\"><span class=\"token string\">\"/brands/add\"</span></span></span>\n\n<span class=\"token directive\"><span class=\"token keyword\">@using</span> <span class=\"token csharp language-csharp\">CardOrganizer<span class=\"token punctuation\">.</span>ViewModels</span></span>\n<span class=\"token directive\"><span class=\"token keyword\">@using</span> <span class=\"token csharp language-csharp\">CardOrganizer<span class=\"token punctuation\">.</span>Domain</span></span>\n\n<span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">IBrandRepository BrandRepository</span></span>\n<span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">NavigationManager NavigationManager</span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>PageTitle</span><span class=\"token punctuation\">></span></span>Add New Brand | Card Organizer<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>PageTitle</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>main</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>block small<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>bg-white rounded-lg border-2 border-primary p-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text-3xl<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Add Brand<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>main</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>This is the basic structure of the page. I specify that the page will be located at the url <code>https://domain.com/brands/add</code>, I add my usings, and then inject both my brand repository and the navigation manager (more on both of these later). I give the page a title and then specify the start of the HTML.</p>\n<p>Let's start to add in the inner workings. Let's start by adding in the <code>AddBrandViewModel</code> and some of the other helper variables I'll be using on the page.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">AddBrandViewModel</span> _model <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\"><span class=\"token keyword\">bool</span></span> _isProcessing<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> _pageError <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>The <code>AddBrandViewModel</code> is the model we will be using to create the brand and bind it to the form. The <code>_isProcessing</code> and <code>_pageError</code> variables will be used to disable the form while it is processing, and to store/display any processing errors.</p>\n<p>The next thing we want to do is to start adding the form into the HTML.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>EditForm</span> <span class=\"token attr-name\">Model</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_model</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token special-attr\"><span class=\"token attr-name\">OnSubmit</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value javascript language-javascript\">@AddBrand</span><span class=\"token punctuation\">\"</span></span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>DataAnnotationsValidator</span><span class=\"token punctuation\">/></span></span>\n\n    <span class=\"token block\"><span class=\"token keyword\">@if</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span><span class=\"token function\">IsNullOrWhiteSpace</span><span class=\"token punctuation\">(</span>_pageError<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>alert error mt-8 mb-0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_pageError</span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></span>\n    <span class=\"token punctuation\">}</span></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>fieldset</span> <span class=\"token attr-name\">disabled</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_isProcessing</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">aria-busy</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_isProcessing</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>fieldset</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>EditForm</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n    <span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">AddBrand</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">EditContext</span> editContext<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>Blazor has a handy <a href=\"https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.forms.editform\">EditForm</a> component that we can use. We want to pass in our model and what method we want to call when the form submits.</p>\n<p>We then add the <code>&lt;DataAnnotationsValidator/&gt;</code> to allow us to handle validating the form based on the DataAttributes we added to the model.</p>\n<p>Remember above when I talked about the <code>_pageError</code> variable? This is what I mean. I have it in an if statement so that if there is an error, it gets displayed to the user.</p>\n<p>I'm using a <code>&lt;fieldset&gt;</code> to wrap the form in. This is handy because I can disable all controls in the fieldset by setting the <code>disabled</code> attribute. This is what I use the <code>_isProcessing</code> variable for. This will help prevent duplicate submissions with accidental double clicks.</p>\n<p>In the code section, I also added an empty function, <code>AddBrand(EditContext editContext)</code> to support the form.</p>\n<h2>Building the Form Controls</h2>\n<p>Next, let's add the form controls.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>fieldset</span> <span class=\"token attr-name\">disabled</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_isProcessing</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">aria-busy</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_isProcessing</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>my-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>mb-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>pb-2 font-semibold<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Name<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>InputText</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">DisplayName</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@bind-Value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_model<span class=\"token punctuation\">.</span>Name</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">maxlength</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>150<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ValidationMessage</span> <span class=\"token attr-name\">For</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\"><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> _model<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ValidationMessage</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>my-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>cardTypeId<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>mb-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>pb-2 font-semibold<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Type<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>InputSelect</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>cardTypeId<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">DisplayName</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Type<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@bind-Value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_model<span class=\"token punctuation\">.</span>CardTypeId</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>option</span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Baseball<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>option</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>option</span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Football<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>option</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>InputSelect</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ValidationMessage</span> <span class=\"token attr-name\">For</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\"><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> _model<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ValidationMessage</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>mt-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>submit<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Add Brand<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-secondary ml-2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/brands<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Cancel<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>fieldset</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>For the name field, I use the <code>&lt;InputText&gt;</code> component. This will render a standard text input (<code>&lt;input type=&quot;text&quot; /&gt;</code>) field. Using the <code>@bind-value</code> attribute I tell it to bind to <code>_model.Name</code>.</p>\n<p>For the card type field, I use the <code>&lt;InputSelect&gt;</code> control to render an HTML dropdown. I again use the <code>@bind-value</code> attribute to bind it to <code>_model.CardTypeId</code>. I then provide the two options for football and baseball.</p>\n<p>Underneath each of the controls, I provide the <code>&lt;ValidationMessage&gt;</code> component to display any validation errors for the field.</p>\n<p>The final piece is the submit button that will call the <code>AddBrand</code> function that we defined in the <code>&lt;EditForm&gt;</code> component.</p>\n<h2>Processing the Form Submission</h2>\n<p>Finally, let's add the form processing to actually save the form contents to the database.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n    <span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">AddBrand</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">EditContext</span> editContext<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n        _pageError <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>editContext<span class=\"token punctuation\">.</span><span class=\"token function\">Validate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">try</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">await</span> BrandRespository<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Brand</span>\n            <span class=\"token punctuation\">{</span>\n                Name <span class=\"token operator\">=</span> _model<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n                CardType <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>CardType<span class=\"token punctuation\">)</span>_model<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            NavigationManager<span class=\"token punctuation\">.</span><span class=\"token function\">NavigateTo</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/brands\"</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            _pageError <span class=\"token operator\">=</span> e<span class=\"token punctuation\">.</span>Message<span class=\"token punctuation\">;</span>\n            _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">StateHasChanged</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>The first thing I want to do is set the processing flag to true and reset the error state in case there was an error on the previous submission attempt.</p>\n<p>The next thing I want to do is validate the form. I can use the context to validate the model against the data attributes I provide in the model. If the values entered are invalid, the errors will be displayed under the form controls in the <code>&lt;ValidationMessage&gt;</code> component, the processing flag will be turned off, and the user can correct their mistakes.</p>\n<p>If the form is valid, the code will go about using the BrandRepository to add the brand and then navigate to the brands index page. If there are any errors, the catch statement will halt the processing and display the error to the user.</p>\n<h2>Final Result</h2>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token directive\"><span class=\"token keyword\">@page</span> <span class=\"token csharp language-csharp\"><span class=\"token string\">\"/brands/add\"</span></span></span>\n\n<span class=\"token directive\"><span class=\"token keyword\">@using</span> <span class=\"token csharp language-csharp\">CardOrganizer<span class=\"token punctuation\">.</span>ViewModels</span></span>\n<span class=\"token directive\"><span class=\"token keyword\">@using</span> <span class=\"token csharp language-csharp\">CardOrganizer<span class=\"token punctuation\">.</span>Domain</span></span>\n\n<span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">IBrandRespository BrandRespository</span></span>\n<span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">NavigationManager NavigationManager</span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>PageTitle</span><span class=\"token punctuation\">></span></span>Add New Brand | Card Organizer<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>PageTitle</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>main</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>block small<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>bg-white rounded-lg border-2 border-primary p-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text-3xl<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Add Brand<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>EditForm</span> <span class=\"token attr-name\">Model</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_model</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token special-attr\"><span class=\"token attr-name\">OnSubmit</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value javascript language-javascript\">@AddBrand</span><span class=\"token punctuation\">\"</span></span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>DataAnnotationsValidator</span><span class=\"token punctuation\">/></span></span>\n\n            <span class=\"token block\"><span class=\"token keyword\">@if</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span><span class=\"token function\">IsNullOrWhiteSpace</span><span class=\"token punctuation\">(</span>_pageError<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">{</span>\n                <span class=\"token html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>alert error mt-8 mb-0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_pageError</span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></span>\n            <span class=\"token punctuation\">}</span></span></span>\n\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>fieldset</span> <span class=\"token attr-name\">disabled</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_isProcessing</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">aria-busy</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_isProcessing</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>my-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>mb-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>pb-2 font-semibold<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Name<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>InputText</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">DisplayName</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@bind-Value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_model<span class=\"token punctuation\">.</span>Name</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">maxlength</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>150<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ValidationMessage</span> <span class=\"token attr-name\">For</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\"><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> _model<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ValidationMessage</span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>my-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>cardTypeId<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>mb-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>pb-2 font-semibold<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Type<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>InputSelect</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>cardTypeId<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">DisplayName</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Type<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@bind-Value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">_model<span class=\"token punctuation\">.</span>CardTypeId</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>option</span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Baseball<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>option</span><span class=\"token punctuation\">></span></span>\n                            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>option</span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Football<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>option</span><span class=\"token punctuation\">></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>InputSelect</span><span class=\"token punctuation\">></span></span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ValidationMessage</span> <span class=\"token attr-name\">For</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\"><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> _model<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ValidationMessage</span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>mt-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>submit<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Add Brand<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-secondary ml-2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/brands<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Cancel<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>fieldset</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>EditForm</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>main</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">AddBrandViewModel</span> _model <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\"><span class=\"token keyword\">bool</span></span> _isProcessing<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> _pageError <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">AddBrand</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">EditContext</span> editContext<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n        _pageError <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>editContext<span class=\"token punctuation\">.</span><span class=\"token function\">Validate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">try</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">await</span> BrandRespository<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Brand</span>\n            <span class=\"token punctuation\">{</span>\n                Name <span class=\"token operator\">=</span> _model<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n                CardType <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>CardType<span class=\"token punctuation\">)</span>_model<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            NavigationManager<span class=\"token punctuation\">.</span><span class=\"token function\">NavigateTo</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/brands\"</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            _pageError <span class=\"token operator\">=</span> e<span class=\"token punctuation\">.</span>Message<span class=\"token punctuation\">;</span>\n            _isProcessing <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">StateHasChanged</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<hr />\n<p>Hopefully this helps you understand the basics of forms in Blazor. You can <a href=\"https://learn.microsoft.com/en-us/aspnet/core/blazor/forms-and-input-components?view=aspnetcore-7.0\">read more about them on Microsoft's site</a> and you can view the entire code for this project (it's still a work in progress) on <a href=\"https://github.com/kpwags/card-organizer\">GitHub</a>. If you have any questions or comments, by all means reach out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-29T17:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/29/one-more-time-by-blink-182/",
      "url": "https://kpwags.com/posts/2023/09/29/one-more-time-by-blink-182/",
      "title": "One More Time by Blink-182",
      "content_html": "\n\t\t<p>A song that's been on heavy repeat is blink-182's latest single <em>One More Time</em>. I love the song for so many reasons.</p>\n<p>I loved blink-182 in high school and college. They were the first band I saw live in concert. Since then, they've broken up, gotten back together, changed members, and now are back to their most famous lineup of Mark Hoppus, Tom DeLonge, &amp; Travis Barker. So when this song came up on my YouTube homepage, I watched and listened to it and fell in love with the song for a multitude of reasons.</p>\n<p>Outside the nostalgia factor of seeing Mark, Tom &amp; Travis back together, the song itself exudes meaning. Relatively recently, Mark had a nasty bout with cancer, and farther in the past, Travis survived a plane crash. All of us, no matter who we are, are on this earth for a finite period of time. As morbid as it is, we don't know when our last day will be.</p>\n<p>The song talks about that and how easy it is to take tomorrow for granted, and the importance of making sure that those you love and care about know how important they are to you.</p>\n<p>Needless to say, I love the song and the meaning behind it.</p>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/fSKQRDq3RkM\" title=\"Blink-182 - One More Time\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-29T16:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/28/analog-versus-digital/",
      "url": "https://kpwags.com/posts/2023/09/28/analog-versus-digital/",
      "title": "Analog Versus Digital",
      "content_html": "\n\t\t<p>Over the last several months I've been trying to decide how I want to keep my notes and my journals. I've gone back and forth between using a notes app and a moleskine notebook.</p>\n<p>Physically writing is appealing. There is just something about physically writing something down. It's kind of cathartic. The downside though is that I'm not always carrying a notebook around with me. I do however always have my phone on me.</p>\n<p>I've been journaling for the last year or two, keeping track of how my days are going, what I did, and anything else that happens to cross my mind. If I was out and about and wanted to make a note something down, it is highly unlikely I have my notebook with me. I like to think I have a decent memory, but there’s just so much I’ll forget if I don’t write it down.</p>\n<p>So for the moment, I’ve been keeping most of my notes in <a href=\"https://obsidian.md/\">Obsidian</a> since I always have my phone on me. It does have a lot of handy helpers like templates and many of the same shortcuts I so often use in Visual Studio Code. There are so many niceties of having an app that syncs notes across devices. I can access my notes on my iPhone, iPad &amp; my Mac. I use iCloud to sync the notes which makes things easy.</p>\n<p>The ability to search through my notes is also incredibly useful. In a few keystrokes, I can so often find what I'm looking for. With paper, I'd have to page through and hope what I'm looking for jumps out at me.</p>\n<p>With all the positives of digital notes and the ubiquity of a smart phone, you'd wonder why anyone would even consider anything else. Despite all of it, I can't help but yearn for a notebook and a pen. I still consider switching back to handwritten journals and notes.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/27/tackling-my-podcast-queue/",
      "url": "https://kpwags.com/posts/2023/09/27/tackling-my-podcast-queue/",
      "title": "Tackling My Podcast Queue",
      "content_html": "\n\t\t<p>As I write this, my podcast queue is sitting at 1,136 episodes. Wowzers! If I listen to every episode in its entirety at normal speed would take almost 40 days. I might have a problem, and I think I need to come up with a way to help tackle this.</p>\n<p>I’ve been trying to figure out the best way to tackle things. I’ve come up with two ideas.</p>\n<h2>Chronological</h2>\n<p>This method is what I’ve generally been doing. With only a few exceptions, I add any new episodes that I add to my queue to the end so I listen to the oldest episodes first.</p>\n<h2>By Podcast</h2>\n<p>I’ve toyed with this idea in that I choose a podcast, and only listen to that podcast until all the episodes are listened to. At that point, I then choose the next podcast to listen to until I’m caught up.</p>\n<h2>Some Policies</h2>\n<p>I have a very large number of podcasts I subscribe to. Some release episodes where I want to listen to almost all of them, others where there's only a handful that might interest me. I'm thinking for tackling this queue, I'm going to set some ground rules or policies so to speak.</p>\n<ol>\n<li><strong>Don't Hesitate to Just Archive</strong> - I use <a href=\"https://pocketcasts.com/\">PocketCasts</a> for podcasts. The archive action marks it as &quot;listened to&quot; and archives it. I'm not going to hesitate to do this for any episodes where I'm like 10 minutes in and am just not &quot;feeling it&quot;, I'm just going to archive it and go to the next episode.</li>\n<li><strong>Unsubscribe When It Makes Sense</strong> - This applies for the podcasts where I'm only interested in a handful of episodes. If I keep finding the episodes not as interesting as I expected, I'll give serious considering to unsubscribing from the podcast completely.</li>\n<li><strong>Continue Listening at 2x Speed</strong> - I generally listen to podcasts at double speed. I'm planning on sticking with that speed to help keep things going.</li>\n</ol>\n<h2>Hope for the Best</h2>\n<p>I'm going to hope for the best and keep at it. Hopefully I can see the queue drop down consistently. I keep adding more episodes, but hopefully I can listen to more than I add.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/25/my-blogging-workflow/",
      "url": "https://kpwags.com/posts/2023/09/25/my-blogging-workflow/",
      "title": "My Blogging Workflow",
      "content_html": "\n\t\t<p>Since my plan to start writing more will undoubtedly cause more posts on my blog, I figured I'd write down my general workflow on how I go about writing some of my more in-depth blog posts. It might sound familiar, but thought it might help someone who might be starting out.</p>\n<h2>Generating a List of Ideas</h2>\n<p>I've been using <a href=\"https://obsidian.md/\">Obsidian</a> tied to a shared folder on iCloud for my notes and journaling. In there I have a note with a list of ideas for blog posts. Some of them are fleshed out some, others are just off-hand thoughts I've had. Whenever I think something might be worth writing about, I add it.</p>\n<h2>Creating an Outline of Sorts</h2>\n<p>Over time, as it grows more legs, I create a second note for it with various bullet points I want to include in the post. Sometimes that even means creating an outline for the post.</p>\n<h2>Time for the First Draft</h2>\n<p>Once I have an outline in place, I go and actually start writing the post. Sometimes I'll write the entire thing in one go. Other times, I'll edit as I write. But either way, I try to get the guts of what I'm trying to write out so I can easily go back out and edit it.</p>\n<p>Any images I might add get thrown into a subfolder and then added to the post. I generally at this point don't worry about compression or file size, I handle that later.</p>\n<h2>Editing Time</h2>\n<p>At this point, the post is written and I try to go back through and re-read it to see where I might have missed some words, or rambled on too much. I'm not the greatest writer, so it's worth the time.</p>\n<h2>Image Compression and Creating the Post</h2>\n<p>My site runs off <a href=\"https://nextjs.org/\">Next.js</a> and all of my blog posts are mdx files. The first thing I do is create a new branch off my main branch on my site's repository. I then create the mdx file in the blog directory. I add the front matter indicating tags, post date, title, etc. and then paste in the markdown from Obsidian. If the post has any images, I use <a href=\"https://squoosh.app/\">Squoosh</a> to resize and compress it so that people viewing don't have to deal with massive downloads. I put them in the images directory in my site's folder and add them to the mdx file. I have a handy image component that takes advantage of Next.js' image component to help optimize the image even further.</p>\n<h2>Running My Site &amp; Final Edits</h2>\n<p>My next step is to start up my site locally and view the new post. I go through and make sure that everything looks right, and then I go through and re-read it again to make sure it all makes sense. Sometimes I notice things when I see it live on the web browser that I miss in my notes editor. I make any final edits, also trying to mirror the edits in the notes editor as well, just because.</p>\n<h2>Creating the Social Image</h2>\n<p>I then use my <a href=\"https://kpwags.com/posts/2022/11/03/building-a-social-image-generator-console-app\">social image generator</a> to generate the image for the post. Helpfully, it puts the image exactly where it needs to be in the file system, so there's nothing more I need to do.</p>\n<h2>Creating a Pull Request</h2>\n<p>The next step of the process is to commit the code and push the new branch to GitHub. Once there, I open a pull request and Netlify's integration will automatically build my site and make sure that everything is up to snuff and it builds correctly. Once that is complete, I can then complete the pull request, and Netlify will deploy it.</p>\n<h2>It's Live!</h2>\n<p>Once the PR is completed on GitHub, the site will deploy. In a couple minutes I can refresh my site and viola...the post is there!</p>\n<hr />\n<p>That's basically it. It's not a complicated process, I want to keep the friction at a minimum to make it easier to post. The harder it is to get a post up, the less likely I'm going to go about doing it. It'd be kind of nice if I could more easily write a post without the whole PR process, but I find having each post be a file makes it easy to store in a git repository to backup and save. I've lost many older (much older) blog posts because they used to be stored in a database that has since been lost to time. My own fault for not backing them up, but still.</p>\n<p>There are also plenty of posts I just write on a whim and might forego some of the early steps if I'm just feeling like sending something out there.</p>\n<p>Maybe this is more than some want to deal with, but either way, just write. You'll find your own process and how to best handle your way of doing things.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/45/",
      "url": "https://kpwags.com/reading-log/45/",
      "title": "Reading Log - September 25, 2023 (#45)",
      "content_html": "\n\t\t<p>This week is a little podcast heavy since I'm trying to bring down my podcast queue. Also, NASA successfully returns from an asteroid.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.red-gate.com/simple-talk/devops/testing/why-test-driven-development-part-1/\">Why Test-Driven Development? (Part 1)</a> - <em>Alex Bunardzic</em></li>\n<li><a href=\"https://gomakethings.com/dont-prematurely-optimize-for-performance/\">Don't prematurely optimize for performance</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1853701\">:has() Enabled on Firefox Nightly</a> - <em>Mozilla Firefox</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gadgets/2023/09/hell-freezes-over-ms-paint-adds-support-for-layers-and-png-transparency/\">Hell freezes over, MS Paint adds support for layers and PNG transparency</a> - <em>Andrew Cunningham</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/09/nasa-spacecraft-returns-to-earth-with-pieces-of-an-asteroid/\">NASA spacecraft returns to Earth with pieces of an asteroid</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://www.npr.org/2023/09/24/1201386042/watch-live-nasa-sends-an-asteroid-sample-back-to-earth\">NASA asteroid sample lands safely in Utah before being whisked away by helicopter</a> - <em>Nell Greenfieldboyce</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/mlb-prospects-are-getting-promoted-faster-than-ever-why\">MLB Prospects Are Getting Promoted Faster Than Ever. Why?</a> - <em>Zach Buchanan</em></li>\n<li><a href=\"https://www.marcnormandin.com/2023/09/20/tampa-bay-rays-stadium-st-petersburg/\">The Rays are staying in St. Petersburg, for 600 million reasons</a> - <em>Marc Normandin</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1836\">.NET Rocks #1836: The Inflection Point of Large Language Models with Grant Barrett</a></li>\n<li><a href=\"https://syntax.fm/show/585/fundamentals-what-makes-a-website-slow\">Syntax.fm #585: Fundamentals × What Makes a Website Slow?</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/lost-cities-of-geo-game-over-redux/\">99% Invisible #420: The Lost Cities of Geo Redux</a></li>\n<li><a href=\"https://www.audacy.com/podcast/search-engine-c67a8/episodes/why-cant-we-just-turn-the-empty-offices-into-apartments-33d9e\">Search Engine Podcast #6: Why can’t we just turn the empty offices into apartments?</a></li>\n<li><a href=\"https://www.techdirt.com/2023/09/12/techdirt-podcast-episode-365-link-taxes-are-still-bad/\">Techdirt Podcast #365: Link Taxes Are (Still) Bad</a></li>\n<li><a href=\"https://www.techdirt.com/2023/09/19/techdirt-podcast-episode-366-liability-speech-marketplaces/\">Techdirt Podcast #366: Liability, Speech &amp; Marketplaces</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>blink-182 - One More Time</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/fSKQRDq3RkM\" title=\"blink-182 - One More Time\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/23/the-strange-inability-to-finish-a-project/",
      "url": "https://kpwags.com/posts/2023/09/23/the-strange-inability-to-finish-a-project/",
      "title": "The Strange Inability to Finish a Project",
      "content_html": "\n\t\t<p>I'm sure I'm not the only one, but I seem to be unable to finish a project. I have a handful side projects I've been puttering around with, but haven't been able to see them through to completion.</p>\n<p>Here are my current list of side projects I've worked on in some manner, shape or form:</p>\n<ul>\n<li><strong>Digital Family Cookbook</strong> - This is a React/.NET recipe management tool. It's probably about 80-90% complete. The UI could use some improvements and other tweaks.</li>\n<li><strong>Card Organizer</strong> - This is a Blazor web app to manage and organize my sports card collection. It's probably sitting around 60-70% complete.</li>\n<li><strong>Gamifit</strong> - This is a React/.NET app to track my fitness I've been working on. I've been using a bunch of different apps that all do a good job, but never do what I want, so I've started this. It's had a few different iterations and isn't that far along.</li>\n<li><strong>Leegtastic</strong> - This is also a React/.NET app to run small sports leagues. I decided to tinker with building one since the site my hockey league runs is absolutely awful. It's in the early phases.</li>\n<li><strong>Astro rebuild of my site</strong> - Never finished this one, and probably won't. I've been considering it, but for the moment I think I'll be sticking with Next.js.</li>\n<li><strong>Personal site work</strong> - I'm less inclined to include this as I'm always tinkering and there really is no &quot;final product&quot;.</li>\n</ul>\n<p>I start working on one thing, and then get the urge to switch to a different project. I start that, and then end up switching to a different one.</p>\n<p>At my 9-5, I'll finish every project or task I'm assigned...at home it's like the opposite. I mean sure, at work I have to if I want to keep my job, it's just kinda funny I can't do the same at home.</p>\n<p>I really should just bite the bullet and dedicate myself to something and just push it out the door.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/22/writing-everyday/",
      "url": "https://kpwags.com/posts/2023/09/22/writing-everyday/",
      "title": "Writing Everyday",
      "content_html": "\n\t\t<p>Recently I started reading <em>Trigger Warning</em> by Neil Gaiman. It’s a collection of short stories he’s written. At the beginning, he went through all the stories and briefly touched on each one of them. On one of them he described an interaction between a friend of his, and Ray Bradbury, author of <em>Farenheit 451</em> among others. One line stood out to me.</p>\n<blockquote>\n<p>If you want to be a writer, you have to write. Every day. Whether you feel like it or not. That you can't just write one book and stop. That it's work, but the best kind of work.</p>\n</blockquote>\n<p>I’m not a writer, doubt I’ll ever be, but I have been wanting to write <em>more</em>. I have a few ideas for short stories, I have some blogging ideas, but I never actually dedicate the time to sit down and actually <em>do</em> it.</p>\n<p>I think I’m going to try to change that and try to dedicate some time every day to writing something. Maybe a blog post, maybe a couple paragraphs in a short story, who knows, but <em>something</em>.</p>\n<p>When I have sat down to write, it’s been peaceful and it’s helped me collect my thoughts in a way. Let’s see if I can stick with it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/44/",
      "url": "https://kpwags.com/reading-log/44/",
      "title": "Reading Log - September 18, 2023 (#44)",
      "content_html": "\n\t\t<p>This week I read about how mistakes made in 1999 are still relevant today, .NET 8 RC1 being released, and the never-ending scam that is public funding for sports stadiums.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://econofact.org/stadiums-as-public-investments\">Stadiums as Public Investments</a></h2>\n\t<div class=\"in-depth-meta\">Andrew Zimbalist</div>\n\t<div class=\"in-depth-text\">\n<p>I remember reading - <a href=\"https://bookshop.org/books/field-of-schemes-how-the-great-stadium-swindle-turns-public-money-into-private-profit-revised/9780803260160\">Field of Schemes by Neil Demause &amp; Joanna Cagan</a> several years ago and the following excerpt always stood out to me.</p>\n<blockquote><p>As St. Paul Pioneer Press columnist Edward Lotterman wrote on the absurdities of TIFS: “My wife and I have often talked about a small addition that would extend the back porch the full width of the house. It would be nice if the government would give us the money to do this. The value of the house would increase and so would our taxes. The higher taxes would pay the government back eventually, so it wouldn’t cost taxpayers anything. It seems like a great idea, but for some reason the government is not willing to step up to our plate. We threatened to move to Portland or Charlotte if we don’t get help, but officials just laughed.”</p></blockquote>\n<p>Public money funding private sports stadium is a racket and any and all proposals should be immediately rejected.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.nngroup.com/articles/the-top-ten-web-design-mistakes-of-1999/\">The Top 10 Web Design Mistakes of 1999</a> - <em>Jakub Nielsen</em></li>\n<li><a href=\"https://www.devleader.ca/2023/09/13/drawbacks-to-using-interfaces-in-c-how-to-balance/\">Drawbacks To Using Interfaces In C# – How To Balance</a> - <em>Nick Cosentino</em></li>\n<li><a href=\"https://dannorth.net/2023/09/02/the-worst-programmer/\">The Worst Programmer I Know</a> - <em>Dan North</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-rc1/\">Announcing .NET 8 RC1</a> - <em>Leslie Richardson</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/9/16/23875491/apple-lightning-cable-usb-c-iphone-15\">Lightning was great, actually</a> - <em>Jay Peters</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2023/09/calif-passes-strongest-right-to-repair-bill-yet-requiring-7-years-of-parts/\">Calif. passes strongest right-to-repair bill yet, requiring 7 years of parts</a> - <em>Kevin Purdy</em></li>\n<li><a href=\"https://noyb.eu/en/how-mobile-apps-illegally-share-your-personal-data\">How Mobile Apps Illegally Share Your Personal Data</a> - <em>noyb.eu</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.stripes.com/branches/air_force/2023-09-13/eielson-alaska-air-force-oklo-microreactor-11360797.html\">Air Force plans microreactor at Alaska base pending NRC approval</a> - <em>Jonathan Snyder</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/09/game-developers-unite-against-unitys-new-per-install-pricing-structure/\">Unity’s new “per-install” pricing enrages the game development community</a> - <em>Kyle Orland</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/09/05/techdirt-podcast-episode-364-thinking-about-decentralization/\">Techdirt Podcast #364: Thinking About Decentralization</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - The Resurrectionists</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/lKX5LSozg14\" title=\"Frank Turner - The Resurrectionists\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/16/summer-is-fading/",
      "url": "https://kpwags.com/posts/2023/09/16/summer-is-fading/",
      "title": "Summer is Fading",
      "content_html": "\n\t\t<p>Summer here in the Northeast USA is winding down and I couldn't be happier.</p>\n<p>I don't know how people like summer. I mean I get it, warm weather and sun. But the weather is always too warm. Mid-to-high 80s and hotter and it's unbearable to me. I sit or stand still in the shade and all I do is sweat. It doesn't even have to be in the 90s or even above 100. It just makes me miserable.</p>\n<p>As I'm writing this, it's in the low 70s with a nice breeze. I'm sitting out on my front porch with a glass of whiskey soaking it all in. It's been a gorgeous day and I'm looking forward to more of this for the foreseeable future.</p>\n<p>To me, this is the perfect weather. Not too hot, comfortable enough to just sit outside in shorts and a tee shirt and enjoy the fresh air. As the temperature dips in the evening, can even enjoy some fires in the fire pit.</p>\n<p>Some people love summer. I say phooey...give me a nice autumn day.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/12/email-development-sucks-but-refactoring-is-oddly-satisfying/",
      "url": "https://kpwags.com/posts/2023/09/12/email-development-sucks-but-refactoring-is-oddly-satisfying/",
      "title": "Email Development Sucks, but Refactoring is Oddly Satisfying",
      "content_html": &lt;p&gt;It’s a secret to everyone! This post is for RSS subscribers only. &lt;a href=&quot;https://kpwags.com/rss-club/&quot;&gt;Read more about RSS Club&lt;/a&gt;.&lt;/p&gt;"\n\t\t<p><em>This post is for the <a href=\"https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club\">Secret RSS Club Readers</a>.</em></p>\n<p>Over the last week at work, I've been spending most of my time working on overhauling the email backend code as well as the HTML markup of the emails themselves. <a href=\"https://dodov.dev/blog/why-does-email-development-have-to-suck\">Email development kinda sucks</a> and it hasn't been the most fun of tasks. With that said, I'm actually kind of enjoying the refactoring part.</p>\n<h2>HTML Markup</h2>\n<p>The email HTML that was originally given to us to use is less than stellar and has been throwing a lot of red flags in our code analysis tools. We've been ignoring them at our own peril for a long while now, but are now starting to get serious about cleaning things up.</p>\n<p>This meant that I had the fun of starting from scratch and building a brand new email template and then testing it out on various devices and apps. Thankfully our app is internal so we don't have to test it on every single email client, but even with a limited client base, there's plenty of fun to go around. Fix a problem on desktop Outlook, web Outlook breaks. Fix that, then iOS breaks. Cycle, rinse, repeat. Not gonna lie, there's a part of me that thinks supporting IE6 would be preferable.</p>\n<p>I was finally able to get a working template and then came the fun part of refactoring how our app sends out email.</p>\n<h2>Refactoring</h2>\n<p>Over the course of the three years of development on the app I'm working with, the code for the emails have gone all over the place. Part of what I'm working on, is condensing it into one service to make things far more simpler, and to make using our the template above, all the more easier to use.</p>\n<p>This part is the fun part. I don't know what it is, but to see the lines of code shrink and to see all the different calls simplify, is quite satisfying.</p>\n<hr />\n<p>I guess that's the big takeaway from this slightly frustrating work. Certain tasks might suck, but when you can clean the code up and make things simpler and easier to work with, the satisfaction is worth it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/43/",
      "url": "https://kpwags.com/reading-log/43/",
      "title": "Reading Log - September 11, 2023 (#43)",
      "content_html": "\n\t\t<p>This week we look at privacy nightmares in new cars, updates to security in .NET, email development being awful, and more.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://erikdarling.com/why-you-should-build-debugging-into-your-sql-server-stored-procedures/\">Why You Should Build Debugging Into Your SQL Server Stored Procedures</a> - <em>Erik Darling</em></li>\n<li><a href=\"https://eisenbergeffect.medium.com/libraries-and-frameworks-and-platforms-oh-my-f77a0ec3d57d\">Libraries and Frameworks and Platforms, Oh My!</a> - <em>Rob Eisenberg</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/f65dee5e-a4eb-44b4-b338-a453acfdd5bd\">Turn on Nullability checks by default</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://nestenius.se/2023/08/29/bearertoken-the-new-authentication-handler-in-net-8/\">BearerToken: The new Authentication handler in .NET 8</a> - <em>Tore Nestenius</em></li>\n<li><a href=\"https://dodov.dev/blog/why-does-email-development-have-to-suck\">Why Does Email Development Have to Suck?</a> - <em>Hristiyan Dodov</em></li>\n<li><a href=\"https://davidgiard.com/increasing-developer-velocity\">Increasing Developer Velocity</a> - <em>David Giard</em></li>\n<li><a href=\"https://www.dotnetoffice.com/2023/08/best-practices-which-can-improve.html\">Best practices which can improve performance of your .NET core application</a> - <em>Dotnet Office</em></li>\n<li><a href=\"https://code-maze.com/csharp-mark-methods-as-depricated/\">How to Mark Methods as Deprecated in C#</a> - <em>Marko Hrnčić</em></li>\n<li><a href=\"https://jeremybytes.blogspot.com/2023/08/why-do-you-have-to-return-task-whenever.html\">Why Do You Have to Return &quot;Task&quot; Whenever You &quot;await&quot; Something in a Method in C#?</a> - <em>Jeremy Clark</em></li>\n<li><a href=\"https://seankilleen.com/2023/08/my-process-for-submitting-pull-requests/\">My Process for Submitting Pull Requests</a> - <em>Sean Killeen</em></li>\n<li><a href=\"https://chriscoyier.net/2023/09/04/enough-healthy-overlap/\">“Enough Healthy Overlap”</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/09/07/mozilla-modern-cars-are-a-privacy-shitshow/\">Mozilla: Modern Cars Are A Privacy Shitshow</a> - <em>Karl Bode</em></li>\n<li><a href=\"https://www.techdirt.com/2023/09/06/marsha-blackburn-makes-it-clear-kosa-is-designed-to-silence-trans-people/\">Marsha Blackburn Makes It Clear: KOSA Is Designed To Silence Trans People</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2023/09/05/yet-another-study-shows-no-link-at-all-between-social-media-and-teen-anxiety-and-depression/\">Yet Another Study Shows No Link At All Between Social Media And Teen Anxiety And Depression</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.theverge.com/2023/9/7/23862658/lastpass-security-breach-crypto-heists-hackers\">Experts link LastPass security breach to a string of crypto heists</a> - <em>Jess Weatherbed</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/09/nasa-finally-admits-what-everyone-already-knows-sls-is-unaffordable/\">NASA finally admits what everyone already knows: SLS is unaffordable</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://timharford.com/2023/08/the-inconvenient-truth-about-productivity/\">The inconvenient truth about productivity</a> - <em>Tim Harford</em></li>\n<li><a href=\"https://contessacapitaladvisors.com/blog/f/the-mighty-power-of-the-pen\">The Mighty Power of the Pen</a> - <em>Contessa Capital Advisors</em></li>\n<li><a href=\"https://www.antonsten.com/teams/\">The Importance of Kindness and Alignment in Building Exceptional Teams</a> - <em>Anton Sten</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>James Horner - Stealing the Enterprise</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/aEmAi8Yp-A0\" title=\"James Horner - Stealing the Enterprise\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/08/august-2023-check-in/",
      "url": "https://kpwags.com/posts/2023/09/08/august-2023-check-in/",
      "title": "August 2023 Check-In",
      "content_html": "\n\t\t<p>August was a mostly uneventful month, which seems to be par for the course for me. I'm good with that though, I like being able to take it easy...especially with this heat.</p>\n<h2>No Marathon for Me</h2>\n<p>I was looking forward to going for the marathon this year. Unfortunately my body had other plans. I can't say for a fact whether it's the heat or something else, but I was having a hard time not running out of breath. It is concerning and I'll see what happens when the heat breaks at some point...hopefully soon.</p>\n<h2>Air Conditioner Goes Kaput</h2>\n<p>Speaking of heat, we found out the central air system in our house has gone the way of the dodo bird. Not what we wanted to hear, but we were told that a replacement is needed. They could fix it, but given the cost for the part, it's not worth the money. I have no reason to doubt them, but will be getting a second look at it. With how expensive it is, I want to be sure. Plus it'll get me another list of quotes. Needless to say, with it being 90º+ out, it's been roasting in here. Ugh.</p>\n<h2>Catching Some Shows</h2>\n<p>At the beginning of the month, we saw Seth Myers up in Bethlehem, PA. It was a good show with a lot of great jokes. I've always loved his humor and would highly recommend seeing him if you ever get the chance.</p>\n<p>At the end of the month, we drove up to Stroudsburg, PA to see The Menzingers.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/aJjsfv6Qxk-1344.webp 1344w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/aJjsfv6Qxk-1344.gif 1344w\" /><img alt=\"The Menzingers live at the Sherman Theater\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/aJjsfv6Qxk-1344.jpeg\" width=\"1344\" height=\"1008\" /></picture></p>\n<p>This was the 5th time I've seen them and they've been awesome every time. It was also nice because we spent the night up there so we went up early and checked out some breweries and wineries that we otherwise wouldn't have gone to.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> 27.61 miles</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Started running a modified version of the <a href=\"https://www.muscleandstrength.com/workouts/phul-workout\">PHUL</a> routine.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://leanpub.com/learningpatterns\">Learning Patterns</a> by Lydia Hallie &amp; Addy Osmani</li>\n<li><a href=\"https://bookshop.org/p/books/out-of-office-the-big-problem-and-bigger-promise-of-working-from-home-anne-helen-petersen/16467530?ean=9780593460382\">Out of Office: The Big Problem and Bigger Promise of Working from Home</a> by Charlie Warzel &amp; Anne Helen Petersen</li>\n<li><a href=\"https://bookshop.org/p/books/shutdown-how-covid-shook-the-world-s-economy-adam-tooze/16278362?ean=9780593297551\">Shutdown: How Covid Shook the World's Economy</a> by Adam Tooze</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/dead-wake-the-last-crossing-of-the-lusitania-erik-larson/7296476?ean=9780307408877\">Dead Wake: The Last Crossing of the Lusitania</a> by Erik Larson</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/38\">August 4, 2023</a></li>\n<li><a href=\"https://kpwags.com/reading-log/39\">August 11, 2023</a></li>\n<li><a href=\"https://kpwags.com/reading-log/40\">August 18, 2023</a></li>\n<li><a href=\"https://kpwags.com/reading-log/41\">August 28, 2023</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/08/07/is-typescript-solving-a-problem-or-a-symptom\">TypeScript</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/08/09/integrating-with-notions-api-using-net\">integrating with Notion in .NET</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/08/16/figuring-out-better-sleep-habits\">sleep</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/08/21/digging-into-astro\">Astro</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Still playing through <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.imdb.com/title/tt2261227/\">Altered Carbon</a></li>\n<li>Started season 4 of <a href=\"https://www.imdb.com/title/tt5057054/\">Jack Ryan</a></li>\n<li>Finished the first 3 seasons of <a href=\"https://www.imdb.com/title/tt8879940/\">Mythic Quest</a></li>\n<li>Finished <a href=\"https://www.imdb.com/title/tt1898069/\">American Gods</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt1517268/\">Barbie</a></li>\n<li><a href=\"https://www.imdb.com/title/tt9731598/\">Bros</a></li>\n<li><a href=\"https://imdb.com/title/tt0078748/\">Alien</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0094812/\">Bull Durham</a></li>\n<li><a href=\"https://www.imdb.com/title/tt15398776/\">Oppenheimer</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-08T14:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/08/integrating-notion-into-my-site/",
      "url": "https://kpwags.com/posts/2023/09/08/integrating-notion-into-my-site/",
      "title": "Integrating Notion into my Site",
      "content_html": "\n\t\t<p>Over the course of the last few weeks I’ve been revising how several of my pages get their data. Instead of having to manually edit a JSON file that’s in my code base, I’ve been pulling from Notion’s API. The benefit of this is that it’ll be easier to update the pages. I figure I’ll show how I did it in hopes of helping others.</p>\n<p>Since it's a relatively simple page, let's work with my movies page. To sum it up, it's a page that list the movies I've watched sorted by date watched descending, grouped by year.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/zF0BmvPY9L-1000.webp 1000w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/zF0BmvPY9L-1000.gif 1000w\" /><img alt=\"A screenshot of my movies page showing a list of the most recent movies I've watched\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/zF0BmvPY9L-1000.jpeg\" width=\"1000\" height=\"524\" /></picture></p>\n<p>Each movie has seven properties that I care about for the page.</p>\n<ol>\n<li>Title</li>\n<li>Status (To Watch, Awaiting Review, &amp; Watched)</li>\n<li>Date Watched</li>\n<li>Cover URL</li>\n<li>IMDb Link</li>\n<li>Rating (Numeric 1-5)</li>\n<li>Thoughts</li>\n</ol>\n<p>Fortunately for me, Notion has an <a href=\"https://www.npmjs.com/package/@notionhq/client\">npm package</a> to make it easy.</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"token function\">npm</span> i @notionhq/client\nor\n<span class=\"token function\">yarn</span> <span class=\"token function\">add</span> @notionhq/client</code></pre>\n<p>This provides a nice library to make the calls easy. The issue I did find though was that it doesn't give me types for the various properties I can work through.</p>\n<h2>Building the Types</h2>\n<p>To make my job a little easier, I got some calls working and looked at the JSON returned from Notion's API and built some types. Now these types are not complete. They do have more properties attached to them. I just defined the minimum I needed for my purpose. If and when you make your calls, it would be useful to add the additional properties as you see fit.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionTitle</span> <span class=\"token punctuation\">{</span>\n\tid<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n\ttitle<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> plain_text<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionLink</span> <span class=\"token punctuation\">{</span>\n\tid<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n\turl<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionDate</span> <span class=\"token punctuation\">{</span>\n\tid<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n\tdate<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> start<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionNumber</span> <span class=\"token punctuation\">{</span>\n\tid<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token builtin\">number</span><span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionPlainText</span> <span class=\"token punctuation\">{</span>\n\tid<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n\trich_text<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> plain_text<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>These types are used for me defining the response that I expect back from Notion.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>\n    NotionLink<span class=\"token punctuation\">,</span>\n    NotionPlainText<span class=\"token punctuation\">,</span>\n    NotionTitle<span class=\"token punctuation\">,</span>\n    NotionNumber<span class=\"token punctuation\">,</span>\n    NotionDate<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./NotionShared'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionMovie</span> <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    properties<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        Name<span class=\"token operator\">:</span> NotionTitle<span class=\"token punctuation\">;</span>\n        CoverUrl<span class=\"token operator\">:</span> NotionLink<span class=\"token punctuation\">;</span>\n        Thoughts<span class=\"token operator\">:</span> NotionPlainText<span class=\"token punctuation\">;</span>\n        ImdbLink<span class=\"token operator\">:</span> NotionLink<span class=\"token punctuation\">;</span>\n        Rating<span class=\"token operator\">:</span> NotionNumber<span class=\"token punctuation\">;</span>\n        DateWatched<span class=\"token operator\">:</span> NotionDate<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">NotionMovieApiResponse</span> <span class=\"token punctuation\">{</span>\n    nextCursor<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n    results<span class=\"token operator\">:</span> NotionMovie<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see, I define a movie being returned by Notion to have an ID, and then a set of properties each having one of the shared types I created in the <code>NotionShared.ts</code> file.</p>\n<p>I also created the type <code>NotionMovieApiResponse</code> which defines the actual response I get back from the Notion API call. It contains two properties. The cursor (<code>nextCursor</code>) that I would need to pass in if there are more records so Notion knows where to start the return for pagination. The other property is an array of the actual movie object.</p>\n<h2>Querying the Notion API</h2>\n<p>Now for the fun part, making the call to Notion and returning the data I need for the page.</p>\n<p>I have a file called <code>notion.ts</code> that contains all my calls to Notion. In there I have an import to bring in the <code>Client</code> object from the <code>@notionhq/client</code> package.</p>\n<p>I created a function called <code>fetchMoviesFromNotion</code> that takes the cursor as an optional parameter. Remember above when I talked about the <code>nextCursor</code> property that I need to pass in to handle pagination or multiple calls? That's what this is.</p>\n<p>The return for this function is a <code>NotionMovieApiResponse</code> object.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Client <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@notionhq/client'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> fetchMoviesFromNotion <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span>cursor<span class=\"token operator\">?</span><span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span>NotionMovieApiResponse<span class=\"token operator\">></span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n\t<span class=\"token keyword\">const</span> notion <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Client</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n\t\tauth<span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">NOTION_API_KEY</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">const</span> response <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> notion<span class=\"token punctuation\">.</span>databases<span class=\"token punctuation\">.</span><span class=\"token function\">query</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n\t\tdatabase_id<span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">MOVIE_DB_ID</span><span class=\"token punctuation\">,</span>\n\t\tstart_cursor<span class=\"token operator\">:</span> cursor<span class=\"token punctuation\">,</span>\n\t\tfilter<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n\t\t\tproperty<span class=\"token operator\">:</span> <span class=\"token string\">'Status'</span><span class=\"token punctuation\">,</span>\n\t\t\tselect<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n\t\t\t\tequals<span class=\"token operator\">:</span> <span class=\"token string\">'Watched'</span><span class=\"token punctuation\">,</span>\n\t\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\tsorts<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n\t\t\t<span class=\"token punctuation\">{</span> property<span class=\"token operator\">:</span> <span class=\"token string\">'DateWatched'</span><span class=\"token punctuation\">,</span> direction<span class=\"token operator\">:</span> <span class=\"token string\">'descending'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">let</span> nextCursor<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span>has_more<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        nextCursor <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>next_cursor<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">const</span> movies <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>results <span class=\"token keyword\">as</span> <span class=\"token builtin\">unknown</span> <span class=\"token keyword\">as</span> NotionMovie<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        nextCursor<span class=\"token punctuation\">,</span>\n        results<span class=\"token operator\">:</span> movies<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Taking a look at this, you can see that the first thing I do is create the Notion client by passing in my Notion API key.</p>\n<p>The next step is for me to create the query.</p>\n<p>Now just to provide some clarity, I have a property on each movie called &quot;Status&quot; that I don't bother with on my site. I have 4 statuses for movies.</p>\n<ul>\n<li>To Watch</li>\n<li>Awaiting Review</li>\n<li>Watched</li>\n<li>Couldn't Finish</li>\n</ul>\n<p>Whenever I come upon a movie I want to watch, I add it to my Notion database with the status &quot;To Watch&quot;. If I start the movie and really just don't like it, to the point of being unable to finish it, I throw it into the &quot;Couldn't Finish&quot; status to let me know that I didn't like it. &quot;Awaiting Review&quot; is where the movie sits after I watch it and stew a bit as to what my thoughts were. &quot;Watched&quot; is when I've put in my rating and thoughts. These are the movies that I want returned to the site.</p>\n<p>To query a Notion database, I call the <code>notion.databases.query()</code> function. This takes at minimum a database ID.</p>\n<p>In my use case, I also pass in the cursor as the <code>start_cursor</code>. If it's not provided, Notion will start from the beginning.</p>\n<p>The next argument is <code>filter</code>. This can either be an array of filters, or a single filter. In my use case, it's a single filter. I tell it the property I want to filter on, in this case, the &quot;Status&quot; property. The next argument within the filter, <code>select</code>, I tell it I want all database rows where the status equals &quot;Watched&quot;.</p>\n<p>The final argument is <code>sorts</code>. Rather than sorting manually after bringing everything back, I let Notion do that for me. This is an array so you can sort by multiple properties if you choose. For me, I just want to sort it by the <code>DateWatched</code> property in a descending order so the most recent are at the start of the results.</p>\n<p>The results from Notion's call are then assigned to the <code>response</code> variable. For me to handle the function's return.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">let</span> nextCursor<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span>has_more<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\tnextCursor <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>next_cursor<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> movies <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>results <span class=\"token keyword\">as</span> <span class=\"token builtin\">unknown</span> <span class=\"token keyword\">as</span> NotionMovie<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n\tnextCursor<span class=\"token punctuation\">,</span>\n\tresults<span class=\"token operator\">:</span> movies<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The first thing I do is default the <code>nextCursor</code> to <code>null</code>. I then check to see if Notion is telling me there are more rows left in my query. If there are, I assign the cursor from the response; if not, I leave it as <code>null</code>.</p>\n<p>The next line I'm not super proud of. Basically to make TypeScript happy, I assign the results from Notion as type <code>unknown</code> and then immediately assign them the type <code>NotionMovie[]</code>. There might be better ways, but this works well enough.</p>\n<p>I then send the data back for processing.</p>\n<h2>Putting it All Together</h2>\n<p>The main function that handles bringing back the movies is called <code>getMovies()</code>. It returns a list of movies defined as:</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">Movie</span> <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    title<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    cover<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    link<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    dateWatched<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    rating<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n    thoughts<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n    yearWatched<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getMovies <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span>Movie<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token operator\">></span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> movies<span class=\"token operator\">:</span> Movie<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> nextCursor<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">do</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> response <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetchMoviesFromNotion</span><span class=\"token punctuation\">(</span>nextCursor<span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> NotionMovieApiResponse<span class=\"token punctuation\">;</span>\n\n        nextCursor <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>nextCursor<span class=\"token punctuation\">;</span>\n\n        response<span class=\"token punctuation\">.</span>results<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            movies<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token function\">mapResultToMovie</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>nextCursor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> movies<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The first thing I do in the function is declare the movie array that I will be returning to the page. Throughout the function I'll be adding records to it. I also declare the next cursor, but leave it undefined.</p>\n<p>I use a <code>do-while</code> loop to retrieve all the records from Notion. I always will be making at least one call to Notion so I want to make sure it always makes that call. Subsequent calls will be determined by whether the cursor returned is either null or if it contains a value.</p>\n<p>I have every call to Notion's API re-assign the cursor returned from Notion assigned to the <code>nextCursor</code> variable and then go through the results, parsing the results to a movie object, and then added to the array.</p>\n<p>This is the <code>mapResultToMovie()</code> function to help keep the <code>getMovies()</code> code a little cleaner:</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> mapResultToMovie <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>result<span class=\"token operator\">:</span> NotionMovie<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> Movie <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>plain_text<span class=\"token punctuation\">,</span>\n    cover<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>CoverUrl<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">,</span>\n    rating<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>Rating<span class=\"token punctuation\">.</span><span class=\"token builtin\">number</span><span class=\"token punctuation\">,</span>\n    thoughts<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>Thoughts<span class=\"token punctuation\">.</span>rich_text<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">?.</span>plain_text <span class=\"token operator\">??</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n    link<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>ImdbLink<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">,</span>\n    dateWatched<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>DateWatched<span class=\"token punctuation\">.</span>date <span class=\"token operator\">?</span> <span class=\"token function\">dayjs</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>DateWatched<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">.</span>start<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MMMM D, YYYY'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n    yearWatched<span class=\"token operator\">:</span> result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>DateWatched<span class=\"token punctuation\">.</span>date <span class=\"token operator\">?</span> <span class=\"token function\">dayjs</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>properties<span class=\"token punctuation\">.</span>DateWatched<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">.</span>start<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">year</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This function maps the values returned from Notion to the object I defined to hold the movies. If you look up at the Notion types I defined above, you can see how the various different properties' values are found. For the <code>dateWatched</code> and <code>yearWatched</code> properties, I use the handy <a href=\"https://day.js.org/\">dayjs</a> library to format the date and get the year.</p>\n<p>From there, I return the movies array to the page and display the movies grouped by year.</p>\n<hr />\n<p>You can view the source to my site on it's <a href=\"https://github.com/kpwags/kpwags.com\">GitHub Page</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-08T13:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/09/06/added-book-notes/",
      "url": "https://kpwags.com/posts/2023/09/06/added-book-notes/",
      "title": "Added Book Notes",
      "content_html": "\n\t\t<p>You might have noticed that I added a new section to my page called “Book Notes”, and RSS subscribers might have noticed the same thing. Inspired by a <a href=\"https://mastodon.social/@matthiasott/110983854141456413\">Mastodon post by Matthias Ott</a>, I decided to add something more than quick notes on the books I read.</p>\n<p>For some books, probably not all, I’m hoping to add more notes and details about what I thought of the book. These notes will show up on the book notes page and my general RSS feed. I also added a separate <a href=\"https://kpwags.com/rss/booknotes_feed.xml\">RSS feed</a> specifically for book notes. You can also go right to the book’s book notes page from my full <a href=\"https://kpwags.com/bookshelf\">bookshelf page</a> if you see the link titled “Book Notes”.</p>\n<p><a href=\"https://kpwags.com/book-notes\">View Book Notes</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/42/",
      "url": "https://kpwags.com/reading-log/42/",
      "title": "Reading Log - September 4, 2023 (#42)",
      "content_html": "\n\t\t<p>This week I finally read a great profile on Mike Masnick, the founder of TechDirt, NASA being concerned with its ability to maintain its Deep Space Network, more reasons to just build your sites, and more.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://stackoverflow.blog/2023/08/24/if-you-want-to-address-tech-debt-quantify-it-first/\">If you want to address tech debt, quantify it first</a> - <em>Ryan Donovan</em></li>\n<li><a href=\"http://ryanmorr.com/abstract-away-the-performance-faults-of-queryselectorall/\">Abstract Away the Performance Faults of querySelectorAll</a> - <em>Ryan Morr</em></li>\n<li><a href=\"https://danielcwilson.com/posts/mathematicss-round/\">The New CSS Math: round()</a> - <em>Daniel C. Wilson</em></li>\n<li><a href=\"https://daverupert.com/2023/08/why-rewrite-with-web-components/\">If I’m already using React, why should I rewrite my app with Web Components?</a> - <em>Dave Rupert</em></li>\n<li><a href=\"https://blog.stephaniestimac.com/posts/2023/09/just-build-it/\">Just Build It...</a> - <em>Stephanie Stimac</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/visual-studio-for-mac-retirement-announcement/\">Visual Studio for Mac Retirement Announcement</a> - <em>Anthony Cangialosi</em></li>\n<li><a href=\"https://www.bytehide.com/blog/data-annotations-in-csharp\">Data Annotations in C#: Your Complete Guide</a> - <em>ByteHyde</em></li>\n<li><a href=\"https://robinrendle.com/notes/why-are-websites-embarrassing/\">Why are websites embarrassing?</a> - <em>Robin Rendle</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.infinitescroll.us/p/the-internet-is-for-extremism\">The Internet is for Extremism</a> - <em>Jeremiah Johnson</em></li>\n<li><a href=\"https://www.404media.co/i-tracked-nyc-subway-rider-home-omny-mta/\">I Tracked an NYC Subway Rider's Movements with an MTA ‘Feature’</a> - <em>Joseph Cox</em></li>\n<li><a href=\"https://www.theverge.com/2023/8/30/23851902/microsoft-bing-popups-windows-11-malware\">Microsoft is using malware-like pop-ups in Windows 11 to get people to ditch Google</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2023/08/mcdonalds-ice-cream-machine-teardown-shows-error-codes-dmca-keep-it-broken/\">iFixit tears down a McDonald’s ice cream machine, demands DMCA exemption for it</a> - <em>Kevin Purdy</em></li>\n<li><a href=\"https://www.nytimes.com/2023/07/29/technology/mike-masnick-techdirt-internet-future.html\">An Internet Veteran’s Guide to Not Being Scared of Technology</a> - <em>Kashmir Hill</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://theconversation.com/space-junk-in-earth-orbit-and-on-the-moon-will-increase-with-future-missions-but-nobodys-in-charge-of-cleaning-it-up-212421\">Space junk is on the rise, and no one is in charge of cleaning it up</a> - <em>Chris Impey</em></li>\n<li><a href=\"https://arstechnica.com/space/2023/08/nasas-artemis-i-mission-nearly-broke-the-deep-space-network/\">NASA officials sound alarm over future of the Deep Space Network</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://www.ornl.gov/news/neutrons-prove-bond-villain-did-not-cause-arecibo-telescope-collapse\">Neutrons prove ‘Bond villain’ did not cause Arecibo telescope collapse</a> - <em>Oak Ridge National Laboratory</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4755552/2023/08/16/mlb-tourette-syndrome-jim-eisenreich\">A former MLB player who once struggled with Tourette syndrome finds peace helping others</a> - <em>Zack Meisel</em></li>\n<li><a href=\"https://theathletic.com/4814360/2023/08/29/professional-womens-hockey-league-teams/\">Professional Women’s Hockey League Announces Original 6 Markets, Draft Plan</a> - <em>Hailey Salvian</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://shoptalkshow.com/554/\">ShopTalk Show #554: Jamstack Thoughts with Brian Rinaldi</a></li>\n<li><a href=\"https://www.techdirt.com/2023/08/29/techdirt-podcast-episode-363-social-media-mental-health/\">Techdirt Podcast #363: Social Media &amp; Mental Health</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.economist.com/business/2023/08/31/the-best-bosses-know-how-to-subtract-work\">The best bosses know how to subtract work</a> - <em>The Economist</em></li>\n<li><a href=\"https://radleybalko.substack.com/p/devil-in-the-grooves-the-case-against\">Devil in the grooves: The case against forensic firearms analysis</a> - <em>Radley Balko</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Pendulum</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/S5JbWqXJN7E\" title=\"Spanish Love Songs - Pendulum\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/books/erik-larson-dead-wake/",
      "url": "https://kpwags.com/books/erik-larson-dead-wake/",
      "title": "Book Notes for Dead Wake: The Last Crossing of the Lusitania",
      "content_html": "\n\t\t<p>This book was an interesting read looking at one of the biggest victims of unrestricted submarine warfare. It was also the start of the events that would bring the US into World War I two years later.</p>\n<p>The book Bounces between passenger and crew stories from the <em>Lusitania</em>, the path of <em>U-20</em> and Captain Lieutenant Walther Schwieger, who would sink the <em>Lusitania</em>.</p>\n<p>While talking about Schwieger and the German U-Boat fleet, this line stood out to me:</p>\n<blockquote>\n<p>Unlike large surface craft, a U-boat came to reflect the character and personality of its commander, as though the boat were a suit of steel tailored just for him. This arose from the fact that while on distant patrol the captain received no orders from superiors and had more direct control over his own men than would, say, an admiral aboard a flagship, with a fleet of ships and thousands of men under his command. There were cruel boats and chivalrous boats, lazy boats and energetic boats. Some captains made no attempt to save the lives of merchant seamen; others went so far as to tow lifeboats toward land. One U-boat commander sent the captain of a torpedoed ship three bottles of wine to ease the long row ashore.</p>\n</blockquote>\n<p>Could you imagine being a captain of a ship just sunk by a submarine, and the sub captain pops up and offers you wine?</p>\n<p>The book also talks about how British Intelligence had broken German codes and were tracking <em>U-20</em> and were generally aware of where it was and what it was doing, but had neglected to alert the <em>Lusitania</em> or send any of their warships to help escort it to Liverpool or an alternate port.</p>\n<p>A naval historian, Patrick Beesley later even pointed this out.</p>\n<blockquote>\n<p>&quot;As an Englishman and a lover of the Royal Navy,&quot; he said, &quot;I would prefer to attribute this failure to negligence, even gross negligence, rather than to a conspiracy deliberately to endanger the ship.&quot; But, he said, &quot;on the basis of the considerable volume of information which is now available, I am reluctantly compelled to state that on balance, the most likely explanation is that there was indeed a plot, however imperfect, to endanger the <em>Lusitania</em> in order to involve the United States in the war.&quot; So much was done for the Orion and other warships, he wrote, but nothing for the <em>Lusitania</em>. He struggled with this. No matter how he arranged the evidence, he came back to conspiracy.&quot;</p>\n</blockquote>\n<p>It caps off what was an absolute tragedy costing the lives of almost 1,200 civilians. Carrying munitions bound for the frontlines on a passenger ship is questionable at best, but the lack of escort, or even actionable warnings being sent to the <em>Lusitania</em> after being specifically threatened by Germany should be criminal.</p>\n<p>Morals aside, it was a compelling read. It was interesting to hear all the different stories from some of the passengers on board.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-09-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/41/",
      "url": "https://kpwags.com/reading-log/41/",
      "title": "Reading Log - August 28, 2023 (#41)",
      "content_html": "\n\t\t<p>This week includes hacking through social engineering, coffee and sleep, a classic Star Wars game, and more.</p>\n<p>On a related note, going forward, I will be moving the reading logs to Mondays.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://addyosmani.com/blog/write-learn/\">Write about what you learn. It pushes you to understand topics better.</a> - <em>Addy Osmani</em></li>\n<li><a href=\"https://adactio.com/journal/20386\">Coding Prototypes</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://addyosmani.com/blog/project-idx/\">Introducing Project IDX: An AI-assisted, Full-Stack App Development Environment</a> - <em>Addy Osmani</em></li>\n<li><a href=\"https://viewports.fyi/\">The ideal viewport doesn’t exist</a> - <em>Leanne Renard, Liridon Hasani &amp; Andy Bell</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/08/18/social-engineering-meets-hacking-with-prompt-hacking/\">Social Engineering Meets Hacking With Prompt Hacking</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/08/us-judge-art-created-solely-by-artificial-intelligence-cannot-be-copyrighted/\">US judge: Art created solely by artificial intelligence cannot be copyrighted</a> - <em>Jon Brodkin</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/8/22/23840516/weather-disaster-new-location-climate-change\">Climate change is redrawing the disaster map</a> - <em>Justine Calma</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/08/can-coffee-or-a-nap-make-up-for-sleep-deprivation/\">Can coffee or a nap make up for sleep deprivation?</a> - <em>Kimberly Fenn</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/08/dark-forces-remaster-is-yet-another-all-timer-fps-coming-back-around/\">Dark Forces: Remaster</a> - <em>Kevin Purdy</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2023/08/22/are-american-malls-back-from-the-brink/\">Are American malls back from the brink?</a> - <em>Kristin Schwab</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4791440/2023/08/25/mlb-robot-umpires-future/\">Are Robot Umpires Ready for Their Major League Debut? Not so Fast.</a> - <em>Jayson Stark</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/08/15/techdirt-podcast-episode-362-gigi-sohn-on-community-broadband/\">Techdirt Podcast #362: Gigi Sohn On Community Broadband</a></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4791590/2023/08/23/the-sandlot-30-year-anniversary/\">‘The Sandlot,’ 30 years later: Remembering the enduring magic of a baseball classic</a> - <em>Rustin Dodd &amp; Trent Rosecrans</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/08/barnacles-could-hold-key-to-finding-wreckage-of-malaysia-airlines-mh370/\">Barnacles could hold key to finding wreckage of Malaysia Airlines MH370</a> - <em>Jennifer Ouellette</em></li>\n<li><a href=\"https://humbledollar.com/2023/08/your-answers-may-vary/\">Your Answers May Vary</a> - <em>Adam M. Grossman</em></li>\n<li><a href=\"https://www.economist.com/culture/2023/08/17/ai-could-make-it-less-necessary-to-learn-foreign-languages\">AI could make it less necessary to learn foreign languages</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.beautifulpublicdata.com/all-of-the-license-plates-in-the-united-states/\">All of the 8,291 License Plates in America</a> - <em>Jon Keegan</em></li>\n<li><a href=\"https://www.economist.com/international/2023/04/03/was-your-degree-really-worth-it\">Was your degree really worth it?</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - Hope is a Dangerous Little Thing</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/DrrxeRWebqw\" title=\"The Menzingers - Hope is a Dangerous Little Thing\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/08/21/digging-into-astro/",
      "url": "https://kpwags.com/posts/2023/08/21/digging-into-astro/",
      "title": "Digging Into Astro",
      "content_html": "\n\t\t<p>Over the last week and a half, I've been starting to play around with <a href=\"https://astro.build/\">Astro</a> again. I had built a good bit of my site in it a while back, but then decided just to re-jigger my Next.js site. Reading and listening to some podcasts has brought me back to starting over.</p>\n<p>One of the things I've been wanting to do is to improve the performance of my site. Next.js hasn't been bad in that aspect, but I've been reading about Astro and how it ships 0 bytes of JavaScript to the client by default and that's impressive.</p>\n<h2>What I Like So Far About Astro</h2>\n<ol>\n<li>It easily handles the content for my blog and reading logs. It has what it calls <a href=\"https://docs.astro.build/en/guides/content-collections/\">Content Collections</a> to handle the different pieces of content and easily allows me to define front matter with support to show me missing data pieces. I can separate out my reading logs and blog posts to have different definitions too.</li>\n<li>Modularized CSS built right into the components. Instead of having to use CSS modules or a massive stylesheet, I can just add a <code>&lt;style /&gt;</code> tag to the bottom of the component and it will load it right in, scoped to that component. It's not difficult to do this with CSS modules, but it's convenient that it's built right in by default.</li>\n<li>Knowing that I can add React components (or Vue, or Svelt) later should I need to. I’ve been sticking with Astro components so far and it’s been fine. But it’s nice to know that I can add them later should the need arise.</li>\n</ol>\n<p>I’m not certain if I’ll finish this take on things. My plan is to get an MVP up and see what Lighthouse and other performance tools say about it in comparison.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/40/",
      "url": "https://kpwags.com/reading-log/40/",
      "title": "Reading Log - August 18, 2023 (#40)",
      "content_html": "\n\t\t<p>Hey there, this week I read about the question of if a &quot;Regular Joe&quot; could get a hit in the major leagues, more .NET 8 news, NYT and ChatGPT, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://blogs.fangraphs.com/would-chris-hayes-get-a-hit-in-a-full-season-of-play/\">Would Chris Hayes Get a Hit in a Full Season of Play?</a></h2>\n\t<div class=\"in-depth-meta\">Eno Sarris</div>\n\t<div class=\"in-depth-text\">\n<blockquote><p>Hayes wondered the same. “I was recently at a batting cage and spent about half an hour, got the speed up to 70 mph, and after enough of them I was more or less getting around, though mostly fouling pitches off, with occasional solid contact,” he wrote in an email. “BUT: no breaking balls and no pitches out of the zone. I just think any major leaguer would be able to just terrify me with a first pitch fastball and then get me to chase garbage out of the zone and that would happen for literally an entire season.”</p></blockquote>\n<p>I played baseball growing up. I don’t think I’d have much success getting a hit. I think I’d be able to eventually make contact, but not much of any substance. Pitchers today are just too good.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://khalidabuhakmeh.com/dotnet-8-interceptors\">.NET 8 Interceptors</a> - <em>Khalid Abuhakmeh</em></li>\n<li><a href=\"https://fffuel.co/css-selectors/\">CSS Selectors: A Visual Guide</a> - <em>Sébastien Noël</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-7/\">Announcing .NET 8 Preview 7</a> - <em>Richard Lander</em></li>\n<li><a href=\"https://joshcollinsworth.com/blog/antiquated-react\">Things you forgot (or never knew) because of React</a> - <em>Josh Collinsworth</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/meaning-in-web-tech-stack-ordering/\">There’s Meaning in the Ordering of the Web’s Tech Stack</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/08/report-potential-nyt-lawsuit-could-force-openai-to-wipe-chatgpt-and-start-over/\">Report: Potential NYT lawsuit could force OpenAI to wipe ChatGPT and start over</a> - <em>Ashley Belanger</em></li>\n<li><a href=\"https://qz.com/ai-bots-recaptcha-turing-test-websites-authenticity-1850734350\">AI bots are so good at mimicking the human brain and vision that CAPTCHAs are useless</a> - <em>Faustine Ngila</em></li>\n<li><a href=\"https://www.theverge.com/23830432/imac-twenty-five-years-ago-saved-apple\">How the iMac saved Apple</a> - <em>Jason Snell</em></li>\n<li><a href=\"https://blog.archive.org/2023/08/14/internet-archive-responds-to-recording-industry-lawsuit-targeting-obsolete-media/\">Internet Archive Responds to Recording Industry Lawsuit Targeting Obsolete Media</a> - <em>Chris Freeland</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.eso.org/public/news/eso2313/\">New type of star gives clues to mysterious origin of magnetars</a> - <em>eso.org</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/08/lots-of-earth-mass-rogue-planets-could-be-found-by-nasas-roman-telescope/\">Rogue planets may be more numerous than stars in our galaxy</a> - <em>Elizabeth Rayne</em></li>\n<li><a href=\"https://www.quantamagazine.org/jwst-spots-giant-black-holes-all-over-the-early-universe-20230814/\">JWST Spots Giant Black Holes All Over the Early Universe</a> - <em>Charlie Wood</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.thebignewsletter.com/p/how-fanatics-is-building-a-weird\">How Fanatics Is Building a Weird Monopoly Over Sports Trading Cards</a> - <em>Matt Stoller</em></li>\n<li><a href=\"https://www.wsj.com/articles/asia-factories-consumer-goods-labor-prices-7140ab98\">The Era of Ultracheap Stuff Is Under Threat</a> - <em>Jon Emont</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.vikings.com/news/2023-kirk-cousins-quarterback-company-immaculate-grid\">How Kirk Cousins &amp; Vikings QB Company Scored 23 in 'Immaculate Grid'</a> - <em>Lindsey Young</em></li>\n</ul>\n<hr />\n<h2>Media &amp; Entertainment</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/23824684/star-trek-spock-strange-new-worlds-actors\">Star Trek is finally treating Spock like a human being</a> - <em>Susana Polo</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://timharford.com/2023/08/what-id-put-in-my-museum-of-the-economy/\">What I’d put in my museum of the economy</a> - <em>Tim Harford</em></li>\n<li><a href=\"https://www.mcsweeneys.net/articles/youre-a-cyclist-who-was-just-struck-by-a-car-driver-heres-why-it-was-your-fault\">You’re a Cyclist Who Was Just Struck by a Car Driver. Here’s Why It Was Your Fault</a> - <em>Chas Gillespie</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/08/scam-victim-cant-stop-endless-stream-of-unwanted-amazon-packages/\">Amazon won’t stop sending tortured woman unwanted boxes of shoes</a> - <em>Ashley Belanger</em></li>\n<li><a href=\"https://www.scientificamerican.com/article/ruins-of-neros-theater-discovered-near-vatican1/\">Ruins of Emperor Nero’s Theater Discovered near Vatican</a> - <em>Tom Metcalfe</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Time Will Tell</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/zd8E4xRheZA\" title=\"Dave Hause - Time Will Tell\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/08/16/figuring-out-better-sleep-habits/",
      "url": "https://kpwags.com/posts/2023/08/16/figuring-out-better-sleep-habits/",
      "title": "Figuring Out Better Sleep Habits",
      "content_html": "\n\t\t<p>Something that's been on my todo list for a while is to improve my sleeping habits.</p>\n<p>I was listening to a <a href=\"http://www.strongerbyscience.com/podcast-episode-114/\">Stronger by Science podcast episode talking about sleep habits</a> and realized that my sleep habits are not exactly great. The biggest thing I have going against me is really the fact that I play hockey with ice times that are often around 10pm or even later sometimes.</p>\n<p>There were a few things that the podcast mentioned. The biggest points that I took away from it was:</p>\n<ol>\n<li>Get yourself on a consistent sleep schedule</li>\n<li>Sleep long enough</li>\n<li>Avoid caffeine roughly 6 hours before bed (even more time is better)</li>\n<li>Avoid too much alcohol before bed</li>\n<li>Keep the room dark and no screens</li>\n</ol>\n<p>Looking at the points, I could definitely improve on just about all of them.</p>\n<p>I'm not sure I'll ever completely get on a consistent sleep schedule. On nights when I don't have hockey, I try to be in bed between 10 and 10:15pm with a 6:45am alarm. On nights where I play hockey, even if it's an early game and I get home before 11, I'm still amped up and wouldn't be able to sleep if I got into bed. I've written about <a href=\"https://kpwags.com/posts/2023/05/05/calming-down-after-hockey\">how I've been reading a bit before bed after hockey</a>.</p>\n<p>Sleeping long enough generally isn't a problem on non-hockey nights. I generally aim for a good 7-8 hours which I feel gives me a good energy level. The problem of course is when I'm playing several nights in a row and feel like I'm constantly playing catch-up with my sleep.</p>\n<p>Avoiding caffeine I've been working at on getting better. I generally don't have coffee much in the afternoon. I might occasionally have some around the 2-3pm lull, but not on an every day basis. I would however often have an energy drink prior to the late games to give me some extra energy for the games. That I've been working on cutting out entirely with decent success.</p>\n<p>Alcohol is one that I could be doing better at overall. They call my hockey league a beer league for a reason. And while I don't drink too much at any point, the consistent couple of beers after games don't help matters. I could probably do with cutting back more on non-hockey nights as well.</p>\n<p>The one thing I've actually been doing well is not laying in bed prior to going to sleep looking at my phone. I almost always put it on the charger, crawl under the covers and turn off my light. Light-wise, my bedroom is mostly dark. Only light is a little bit of light from the night light in the hallway and the glow of our alarm clock. We have 2 windows, and both have blackout shades, which is nice when I'm under the weather and need to sleep during the day. Normally though, we only keep one down so that we have the natural light to help wake us in the morning.</p>\n<p>I know proper sleep is necessary for us humans to function properly. It's key for recovery and important for our health. I'm hoping to figure out a better way to get into a better rhythm to make sure the sleep I do get is enoug, and that I don't always feel tired. I'm just trying to figure out how to best get there.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/39/",
      "url": "https://kpwags.com/reading-log/39/",
      "title": "Reading Log - August 11, 2023 (#39)",
      "content_html": "\n\t\t<p>A little heavy on podcasts this week.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://steven-giesel.com/blogPost/2f70d926-ec92-4dfe-b278-18f78078253d\">The combined power of F# and C#</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://cloudfour.com/thinks/progressively-enhanced-form-validation-part-1-html-and-css/\">Progressively Enhanced Form Validation, Part 1: HTML and CSS</a> - <em>Gerardo Rodriguez</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/8/9/23826342/cnet-content-pruning-deleting-articles-google-seo\">CNET is deleting old articles to try to improve its Google Search ranking</a> - <em>Mia Sato</em></li>\n<li><a href=\"https://www.eff.org/deeplinks/2023/08/your-computer-should-say-what-you-tell-it-say-1\">Your Computer Should Say What You Tell It To Say</a> - <em>Cory Doctorow &amp; Jacob Hoffman-Andrews</em></li>\n<li><a href=\"https://www.techdirt.com/2023/08/07/appeals-court-salesforce-cant-use-230-and-could-be-liable-for-sex-trafficking-because-backpage-was-a-customer/\">Appeals Court: Salesforce Can’t Use 230, And Could Be Liable For Sex Trafficking Because Backpage Was A Customer</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.cnbc.com/2023/08/08/wework-warns-of-remaining-going-concern-and-says-bankruptcy-possible.html\">From $40 billion to ‘going concern’ — WeWork warns of possible bankruptcy</a> - <em>Jordan Novet</em></li>\n<li><a href=\"https://www.wsj.com/articles/barnes-noble-bookstores-james-daunt-c1afc06b\">That Cool New Bookstore? It’s a Barnes &amp; Noble.</a> - <em>Ben Cohen</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.espn.com/nba/story/_/id/36146138/million-dollar-shot-michael-jordan-chicago-bulls-1993\">The $1 million shot that changed sports contests forever</a> - <em>Ryan Hockensmith</em></li>\n<li><a href=\"https://blogs.fangraphs.com/michael-lorenzen-brings-down-the-house-in-philly/\">Michael Lorenzen Brings Down the House in Philly</a> - <em>Ben Clemens</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://dotnetcore.show/episode-117-our-perspectives-on-the-future-of-net-with-mark-j-price/\">The .NET Core Podcast #117: Our Perspectives on the Future of .NET with Mark J Price</a></li>\n<li><a href=\"https://www.pushkin.fm/podcasts/cautionary-tales/the-scientist-and-the-swindler\">Cautionary Tales: The Scientist and the Swindler</a></li>\n<li><a href=\"https://unhandledexceptionpodcast.com/posts/0050-hotreload/\">The Unhandled Exception Podcast #50: Hot Reload - with David Wengier</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/roboump/\">99% Invisible #527: RoboUmp</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1834\">.NET Rocks #1834: Modern Web Front End Development with Amy Kapernick</a></li>\n<li><a href=\"https://www.ted.com/podcasts/rethinking-with-adam-grant/life-lessons-from-sports-with-jody-avirgan-transcript\">Work Life with Adam Grant: Life lessons from sports with Jody Avirgan</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=eosMB1jfa_0\">Hardcore History Addendum #24: Manifesting the Muse with Rick</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://annehelen.substack.com/p/wheres-my-rest-badge\">Where's My Rest Badge?</a> - <em>Anne Helen Petersen</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Stone Sour - Gone Sovereign / Absolute Zero</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/kNrS-GDAEAs\" title=\"Stone Sour - Gone Sovereign / Absolute Zero\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/08/09/integrating-with-notions-api-using-net/",
      "url": "https://kpwags.com/posts/2023/08/09/integrating-with-notions-api-using-net/",
      "title": "Integrating with Notion&#39;s API Using .NET",
      "content_html": "\n\t\t<p>Over the last year, I’ve been posting my weekly reading log. This is my list of articles and various things on the Internet I’ve read that I found particularly interesting or helpful. The way I’ve started to manage them is through a Notion database.</p>\n<p>To help smooth the process of converting that Notion database to a markdown file to use on my site, I built a little C# console app to pull the data and build the page. I figured I’d share my insights in hopes to help anyone else that wants to work with Notion’s API in .NET.</p>\n<p>For the last several issues, I’ve been populating a Notion database with the different links I want to share on the next reading log. Originally I was just going through the list, copying and pasting the links and info manually into the markdown file that becomes the post on my site. After the double week issue where I had 40+ links, it was starting to get tedious. But then I thought of how I’d been pulling the data on other pages in my site, like my Bookshelf, Games &amp; Movies pages. I decided that I’d try my hand at building the markdown using the API as well. I’m a .NET developer and I figured a .NET Console Application would do the job nicely.</p>\n<ul>\n<li>Title (Title)</li>\n<li>Author (Text)</li>\n<li>Url (URL)</li>\n<li>Category (Select)</li>\n<li>Published (Checkbox)</li>\n<li>Issue (Number)</li>\n</ul>\n<p>I started out by creating a new .NET console app.</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"token operator\">></span> dotnet new console <span class=\"token parameter variable\">--name</span> ReadingLogGenerator\n<span class=\"token operator\">></span> <span class=\"token builtin class-name\">cd</span> ReadingLogGenerator</code></pre>\n<p>I found a library, <a href=\"https://github.com/notion-dotnet/notion-sdk-net\">Notion SDK for .Net</a> that looked to take out a bunch of the grunt work.</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"token operator\">></span> dotnet <span class=\"token function\">add</span> package Notion.Net</code></pre>\n<p>I built my <code>appsettings.json</code> file to contain both my Notion API key and the database ID for my reading log. I also added an option for where the generated markdown file should be saved to. Basically I don’t want to have to rebuild the application if the configuration changes.</p>\n<pre class=\"language-json\" tabindex=\"0\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"Notion\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"NotionApiKey\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"SECRET API KEY\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"ReadingLogDbId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"DATABASE ID\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"Directories\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"Output\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"~/Desktop\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The next step was for me to create a model for the articles.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Article</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Title <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Author <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Url <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">ReadingLogCategory</span> Category <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> ReadingLogCategory<span class=\"token punctuation\">.</span>Everything<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>One of the things I do for my reading log is break the articles into categories. I figure it might help anyone looking at them be able to focus on the categories they like, while ignoring any they might not be interested in. I created a constants file to hold this, and any other constants that might be added later.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">enum</span> <span class=\"token class-name\">ReadingLogCategory</span>\n<span class=\"token punctuation\">{</span>\n    DevelopmentDesign <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n    Technology <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n    Science <span class=\"token operator\">=</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span>\n    Gaming <span class=\"token operator\">=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span>\n    Business <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span>\n    Sports <span class=\"token operator\">=</span> <span class=\"token number\">6</span><span class=\"token punctuation\">,</span>\n    Podcasts <span class=\"token operator\">=</span> <span class=\"token number\">7</span><span class=\"token punctuation\">,</span>\n    Everything <span class=\"token operator\">=</span> <span class=\"token number\">8</span><span class=\"token punctuation\">,</span>\n    InDepth <span class=\"token operator\">=</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>So now that I have the model, now it’s time for me to build the nuts and bolts. What I’m looking to have it do is to pull all entries for the issue I specify.</p>\n<p>.NET console applications always start in the <code>Program.cs</code> file. I’ll start by reading the <code>appsettings.json</code> file and loading that into configuration classes.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">namespace</span> <span class=\"token namespace\">ReadingLogGenerator</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">internal</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Program</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token class-name\">DirectoriesConfiguration<span class=\"token punctuation\">?</span></span> _directoriesConfiguration<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token class-name\">NotionConfiguration<span class=\"token punctuation\">?</span></span> _notifonConfiguration<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token class-name\">List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span></span> _articles <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">StringBuilder</span> MarkdownBuilder <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">IConfiguration</span> config <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ConfigurationBuilder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">AddJsonFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"appsettings.json\"</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">AddEnvironmentVariables</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">Build</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        _directoriesConfiguration <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span><span class=\"token function\">GetRequiredSection</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Directories\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">Get</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>DirectoriesConfiguration<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        _notifonConfiguration <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span><span class=\"token function\">GetRequiredSection</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Notion\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">Get</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>NotionConfiguration<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>_directoriesConfiguration <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span> <span class=\"token operator\">||</span> _notifonConfiguration <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            Console<span class=\"token punctuation\">.</span><span class=\"token function\">WriteLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to read settings\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Just for clarity, here are the configuration classes. Basically what I do is I bind the config sections to an instance of the configuration classes.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">namespace</span> <span class=\"token namespace\">ReadingLogGenerator<span class=\"token punctuation\">.</span>Configuration</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DirectoriesConfiguration</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Output <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">namespace</span> <span class=\"token namespace\">ReadingLogGenerator<span class=\"token punctuation\">.</span>Configuration</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">NotionConfiguration</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> NotionApiKey <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> ReadingLogDbId <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see, they match up with the values in the <code>appsettings.json</code> file.</p>\n<p>Now that the configuration is loaded, the next thing I want to do is prompt the user (myself) to enter the reading log number or the issue number. To do that, I just use the <code>Console.ReadLine()</code> method.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Please Enter Reading Log Number: \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> logNumberString <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">.</span><span class=\"token function\">TryParse</span><span class=\"token punctuation\">(</span>logNumberString<span class=\"token punctuation\">,</span> <span class=\"token keyword\">out</span> <span class=\"token class-name\"><span class=\"token keyword\">int</span></span> logNumber<span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> logNumber <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    Console<span class=\"token punctuation\">.</span><span class=\"token function\">WriteLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Invalid input\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Here, I’m prompting the user to enter the reading log number and then assigning the value to the <code>logNumberString</code> variable. I however want that to be in a numeric format, so I use the <code>int.TryParse()</code> method to assign it to the variable <code>logNumber</code>. If it fails, I alert the user to the error and exit.</p>\n<p>I decided that in order to keep <code>Program.cs</code> a little cleaner, I was going to put all the Notion logic in it’s own service class.</p>\n<p>I created a class called <code>NotionService</code>. This class has a constructor that takes the configuration object I created in <code>Program.cs</code> and instantiates it like this:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">namespace</span> <span class=\"token namespace\">ReadingLogGenerator<span class=\"token punctuation\">.</span>Services</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">NotionService</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">NotionConfiguration</span> _notionConfiguration<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">NotionClient</span> _notionClient<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">NotionService</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">NotionConfiguration</span> config<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        _notionConfiguration <span class=\"token operator\">=</span> config<span class=\"token punctuation\">;</span>\n        _notionClient <span class=\"token operator\">=</span> NotionClientFactory<span class=\"token punctuation\">.</span><span class=\"token function\">Create</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClientOptions</span>\n        <span class=\"token punctuation\">{</span>\n            AuthToken <span class=\"token operator\">=</span> _notionConfiguration<span class=\"token punctuation\">.</span>NotionApiKey<span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I create the class and then create the client the primary function will use to query Notion’s API. Notice that I build the client passing in the <code>AuthToken</code> from my <code>NotionConfiguration</code> object.</p>\n<p>Now the one limitation to Notion’s API is that it only returns 50 records at a time. For my reading log, that’s not normally going to be an issue, but I still want to handle it.</p>\n<p>This is going to feel like I’m jumping ahead a little bit, because I am, but API calls to notion will return three properties we’ll need to use.</p>\n<ul>\n<li><strong>Results</strong>: <code>List&lt;Page&gt;</code> - this is a list of the pages that match our query</li>\n<li><strong>HasMore</strong>: <code>bool</code> - this indicates whether there are any more results in the query. If this returns true, we’ll need to query the API again.</li>\n<li><strong>NextCursor</strong>: <code>string?</code> - this is a nullable string. If there are more records we have to query, we’ll use this to tell Notion where to start returning results from.</li>\n</ul>\n<p>Now that that is out of the way, the primary function I mentioned above is called <code>GetReadingLogArticles</code>. It takes the log number or issue number as its parameter and spits out a list of articles.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span> <span class=\"token function\">GetReadingLogArticles</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> logNumber<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> articles <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">bool</span></span> hasMore<span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">?</span></span> cursor <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> articles<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The first thing I want to add to the function is default values for both <code>hasMore</code> and <code>cursor</code>. What this does is setup my loop to continuously fetch records from Notion until Notion tells me there are no more records to fetch.</p>\n<p>To keep things cleaner, I created a function specifically to query Notion’s API.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>PaginatedList<span class=\"token punctuation\">&lt;</span>Page<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span> <span class=\"token function\">FetchFromNotion</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> logNumber<span class=\"token punctuation\">,</span> <span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">?</span></span> cursor<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> readingLogFilter <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">NumberFilter</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Issue\"</span><span class=\"token punctuation\">,</span> <span class=\"token named-parameter punctuation\">equal</span><span class=\"token punctuation\">:</span> logNumber<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> queryParams <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">DatabasesQueryParameters</span>\n    <span class=\"token punctuation\">{</span>\n        Filter <span class=\"token operator\">=</span> readingLogFilter<span class=\"token punctuation\">,</span>\n        StartCursor <span class=\"token operator\">=</span> cursor\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> pages <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _notionClient<span class=\"token punctuation\">.</span>Databases<span class=\"token punctuation\">.</span><span class=\"token function\">QueryAsync</span><span class=\"token punctuation\">(</span>_notionConfiguration<span class=\"token punctuation\">.</span>ReadingLogDbId<span class=\"token punctuation\">,</span> queryParams<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> pages<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This method takes two parameters, the first is the log or issue number, the second is the cursor as defined above in the <code>GetReadingLogArticles()</code> method. By default, the cursor is <code>null</code> so the Notion API will start from the beginning.</p>\n<p>I then used the library to build a filter, the query params, and use them to then request the data from Notion.</p>\n<p>For building the filter, what I’m doing is creating a filter that compares numbers. I’m telling it that I want it to look at the Issue field, and filter it to only return rows where Issue is equal to the log number.</p>\n<p>I then take that filter and build a <code>DatabaseQueryParameters</code> object with the filter I just built. This is where I assign the cursor.</p>\n<p>The final step is to actually query the Notion API. The database query takes 2 arguments. The first is the Database ID (that I have stored in the configuration object), and the second argument are the query parameters I built above. This tells Notion that I want all the records from the database that match the filter, in my case all rows with an issue number matching the log number.</p>\n<p>I then return it to the <code>GetReadingLogArticles()</code> method.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span> <span class=\"token function\">GetReadingLogArticles</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> logNumber<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> articles <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">bool</span></span> hasMore<span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">?</span></span> cursor <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">do</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">FetchFromNotion</span><span class=\"token punctuation\">(</span>logNumber<span class=\"token punctuation\">,</span> cursor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token comment\">// add the results to the list of articles to return</span>\n        articles<span class=\"token punctuation\">.</span><span class=\"token function\">AddRange</span><span class=\"token punctuation\">(</span><span class=\"token function\">MapNotionResultsToArticles</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>Results<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        hasMore <span class=\"token operator\">=</span> result<span class=\"token punctuation\">.</span>HasMore<span class=\"token punctuation\">;</span>\n        cursor <span class=\"token operator\">=</span> result<span class=\"token punctuation\">.</span>NextCursor<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>hasMore<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> articles<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>As you can see, I’m using a <code>do-while</code> loop to handle this. I always want it to query Notion at least once. And after it adds the retrieved articles to the output list, it will assign the <code>HasMore</code> and <code>NextCursor</code> return values to the values I defaulted above the loop. Chances are there won’t be any more results, but if there are, it will make another call to Notion, add the records, and re-assign the variables until <code>HasMore</code> comes back as <code>false</code>.</p>\n<p>The final part you see there is the <code>MapNotionResultsToArticles()</code> method I built.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">private</span> <span class=\"token return-type class-name\">List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span></span> <span class=\"token function\">MapNotionResultsToArticles</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">List<span class=\"token punctuation\">&lt;</span>Page<span class=\"token punctuation\">></span></span> results<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> articles <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">List<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> page <span class=\"token keyword\">in</span> results<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> title <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span>Properties<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Key<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"title\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> author <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span>Properties<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Key<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"author\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> url <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span>Properties<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Key<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"url\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> category <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span>Properties<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Key<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"category\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> titleValue <span class=\"token operator\">=</span> title<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">TitlePropertyValue</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> authorValue <span class=\"token operator\">=</span> author<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">RichTextPropertyValue</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> urlValue <span class=\"token operator\">=</span> url<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">UrlPropertyValue</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> categoryValue <span class=\"token operator\">=</span> category<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">SelectPropertyValue</span><span class=\"token punctuation\">;</span>\n\n        articles<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Article</span>\n        <span class=\"token punctuation\">{</span>\n            Title <span class=\"token operator\">=</span> titleValue<span class=\"token punctuation\">?.</span>Title<span class=\"token punctuation\">?.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">?.</span>PlainText <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n            Author <span class=\"token operator\">=</span> authorValue<span class=\"token punctuation\">?.</span>RichText<span class=\"token punctuation\">?.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">?.</span>PlainText <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n            Url <span class=\"token operator\">=</span> urlValue<span class=\"token punctuation\">?.</span>Url <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n            Category <span class=\"token operator\">=</span> <span class=\"token function\">GetCategoryFromNotionCategory</span><span class=\"token punctuation\">(</span>categoryValue<span class=\"token punctuation\">?.</span>Select<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> articles<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">private</span> <span class=\"token return-type class-name\">ReadingLogCategory</span> <span class=\"token function\">GetCategoryFromNotionCategory</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span></span> category<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> category <span class=\"token keyword\">switch</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token string\">\"software development &amp; design\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>DevelopmentDesign<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"technology &amp; the internet\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Technology<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"science\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Science<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"gaming\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Gaming<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"business &amp; finance\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Business<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"sports\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Sports<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"podcasts\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Podcasts<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"in depth\"</span> <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>InDepth<span class=\"token punctuation\">,</span>\n    _ <span class=\"token operator\">=></span> ReadingLogCategory<span class=\"token punctuation\">.</span>Everything<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>There’s a fair amount to unpack here so let’s go. The method takes a single argument of a list of pages returned from Notion and I want it to go through those results and map each result to an instance of my class <code>Article</code>.</p>\n<p>The first thing I have it do is for each page in the results, I grab the four properties I want (Title, Author, URL, &amp; Category) by using LINQ to query the properties by their key.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> title <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span>Properties<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">=></span> p<span class=\"token punctuation\">.</span>Key<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"title\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>What this does is it goes through the page’s properties and grabs the first one where the key matches the property I’m looking for, in this case, “Title”. To prevent any cast confusion, I convert the key to lower case for comparison.</p>\n<p>The next part is a little long in the teeth so to speak. The different properties have different types so each one has a specific format. Thankfully the <code>Notion.Net</code> library has classes for each one.</p>\n<p>Basically what I want to do is create objects for each one and cast each one to their appropriate class.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> titleValue <span class=\"token operator\">=</span> title<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">TitlePropertyValue</span><span class=\"token punctuation\">;</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> authorValue <span class=\"token operator\">=</span> author<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">RichTextPropertyValue</span><span class=\"token punctuation\">;</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> urlValue <span class=\"token operator\">=</span> url<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">UrlPropertyValue</span><span class=\"token punctuation\">;</span>\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> categoryValue <span class=\"token operator\">=</span> category<span class=\"token punctuation\">.</span>Value <span class=\"token keyword\">as</span> <span class=\"token class-name\">SelectPropertyValue</span><span class=\"token punctuation\">;</span></code></pre>\n<p>From there, I can build the Article object with the values from the objects. I do put some null-condition operators in place to protect against the unlikely chance that I forget a value in a row.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">articles<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Article</span>\n<span class=\"token punctuation\">{</span>\n    Title <span class=\"token operator\">=</span> titleValue<span class=\"token punctuation\">?.</span>Title<span class=\"token punctuation\">?.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">?.</span>PlainText <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n    Author <span class=\"token operator\">=</span> authorValue<span class=\"token punctuation\">?.</span>RichText<span class=\"token punctuation\">?.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">?.</span>PlainText <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n    Url <span class=\"token operator\">=</span> urlValue<span class=\"token punctuation\">?.</span>Url <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n    Category <span class=\"token operator\">=</span> <span class=\"token function\">GetCategoryFromNotionCategory</span><span class=\"token punctuation\">(</span>categoryValue<span class=\"token punctuation\">?.</span>Select<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">.</span><span class=\"token function\">ToLower</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>That function call <code>GetCategoryFromNotionCategory()</code> is my way of converting the string I get from Notion, and assigning the appropriate enum value.</p>\n<p>This code builds the <code>Article</code> object and then adds it to the list to be returned at the end of the function.</p>\n<p>This list of articles is then sent back to the <code>GetReadingLogArticles()</code> method to be added to the master list to return back to <code>Program.cs</code>. If there are more results, we’ll query Notion again, if not we’ll continue on.</p>\n<p>Let’s go back to <code>Program.cs</code> and finish up.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> notionService <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">NotionService</span><span class=\"token punctuation\">(</span>_notifonConfiguration<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n_articles <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> notionService<span class=\"token punctuation\">.</span><span class=\"token function\">GetReadingLogArticles</span><span class=\"token punctuation\">(</span>logNumber<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> markdown <span class=\"token operator\">=</span> <span class=\"token function\">GetMarkdownString</span><span class=\"token punctuation\">(</span>logNumber<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>We now have the full list of articles that are part of this reading log. Our queries to Notion’s API are over and done with. Now we need to output the results.</p>\n<p>I’m not going to lie, this last part is a little clunky and there might be better ways to do it, but this currently works well enough for me. I created a method called <code>GetMarkdownString()</code> which takes the log or issue number and builds the markdown string that I’ll need for my site.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> <span class=\"token function\">GetMarkdownString</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> logNumber<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"---\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"title: 'Reading Log - </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"MMMM d, yyyy\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\"> (#</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">logNumber</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">)'\"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"date: '</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yyyy-MM-dd\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">'\"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"tags: ['Reading Log']\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"commentIssueNumber: GITHUB_COMMENTS_ISSUE_NUM\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"---\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Introduction Text\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>_articles<span class=\"token punctuation\">.</span><span class=\"token function\">Any</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">=></span> a<span class=\"token punctuation\">.</span>Category <span class=\"token operator\">==</span> ReadingLogCategory<span class=\"token punctuation\">.</span>InDepth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"## In Depth\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">AddLinks</span><span class=\"token punctuation\">(</span>_articles<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">=></span> a<span class=\"token punctuation\">.</span>Category <span class=\"token operator\">==</span> ReadingLogCategory<span class=\"token punctuation\">.</span>InDepth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"## Link Blast\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>DevelopmentDesign<span class=\"token punctuation\">,</span> <span class=\"token string\">\"👨🏼‍💻Software Development &amp; Design\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>Technology<span class=\"token punctuation\">,</span> <span class=\"token string\">\"🖥 Technology &amp; the Internet\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>Science<span class=\"token punctuation\">,</span> <span class=\"token string\">\"🔬 Science\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>Gaming<span class=\"token punctuation\">,</span> <span class=\"token string\">\"🎮 Gaming\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>Business<span class=\"token punctuation\">,</span> <span class=\"token string\">\"📈 Business &amp; Finance\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>Sports<span class=\"token punctuation\">,</span> <span class=\"token string\">\"⚾️ Sports\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>_articles<span class=\"token punctuation\">.</span><span class=\"token function\">Any</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">=></span> a<span class=\"token punctuation\">.</span>Category <span class=\"token operator\">==</span> ReadingLogCategory<span class=\"token punctuation\">.</span>Podcasts<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"### 🎧 Podcasts\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> article <span class=\"token keyword\">in</span> _articles<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">=></span> a<span class=\"token punctuation\">.</span>Category <span class=\"token operator\">==</span> ReadingLogCategory<span class=\"token punctuation\">.</span>Podcasts<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"[</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">article<span class=\"token punctuation\">.</span>Author</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">article<span class=\"token punctuation\">.</span>Title</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">](</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">article<span class=\"token punctuation\">.</span>Url</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">)\"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"---\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span>ReadingLogCategory<span class=\"token punctuation\">.</span>Everything<span class=\"token punctuation\">,</span> <span class=\"token string\">\"🎒 Everything Else\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"🎵 A Song to Leave You With\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#### Artist - Song\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">AddSection</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">ReadingLogCategory</span> category<span class=\"token punctuation\">,</span> <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> title<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>_articles<span class=\"token punctuation\">.</span><span class=\"token function\">Any</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">=></span> a<span class=\"token punctuation\">.</span>Category <span class=\"token operator\">==</span> category<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"### </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">title</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">\"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">AddLinks</span><span class=\"token punctuation\">(</span>_articles<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">=></span> a<span class=\"token punctuation\">.</span>Category <span class=\"token operator\">==</span> category<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"---\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">AddLinks</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Article<span class=\"token punctuation\">></span></span> articles<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> article <span class=\"token keyword\">in</span> articles<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"[</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">article<span class=\"token punctuation\">.</span>Title</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">](</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">article<span class=\"token punctuation\">.</span>Url</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">) - *</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">article<span class=\"token punctuation\">.</span>Author</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">*\"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        MarkdownBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">AppendLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>To start, this builds out the front matter my site uses to lay out the header, and other information. I’ve built this with the assumption I’m going to run it on the date I’m posting so the current date will fit in for the front matter.</p>\n<p>I then go through all the categories and add the links for each category. The “In Depth” and “Podcasts” are formatted slightly differently so I don’t send them through the normal methods, but for each article I output the markdown in its appropriate format.</p>\n<p>At this point, the markdown is built, all that’s left is to output it to the <code>mdx</code> file I use for my site.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> markdown <span class=\"token operator\">=</span> <span class=\"token function\">GetMarkdownString</span><span class=\"token punctuation\">(</span>logNumber<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> path <span class=\"token operator\">=</span> Path<span class=\"token punctuation\">.</span><span class=\"token function\">Join</span><span class=\"token punctuation\">(</span>_directoriesConfiguration<span class=\"token punctuation\">.</span>Output<span class=\"token punctuation\">,</span> <span class=\"token interpolation-string\"><span class=\"token string\">$\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">logNumber</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">.mdx\"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">await</span> <span class=\"token keyword\">using</span> <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> sw <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">StreamWriter</span><span class=\"token punctuation\">(</span>path<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">await</span> sw<span class=\"token punctuation\">.</span><span class=\"token function\">WriteAsync</span><span class=\"token punctuation\">(</span>markdown<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This is the final step, I open up a <code>StreamWriter</code> and write the markdown stream to the file in the directory specified in the <code>appsettings.json</code> file. At this point in my process, all I have to do is add the song of the week, and generate the issue number for the post’s comments. I could probably automate that at some point too, but for the moment, it’s easy enough to enter that part. The hard part of generating all the links is already done.</p>\n<p>I hope this helps someone figure out how to tie one of their .NET apps into Notion’s API.</p>\n<hr />\n<p>I’ll end with this little anecdote. When I started writing this post, I had not taken into account the idea that I could have more than 50 articles in any given reading log. But then I remembered that one of my double issues had an article count in the 40s. Because of this, I put a pause on the writing of this post to go and fix the app to support the do-while loop to ensure that if the article ever crosses the 50 article return, I’d make an additional call to get the rest of them. I figure it won’t happen often, but I could totally imagine me having 51 articles for an issue and missing that one row was missing.</p>\n<p>Some have said that writing helps you learn what you’re writing about. I suppose this adds to that thought.</p>\n<p>You can view the full project on <a href=\"https://github.com/kpwags/reading-log-generator\">GitHub</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/08/07/is-typescript-solving-a-problem-or-a-symptom/",
      "url": "https://kpwags.com/posts/2023/08/07/is-typescript-solving-a-problem-or-a-symptom/",
      "title": "Is TypeScript Solving a Problem or a Symptom",
      "content_html": "\n\t\t<p>I was listening to <a href=\"https://shoptalkshow.com/553/\">ShopTalk Episode 553</a> and Dave asked a question that made me pause and think, hmmm…</p>\n<blockquote>\n<p>Is TypeScript Solving a Problem or a Symptom? Is the problem “I don’t know what the data is”, or the symptom, “I have too much f*cking JavaScript and that’s the problem.”</p>\n</blockquote>\n<p>I’ve been using TypeScript almost exclusively for 3+ years now. I find it to make my development work easier and myself more productive. For big applications, it’s an absolute godsend. Visual Studio Code lets me know what properties the various objects have and what methods are available to me.</p>\n<p>The downside of course is that if I need that help, it probably means there’s a lot of JavaScript and remembering or knowing quickly the properties and definitions of an object becomes more and more troublesome.</p>\n<p>If the JavaScript is part of your build tooling, that’s one thing. But if all of the JavaScript is being sent to the client, performance is likely to take a hit.</p>\n<p>I don’t really know what the right answer for all of this is, apps are getting bigger and more complex, thus requiring more JavaScript to support them. I just thought it was an interesting thought since TypeScript has become as big as it has.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/38/",
      "url": "https://kpwags.com/reading-log/38/",
      "title": "Reading Log - August 4, 2023 (#38)",
      "content_html": "\n\t\t<p>This week we look at the danger of KOSA, a new dark matter telescope, and the dangers of climate change.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://heather-buchel.com/blog/2023/07/just-normal-web-things/\">Just normal web things.</a> - <em>Heather Buchel</em></li>\n<li><a href=\"https://catskull.net/html.html\">I'm betting on HTML</a> - <em>catskull.net</em></li>\n<li><a href=\"https://blog.scottlogic.com/2023/07/21/seven-things-i-wish-i-knew-when-i-started-as-a-software-developer.html\">Seven Things I Wish I Knew When I Started as a Software Developer</a> - <em>Beth Pritchard</em></li>\n<li><a href=\"https://www.builder.io/blog/tailwind-css-tips-and-tricks\">Tailwind CSS Tips and Tricks Worth Knowing</a> - <em>Yoav Ganbar</em></li>\n<li><a href=\"https://github.blog/2023-07-24-github-repository-rules-are-now-generally-available/\">GitHub Repository Rules are now generally available</a> - <em>Patrick Knight</em></li>\n<li><a href=\"https://code.visualstudio.com/blogs/2023/07/20/mangling-vscode\">Shrinking VS Code with name mangling</a> - <em>Matt Bierner</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/8/4/23819578/kosa-kids-online-safety-act-privacy-danger\">How the Kids Online Safety Act puts us all at risk</a> - <em>Casey Newton</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.politico.eu/article/ai-improves-breast-cancer-detection-rate-20-percent-swedish-study/\">AI improves breast cancer detection rate by 20 percent</a> - <em>Ashleigh Furlong</em></li>\n<li><a href=\"https://ntrs.nasa.gov/api/citations/20230003852/downloads/NEA_HSF_2023_PDC.pdf\">Prospects for Future Human Space Flight Missions to Near-Earth Asteroids</a> - <em>NASA</em></li>\n<li><a href=\"https://www.theverge.com/2023/7/31/23814266/euclid-space-telescope-dark-matter-energy-european-space-agency-nasa-max-planck-institute\">Europe’s dark matter-hunting space telescope nabs its first test images</a> - <em>Wes Davis</em></li>\n<li><a href=\"https://www.theverge.com/2023/7/31/23814003/ocean-heatwave-florida-keys-coral-reef-rescue\">A killer ocean heatwave is decimating Florida’s corals</a> - <em>Justine Calma</em></li>\n<li><a href=\"https://www.theregister.com/2023/07/31/nasa_mistakenly_disconnects_voyager_2/\">NASA mistakenly severs communication to Voyager 2</a> - <em>Laura Dobberstein</em></li>\n<li><a href=\"https://www.scientificamerican.com/article/how-we-can-adapt-to-live-with-extreme-heat/\">How We Can Adapt to Live with Extreme Heat</a> - <em>Daniel Cusick</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/08/microsoft-now-offers-xbox-controller-parts-manuals-and-video-repair-guides/\">Microsoft keeps pushing toward repairability, now with Xbox controller parts</a> - <em>Kevin Purdy</em></li>\n<li><a href=\"https://arstechnica.com/gaming/2023/07/report-nintendos-next-console-ships-late-2024-still-supports-cartridges/\">Nintendo’s Switch successor is already in third-party devs’ hands, report claims</a> - <em>Samuel Axon</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://fortune.com/2023/08/01/research-damaging-results-mandated-return-to-office-worse-than-we-thought-rto-remote-work-careers-leadership-gleb-tsipursky/\">We’re now finding out the damaging results of the mandated return to the office–and it’s worse than we thought</a> - <em>Gleb Tsipursky</em></li>\n<li><a href=\"https://www.economist.com/business/2023/07/20/startups-are-producing-real-dairy-without-a-cow-in-sight\">Startups are producing real dairy without a cow in sight</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.marketplace.org/2023/07/31/new-georgia-reactor-nuclear-power/\">New Georgia reactor is a test case for nuclear power</a> - <em>Kimberly Adams</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dancarlin.com/product/hardcore-history-69-twilight-of-the-aesir/\">Hardcore History #69: Twilight of the Æsir</a></li>\n<li><a href=\"https://shoptalkshow.com/553/\">ShopTalk #553: TypeScript, DX, GripeScript, and Astro v2 with Fred Schott</a></li>\n<li><a href=\"http://www.wtfpod.com/podcast/episode-1411-michelle-yeoh\">WTF with Marc Maron #1411: Michelle Yeoh</a></li>\n<li><a href=\"https://www.radiolab.org/podcast/golden-goose\">Radiolab: Golden Goose</a></li>\n<li><a href=\"https://www.techdirt.com/2023/08/01/techdirt-podcast-episode-360-can-interoperability-be-mandated/\">Techdirt Podcast #360: Can Interoperability Be Mandated?</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/the-chinatown-punk-wars/\">99% Invisible #525: The Chinatown Punk Wars</a></li>\n<li><a href=\"https://www.techdirt.com/2023/07/18/techdirt-podcast-episode-358-social-media-in-chaos/\">Techdirt Podcast #358: Social Media In Chaos</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - You In January (Acoustic)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/vC_XwwhLC0Q\" title=\"The Wonder Years - You In January (Acoustic)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/08/03/july-2023-check-in/",
      "url": "https://kpwags.com/posts/2023/08/03/july-2023-check-in/",
      "title": "July 2023 Check-In",
      "content_html": "\n\t\t<p>July was a scorcher. I know we had it lucky compared to other areas of the world, but I don’t do well in the heat so the constant 90º weather was not pleasant for me.</p>\n<p>Other than the heat, it wasn’t a bad month. Not much really happened this month. It was nice and relaxing. I went down to Maryland to hang out with a good friend from college. We caught an Orioles’ game in Baltimore and just hung out with his wife and daughter.</p>\n<h2>Running Again</h2>\n<p>Towards the end of the month I started getting back into running since I’m going to attempt the Philadelphia Marathon this year. My hip flexor is still giving me issues so I’m hoping it doesn’t get so bad I can’t run. Thankfully the distances right now are on the shorter side to help me ramp up to the longer distances. Waking up at the crack of dawn so I can run to beat the heat won’t be much fun though.</p>\n<h2>Guitar</h2>\n<p>I’ve also picked back up the guitar. I got one in high school, took a few lessons but then stopped playing since I didn’t really take to it. One of my goals this year was to pick it back up. I’ve gotten my hands on an acoustic guitar and am taking online practice lessons in hopes that I’ll take to it better this time. The tips of my fingers are hurting though 😭.</p>\n<h2>More Sleeve Work</h2>\n<p>I had my second session for my sleeve and so far it looks amazing. The detail is phenomenal despite it not having any color yet. I have two sessions scheduled in August to get some color on the upper arm and then start on the forearm. I’m looking forward to more progress and its eventual completion.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Back up to 32.77 miles. Marathon training has begun.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Switched over to a twice a week program to give me time for marathon training.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/twilight-of-the-gods-war-in-the-western-pacific-1944-1945-ian-w-toll/13150893?ean=9780393868302\">Twilight of the Gods: War in the Western Pacific, 1944-1945</a> by Ian W. Toll</li>\n<li><a href=\"https://bookshop.org/p/books/the-terraformers-annalee-newitz/19537833?ean=9781250228017\">The Terraformers</a> by Annalee Newitz</li>\n<li><a href=\"https://bookshop.org/p/books/bullshit-jobs-a-theory-david-graeber/6692761?ean=9781501143335\">Bullshit Jobs</a> by David Graeber</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://leanpub.com/learningpatterns\">Learning Patterns</a> by Lydia Hallie &amp; Addy Osmani</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/35\">July 7, 2023 (#35)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/36\">July 21, 2023 (#36)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/37\">July 28, 2023 (#37)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/07/12/random-thoughts-on-owning-things\">owning things</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/07/24/reading-and-watching-notes\">keeping notes on what I read and watch</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/07/31/blazor-custom-authentication\">implementing custom authentication in Blazor</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Started, and finished <a href=\"https://www.pbs.org/kenburns/the-roosevelts/\">The Roosevelts</a></li>\n<li>Continued season 2 of <a href=\"https://www.imdb.com/title/tt12327578/\">Star Trek: Strange New Worlds</a></li>\n<li>Got up to date on <a href=\"https://www.imdb.com/title/tt0472954/\">It’s Always Sunny in Philadelphia</a></li>\n<li>Started season 3 of <a href=\"https://www.imdb.com/title/tt5057054/\">Jack Ryan</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt8879940/\">Mythic Quest</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt1898069/\">American Gods</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt2261227/\">Altered Carbon</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt2906216/\">Dungeons &amp; Dragons: Among Thieves</a></li>\n<li><a href=\"https://www.imdb.com/title/tt11274492/\">The Out-Laws</a></li>\n<li><a href=\"https://www.imdb.com/title/tt4572820/\">For the Love of Spock</a></li>\n<li><a href=\"https://m.imdb.com/title/tt0796366/\">Star Trek</a></li>\n<li><a href=\"https://m.imdb.com/title/tt1408101/\">Star Trek: Into Darkness</a></li>\n<li><a href=\"https://m.imdb.com/title/tt2660888/\">Star Trek: Beyond</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-08-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/07/31/blazor-custom-authentication/",
      "url": "https://kpwags.com/posts/2023/07/31/blazor-custom-authentication/",
      "title": "Digging Into Blazor - Setting Up Custom Authentication",
      "content_html": "\n\t\t<p>One of the things I wanted to integrate with this project was user accounts. I am not sure that I really need it since I’m not really intending to release my card collection app as a full fledged website for the masses. But I still wanted to add it in if for no other reason than to learn.</p>\n<p>This is the third installment of my Digging into Blazor series.</p>\n<section class=\"blog-series\">\n    <h2>Series: Digging into Blazor</h2>\n    <ul class=\"posts\">\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions\">First Impressions</a></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework\">Integrating with Entity Framework</a></li>\n        <li class=\"post\"><span class=\"current\">Setting Up Custom Authentication</span></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/09/29/digging-into-blazor-forms\">Forms</a></li>\n    </ul>\n</section>\n<p>The first thing I realized is that the architecture of Blazor doesn’t handle user authentication in quite the same way that ASP.NET web applications do.</p>\n<p>Blazor uses <a href=\"https://learn.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr\">SignalR</a> extensively, and it uses it for authentication and session management as well.</p>\n<p>I figured I’d go through what I had to do to get it working in hopes that it will help someone else.</p>\n<hr />\n<p>To start, I’m using the <a href=\"https://github.com/Blazored/SessionStorage\">Blazored SessionStorage</a> library so install that.</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"token operator\">></span> dotnet <span class=\"token function\">add</span> package Blazored.SessionStorage</code></pre>\n<p>Like many of my projects, I use Microsoft’s Identity libraries to handle users. No sense in rolling your own. And fortunately, Microsoft’s package works with Blazor as well.</p>\n<p>To set this up, I need to add Microsoft Identity. This is how it’s done in other apps as well. In <code>Program.cs</code> file, (or <code>Startup.cs</code> in older project templates).</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">builder<span class=\"token punctuation\">.</span>Services<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">AddIdentity</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>UserAccountDto<span class=\"token punctuation\">,</span> IdentityRole<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span><span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">AddEntityFrameworkStores</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">AddDefaultTokenProviders</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>By declaring <code>IdentityRole</code> with <code>&lt;int&gt;</code>, I’m telling EntityFramework (EF) to build the Role table using an integer as the ID column type.</p>\n<p>The UserAccount table is much the same, but since I need to add values to it, I have it defined in its own class. Again, having it inherit the <code>IdentityUser</code> type with <code>&lt;int&gt;</code> will have EF use an integer for the ID column type.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">Microsoft<span class=\"token punctuation\">.</span>AspNetCore<span class=\"token punctuation\">.</span>Identity</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">CardOrganizer<span class=\"token punctuation\">.</span>Domain<span class=\"token punctuation\">.</span>Dtos</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">UserAccountDto</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IdentityUser<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">PersonalData</span></span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Name <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This in itself doesn’t vary much from other project types so the familiarity helped.</p>\n<p>The next thing I needed to do was add the Blazored SessionStorage library. It’s able to be done by adding it to the <code>Program.cs</code> file.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">builder<span class=\"token punctuation\">.</span>Services<span class=\"token punctuation\">.</span><span class=\"token function\">AddBlazoredSessionStorage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<h2>Building our Custom Auth Provider</h2>\n<p>The next step was to build a custom authentication provider. Let’s call it <code>CustomAuthenticationStateProvider</code>.</p>\n<p>It will need to implement the abstract class <code>AuthenticationStateProvider</code>.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CustomAuthenticationStateProvider</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">AuthenticationStateProvider</span></span>\n<span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I’m going to need access to both Blazor’s session storage and our <code>UserManager</code>, so I’ll add them through dependency injection.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CustomAuthenticationStateProvider</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">AuthenticationStateProvider</span></span>\n<span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">UserManager<span class=\"token punctuation\">&lt;</span>UserAccountDto<span class=\"token punctuation\">></span></span> _userManager<span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">ISessionStorageService</span> _sessionStorageService<span class=\"token punctuation\">;</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token function\">CustomAuthenticationStateProvider</span><span class=\"token punctuation\">(</span>\n\t\t<span class=\"token class-name\">UserManager<span class=\"token punctuation\">&lt;</span>UserAccountDto<span class=\"token punctuation\">></span></span> userManager<span class=\"token punctuation\">,</span>\n\t\t<span class=\"token class-name\">ISessionStorageService</span> sessionStorageService\n\t<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">{</span>\n            _userManager <span class=\"token operator\">=</span> userManager<span class=\"token punctuation\">;</span>\n            _sessionStorageService <span class=\"token operator\">=</span> sessionStorageService<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The first thing I needed to do was to override the <code>GetAuthenticationStateAync</code> method. This is the key method needed for method returns the current authentication state. This method is responsible for returning the authentication state to whatever is asking for it.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">override</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>AuthenticationState<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAuthenticationStateAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> identity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> userId <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _sessionStorageService\n\t\t<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">GetItemAsync</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>userId <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _userManager\n\t\t\t<span class=\"token punctuation\">.</span><span class=\"token function\">FindByIdAsync</span><span class=\"token punctuation\">(</span>userId<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>user <span class=\"token keyword\">is</span> <span class=\"token keyword\">not</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            identity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n            <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UserAccountId\"</span><span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Id<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Email<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Email <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"CardOrgAuth\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">else</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token comment\">// can't find the user, kill the session</span>\n            <span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token function\">RemoveItemAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">AuthenticationState</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsPrincipal</span><span class=\"token punctuation\">(</span>identity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The first thing this function does is pull the user ID from the session storage. We then use the ID to find the user from the database. If the user is found, we build the identity with the user information. And return it as the authentication state.</p>\n<p>If the user isn’t found or there is no user ID in the session state then a blank identity is returned.</p>\n<h2>Applying Authentication States</h2>\n<p>Now that that’s been implemented, we can use the <code>&lt;AuthorizeView&gt;</code> elements in our components.</p>\n<p>To start, I needed to modify my <code>App.razor</code> file to allow for handling the authentication state.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>CascadingAuthenticationState</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Router</span> <span class=\"token attr-name\">AppAssembly</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\"><span class=\"token keyword\">typeof</span><span class=\"token punctuation\">(</span><span class=\"token type-expression class-name\">App</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>Assembly</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Found</span> <span class=\"token attr-name\">Context</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>routeData<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>AuthorizeRouteView</span> <span class=\"token attr-name\">RouteData</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">routeData</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">DefaultLayout</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\"><span class=\"token keyword\">typeof</span><span class=\"token punctuation\">(</span><span class=\"token type-expression class-name\">MainLayout</span><span class=\"token punctuation\">)</span></span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>FocusOnNavigate</span> <span class=\"token attr-name\">RouteData</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">routeData</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">Selector</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>h1<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>Found</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>NotFound</span><span class=\"token punctuation\">></span></span>...<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>NotFound</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>Router</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>CascadingAuthenticationState</span><span class=\"token punctuation\">></span></span>\n</code></pre>\n<p>I had to encompass the entire page with the <code>&lt;CascadingAuthenticationState&gt;</code> tag and I had to change the <code>&lt;RouteView&gt;</code> tag in with the <code>&lt;AuthorizeRouteView&gt;</code> tag. This will allow for the AuthenticationState to cascade down into my components.</p>\n<p>Here’s a good example of it in use in an actual component. In the site’s nav bar, I have links to login and to register when there is no user logged in, and the user’s name and a logout button when there is an active session.</p>\n<pre class=\"language-razor\" tabindex=\"0\"><code class=\"language-razor\"><span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">AuthenticationStateProvider AuthStateProvider</span></span>\n<span class=\"token directive\"><span class=\"token keyword\">@inject</span> <span class=\"token csharp language-csharp\">NavigationManager NavigationManager</span></span>\n\n...\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>AuthorizeView</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Authorized</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>inline-block mx-4<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>#<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text-white<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token value variable\"><span class=\"token keyword\">@</span><span class=\"token csharp language-csharp\">context<span class=\"token punctuation\">?.</span>User<span class=\"token punctuation\">?.</span>Identity<span class=\"token punctuation\">?.</span>Name</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>inline-block mx-4<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn-link<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@onclick</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>async () => await HandleLogout()<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Logout<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>Authorized</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>NotAuthorized</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>inline-block mx-4<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/login<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text-white<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Login<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>inline-block mx-4<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>/register<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text-white<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Register<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>NotAuthorized</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>AuthorizeView</span><span class=\"token punctuation\">></span></span>\n\n...\n\n<span class=\"token block\"><span class=\"token keyword\">@code</span> <span class=\"token csharp language-csharp\"><span class=\"token punctuation\">{</span>\n    <span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">CascadingParameter</span></span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">private</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>AuthenticationState<span class=\"token punctuation\">></span><span class=\"token punctuation\">?</span></span> AuthenticationState <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">HandleLogout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">await</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>CustomAuthenticationStateProvider<span class=\"token punctuation\">)</span>AuthStateProvider<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">EndUserSession</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></span></span></code></pre>\n<p>Within the <code>&lt;AuthorizeView&gt;</code> tags, we have two tags. Anything within the <code>&lt;Authorized&gt;</code> tags will appear when the user is logged in, anything within the <code>&lt;NotAuthorized&gt;</code> tags will appear when the user is not logged in.</p>\n<p>The other key is defining the Cascading Parameter in the <code>@code</code> section of the component.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token punctuation\">[</span><span class=\"token attribute\"><span class=\"token class-name\">CascadingParameter</span></span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">private</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>AuthenticationState<span class=\"token punctuation\">></span><span class=\"token punctuation\">?</span></span> AuthenticationState <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span></code></pre>\n<p>This is needed so the <code>AuthorizeView</code> knows the current authentication state of the user.</p>\n<h2>Implementing Logging In and Logging Out</h2>\n<p>The final step I needed to do was to allow the user to log in and then log out.</p>\n<h3>Processing on the Form</h3>\n<p>The Custom Authentication State Provider I built above doesn’t actually verify the user’s credentials are complete. It just handles maintaining the session. What I needed to do was validate the user’s email and password elsewhere first.</p>\n<p>I created a service to handle this.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span>UserAccount<span class=\"token punctuation\">></span></span> <span class=\"token function\">LoginUser</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span></span> email<span class=\"token punctuation\">,</span> <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> password<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _userManager<span class=\"token punctuation\">.</span><span class=\"token function\">FindByEmailAsync</span><span class=\"token punctuation\">(</span>email<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>user <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Invalid username or password.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _signInManager<span class=\"token punctuation\">.</span><span class=\"token function\">CheckPasswordSignInAsync</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">,</span> password<span class=\"token punctuation\">,</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>Succeeded<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> UserAccount<span class=\"token punctuation\">.</span><span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Invalid username or password.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This function takes an email and a password and uses the <code>UserManager</code> and <code>SignInManager</code> to find the user, and then verify that the password is the correct password. If the email and password match, then the <code>UserAccount</code> object is returned. If the user is not found or the password is incorrect, an exception is thrown.</p>\n<p>Let’s take a look at my login page.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\">@code <span class=\"token punctuation\">{</span>\n\t<span class=\"token range operator\">..</span><span class=\"token punctuation\">.</span>\n    <span class=\"token keyword\">try</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> AccountService<span class=\"token punctuation\">.</span><span class=\"token function\">LoginUser</span><span class=\"token punctuation\">(</span>_model<span class=\"token punctuation\">.</span>Email<span class=\"token punctuation\">,</span> _model<span class=\"token punctuation\">.</span>Password<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    \t<span class=\"token keyword\">await</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>CustomAuthenticationStateProvider<span class=\"token punctuation\">)</span>AuthStateProvider<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">StartUserSession</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    \t_isLoading <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n\n        NavigationManager<span class=\"token punctuation\">.</span><span class=\"token function\">NavigateTo</span><span class=\"token punctuation\">(</span>\n            <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span><span class=\"token function\">IsNullOrWhiteSpace</span><span class=\"token punctuation\">(</span>RedirectUrl<span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">?</span> <span class=\"token string\">\"/\"</span>\n                <span class=\"token punctuation\">:</span> RedirectUrl<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        _pageError <span class=\"token operator\">=</span> e<span class=\"token punctuation\">.</span>Message<span class=\"token punctuation\">;</span>\n        _isLoading <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">StateHasChanged</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The first thing I do is pass the email and password to the <code>LoginUser</code> function. If the email or password is incorrect, the exception is thrown and the error message is displayed to the user. If the email and password are correct, it passes the <code>UserAccount</code> object to the <code>AuthenticateUser</code> function and redirects the user to the page they came from or to the homepage.</p>\n<p>You might have noticed the <code>EndUserSession()</code> function call in the nav bar, and the <code>StartUserSession</code> call in the code above. These are the last two pieces in the <code>CustomAuthenticationStateProvider</code> class.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">StartUserSession</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">UserAccount</span> user<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token function\">SetItemAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>UserAccountId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> identity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UserAccountId\"</span><span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>UserAccountId<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Email<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Email<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Claim</span><span class=\"token punctuation\">(</span>ClaimTypes<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span> user<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> userAccount <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsPrincipal</span><span class=\"token punctuation\">(</span>identity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">NotifyAuthenticationStateChanged</span><span class=\"token punctuation\">(</span>Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">AuthenticationState</span><span class=\"token punctuation\">(</span>userAccount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">EndUserSession</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">await</span> _sessionStorageService<span class=\"token punctuation\">.</span><span class=\"token function\">RemoveItemAsync</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"userId\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> identity <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsIdentity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">NotifyAuthenticationStateChanged</span><span class=\"token punctuation\">(</span>Task<span class=\"token punctuation\">.</span><span class=\"token function\">FromResult</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">AuthenticationState</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ClaimsPrincipal</span><span class=\"token punctuation\">(</span>identity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Starting with the <code>StartUserSession</code>, this function first puts the user’s ID in the session, then it takes the <code>UserAccount</code> object and builds the <code>ClaimsPrincipal</code> to be returned, notifying the site that the authentication state has changed.</p>\n<p>The <code>EndUserSession</code> function does the opposite. It removes the user’s ID from the session, returns a blank principal, and notifies the site the authentication state has changed.</p>\n<hr />\n<p>That’s basically it. It’s a little more complicated than what I’m used to, but it’s also not horribly difficult to work with.</p>\n<p>You can view the code base for my card organizer on <a href=\"https://github.com/kpwags/card-organizer\">GitHub</a>. It’s still a work in progress, but this is currently in place and working.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/37/",
      "url": "https://kpwags.com/reading-log/37/",
      "title": "Reading Log - July 28, 2023 (#37)",
      "content_html": "\n\t\t<p>A little light this week, but I've read about a new horrible law being pushed through U.S. Congress that could ruin the internet, Google supporting some bad DRM policies and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://devblogs.microsoft.com/oldnewthing/20230725-00/?p=108482\">Before you try to do something, make sure you can do nothing</a></h2>\n\t<div class=\"in-depth-meta\">Raymond Chen</div>\n\t<div class=\"in-depth-text\">\n<p>When I’m learning a new language or library, it’s very easy for me to try to write something complex and in depth right out of the gate. In reality, it’s better to learn to walk before you try to run.</p>\n<blockquote><p>Too often, I see relatively inexperienced developers dive in and start writing a big complex thing: Then they can’t even get it to compile because it’s so big and complex. They ask for help, saying, “I’m having trouble with this one line of code,” but as you study what they have written, you realize that this one line of code is hardly the problem.</p></blockquote>\n<p>Truer words…</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://gomakethings.com/the-joy-of-simplicity-in-web-development/\">The joy of simplicity in web development</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://keithjgrant.com/posts/2023/07/web-components-arent-components/\">Web Components Aren’t Components</a> - <em>Keith J. Grant</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/07/26/pass-it-pass-it-pass-it-pass-it-pass-it-the-president-says-about-a-bill-the-gop-says-will-be-useful-to-silence-lgbtq-voices/\">‘Pass It, Pass It, Pass It, Pass It, Pass It,’ The President Says About A Bill The GOP Says Will Be Useful To Silence LGBTQ Voices</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.pcworld.com/article/2009730/vivaldi-mozilla-warn-of-googles-proposed-drm-for-the-web.html\">Vivaldi, Mozilla raise alarms over Google’s proposed ‘DRM for the Web’</a> - <em>Mark Hachman</em></li>\n<li><a href=\"https://www.techdirt.com/2023/07/25/reddit-kicks-out-protesting-mods-as-reddit-users-continue-to-find-creative-ways-to-protest/\">Reddit Kicks Out Protesting Mods, As Reddit Users Continue To Find Creative Ways To Protest</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2023/07/24/elon-musks-war-on-possibly-imaginary-scrapers-now-a-lawsuit-which-might-actually-work/\">Elon Musk’s ‘War’ On Possibly Imaginary Scrapers Now A Lawsuit, Which Might Actually Work</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.washingtonpost.com/technology/2023/07/26/nuclear-rocket-contract-nasa-darpa/\">NASA, Pentagon award contract to build nuclear-powered rocket engine</a> - <em>Christian Davenport</em></li>\n<li><a href=\"https://arstechnica.com/space/2023/07/could-spacex-turn-starship-into-a-space-station/\">SpaceX teases another application for Starship</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://arstechnica.com/space/2023/07/christmas-is-coming-for-asteroid-scientists-just-2-months-from-today/\">After bopping an asteroid 3 years ago, NASA will finally see the results</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2023/07/28/gm-keeps-chevy-bolt-alive/\">GM keeps Chevy Bolt alive</a> - <em>Henry Epp</em></li>\n<li><a href=\"https://www.reuters.com/investigates/special-report/tesla-batteries-range/\">Tesla created secret team to suppress thousands of driving range complaints</a> - <em>Steve Stecklow &amp; Norihiko Shirouzu</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://blog.jim-nielsen.com/2023/domain-nuance/\">The Nuance of “Domain”</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - There's No Place In This World For Me</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/SSsisCVST_s\" title=\"The Menzingers - There's No Place In This World For Me\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/07/24/reading-and-watching-notes/",
      "url": "https://kpwags.com/posts/2023/07/24/reading-and-watching-notes/",
      "title": "Reading and Watching Notes",
      "content_html": "\n\t\t<p>Lately I’ve been reading a lot of non-fiction and have been watching some documentaries like <em>The Roosevelts</em>. I’ve found them to be incredibly interesting, but also very much in depth with a lot of information to digest. Sometimes it feels like I’m back in middle school, but I’ve started to take notes on what I’ve been reading and watching.</p>\n<p>With reading, I’ve just been making notes about what I’m reading and capturing quotes that stand out. My iPhone makes the quotes easy as I can use the OCR functionality of the camera to copy the text off the page or off my Kindle to copy into my note.</p>\n<p>With documentaries, it’s much the same, just capturing various different notes and factoids that I see and find interesting.</p>\n<p>I’m not sure I’ll ever come back and dig into them, but I’m always trying to learn and it often feels like writing down some of what I read and watch helps my grasp things better.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/36/",
      "url": "https://kpwags.com/reading-log/36/",
      "title": "Reading Log - July 21, 2023 (#36)",
      "content_html": "\n\t\t<p>It’s another double issue as I was away in Maryland last weekend. Lots of stuff in here from many classic games being no longer available, new C# &amp; .NET features, some CSS tricks, and an unfortunate outcome in the FTC vs. Microsoft case regarding their acquisition of Activision.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://arstechnica.com/gaming/2023/07/87-of-classic-games-are-out-of-print-thats-a-problem-for-gaming-history/\">87% of classic games are out of print. That’s a problem for gaming history.</a></h2>\n\t<div class=\"in-depth-meta\">Kyle Orland</div>\n\t<div class=\"in-depth-text\">\n<p>This goes along with the - <a href=\"https://kpwags.com/posts/2023/06/27/star-trek-prodigy-what-a-bummer\">tragedy of Star Trek: Prodigy</a> and my push to - <a href=\"https://kpwags.com/posts/2023/07/12/random-thoughts-on-owning-things\">own my media</a>. There are so many good games of the past that are hard to come by. And there are some that are only available via some probably less-than-legal methods which is shame.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.techdirt.com/2023/07/19/how-would-the-gop-feel-if-democrats-in-congress-demanded-details-regarding-how-fox-news-or-the-ny-post-made-editorial-decisions/\">How Would The GOP Feel If Democrats In Congress Demanded Details Regarding How Fox News Or The NY Post Made Editorial Decisions?</a></h2>\n\t<div class=\"in-depth-meta\">Mike Masnick</div>\n\t<div class=\"in-depth-text\">\n<blockquote><p>Now, imagine if the Democrats were in control over the House, and they formed a committee that sent a similar subpoena to Fox News or to the NY Post “compelling” either of those orgs to detail how it made editorial choices, what stories it would cover, what opinion writers it would publish, or what stories would go on the front page with what headlines?</p></blockquote>\n<p>Mike hits the nail right on the head here. I am no fan of Fox News. I think it has made America dumber, and has helped divide this country by feeding people so many lies and bullshit over the years. I also don’t want to see the government going after them and pushing them to determine what they cover and how they cover it. And while I am no fan of Meta either, Meta should be free to moderate Threads as they see fit.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://ishadeed.com/article/new-viewport-units/\">New Viewport Units</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://chriscoyier.net/2023/07/11/sass-features-in-css/\">Sass Features in CSS</a> - <em>Chris Coyier</em></li>\n<li><a href=\"https://fedmentor.dev/posts/rem-html-font-size-hack/\">Should I change the default HTML font-size to 62.5%?</a> - <em>Grace Snow</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-6/\">Announcing .NET 8 Preview 6</a> - <em>Justin Yoo</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/new-csharp-12-preview-features/\">New C# 12 preview features</a> - <em>Kathleen Dollard</em></li>\n<li><a href=\"https://timdeschryver.dev/blog/entity-framework-features-i-wish-i-knew-earlier\">Entity framework features I wish I knew earlier</a> - <em>Tim Deschryver</em></li>\n<li><a href=\"https://www.infobeans.com/why-design-systems-fail/\">Why design systems fail</a> - <em>Karen Vanhouten</em></li>\n<li><a href=\"https://jonhilton.net/blazor-ssr/\">Exploring Blazor Changes in .NET 8 - Server Side Rendering (SSR)</a> - <em>Jon Hilton</em></li>\n<li><a href=\"https://fettblog.eu/5-truths-about-typescript/\">5 Inconvenient Truths about TypeScript</a> - <em>Stefan Baumgartner</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/introducing-a-powerful-new-extension-manager/\">Introducing a Powerful New Extension Manager</a> - <em>Maia Kelner</em></li>\n<li><a href=\"https://code-maze.com/csharp-mediatr-publish-and-send-methods/\">MediatR Publish and Send Methods</a> - <em>Code Maze</em></li>\n<li><a href=\"https://www.matuzo.at/blog/2023/zero-width-height-skip/\">Visually hidden links with 0 dimensions</a> - <em>Manuel Matuzović</em></li>\n<li><a href=\"https://gomakethings.com/how-to-create-a-responsive-grid-system-with-css-grid/\">How to create a responsive grid system with CSS Grid</a> - <em>Chris Ferdinandi</em></li>\n<li><a href=\"https://addyosmani.com/blog/good-code/\">Good code is like a love letter to the next developer who will maintain it.</a> - <em>Addy Osmani</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/too-many-tabs-open-no-problem/\">Too many tabs open? No problem!</a> - <em>Mads Kristensen</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/3ebbefe2-7db7-4d1d-8d81-719009504027\">Overload Resolution in C#</a> - <em>Steven Giesel</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techspot.com/news/99348-san-francisco-protestors-disabling-autonomous-vehicles-using-traffic.html\">San Francisco protestors are disabling autonomous vehicles using traffic cones</a> - <em>Rob Thubron</em></li>\n<li><a href=\"https://www.theverge.com/2023/7/11/23791183/fcc-sim-swapping-port-out-phone-hijacking-security-protection\">The FCC aims to stop SIM swappers with new rules</a> - <em>Wes Davis</em></li>\n<li><a href=\"https://www.techdirt.com/2023/07/12/congratulations-the-us-is-32nd-worldwide-on-broadband-affordability/\">Congratulations! The US Is 32nd Worldwide On Broadband Affordability</a> - <em>Karl Bode</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/07/meta-wont-say-what-happened-to-taxpayer-data-it-may-have-illegally-collected/\">Tax preparers that shared private data with Meta, Google could be fined billions</a> - <em>Ashley Belanger</em></li>\n<li><a href=\"https://daringfireball.net/linked/2023/07/12/xai\">The ‘X’ Stands for Bullshit</a> - <em>John Gruber</em></li>\n<li><a href=\"https://www.techdirt.com/2023/07/17/massachusetts-prepares-to-ban-the-collection-and-abuse-of-cell-phone-location-data/\">Massachusetts Prepares To Ban The Collection And Abuse Of Cell Phone Location Data</a> - <em>Karl Bode</em></li>\n<li><a href=\"https://www.vice.com/en/article/v7b3gj/amazon-told-drivers-not-to-worry-about-in-van-surveillance-cameras-now-footage-is-leaking-online\">Amazon Told Drivers Not to Worry About In-Van Surveillance Cameras. Now Footage Is Leaking Online</a> - <em>Jules Roscoe</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/07/fear-loathing-and-excitement-as-threads-adopts-open-standard-used-by-mastodon/\">Fear, loathing, and excitement as Threads adopts open standard used by Mastodon</a> - <em>Gregory Barber</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/07/in-space-manufacturing-startup-aces-pharma-experiment-in-orbit/\">In-space manufacturing startup aces pharma experiment in orbit</a> - <em>Stephen Clark</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/07/probing-the-mysteries-of-neutron-stars-with-a-surprising-earthly-analog/\">Probing the mysteries of neutron stars with a surprising earthly analog</a> - <em>Katie McCormick</em></li>\n<li><a href=\"https://www.npr.org/sections/money/2023/07/11/1186458991/should-we-invest-more-in-weather-forecasting-it-may-save-your-life\">Should we invest more in weather forecasting? It may save your life</a> - <em>Greg Rosalsky</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/07/hubble-is-able-to-spot-boulders-blasted-loose-by-the-dart-impact/\">DART asteroid impact created a 10,000-kilometer debris field of boulders</a> - <em>John Timmer</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/7/11/23779039/microsoft-activision-blizzard-ftc-trial-win\">Microsoft wins FTC fight to buy Activision Blizzard</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://www.theverge.com/2023/7/14/23795326/xbox-major-nelson-larry-hryb-microsoft\">Xbox’s Major Nelson is leaving Microsoft after 22 years</a> - <em>Jay Peters</em></li>\n<li><a href=\"https://www.theverge.com/2023/7/19/23797238/microsoft-activision-blizzard-merger-agreement-extension\">Microsoft and Activision Blizzard extend merger agreement to October</a> - <em>Tom Warren</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.businessinsider.com/tech-industry-fake-work-problem-bad-managers-bosses-layoffs-jobs-2023-7\">Inside the perverse system of 'lazy management' that's destroying the tech industry</a> - <em>Hugh Langley &amp; Grace Kay</em></li>\n<li><a href=\"https://www.economist.com/business/2023/07/10/the-fight-over-working-from-home-goes-global\">The fight over working from home goes global</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.marketplace.org/2023/07/13/the-financial-consequences-of-empty-offices/\">The financial consequences of empty offices</a> - <em>David Brancaccio, Alex Schroeder, &amp; Erika Soderstrom</em></li>\n<li><a href=\"https://www.thedriftmag.com/a-good-prospect/\">A Good Prospect</a> - <em>Nick Bowlin</em></li>\n<li><a href=\"https://www.npr.org/2023/07/17/1187275511/tipping-minimum-wage-tips-tip-screen\">Got tipping rage? This barista reveals what it's like to be behind the tip screen</a> - <em>Stacy Vanek Smith</em></li>\n<li><a href=\"https://www.marketplace.org/2023/07/19/why-prices-of-some-evs-are-falling/\">Electric vehicles are getting cheaper — here's why</a> - <em>Samantha Fields</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/megan-rapinoe-couldnt-have-done-it-any-better\">Megan Rapinoe Couldn't Have Done It Any Better</a> - <em>Tom Ley</em></li>\n<li><a href=\"https://www.npr.org/2023/07/10/1184587949/negro-league-baseball-mlb-sam-pollard\">The Negro League revolutionized baseball – MLB's new rules are part of its legacy</a> - <em>Dave Davies</em></li>\n<li><a href=\"https://defector.com/new-york-times-sports-the-athletic\">The Slow Hemorrhage Of The American Sports Desk</a> - <em>Ray Ratto</em></li>\n<li><a href=\"https://defector.com/running-backs-are-hosed\">Running Backs Are Hosed</a> - <em>Tom Ley</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/the-american-whitelash-and-economic-fear/\">Make Me Smart #968: The &quot;American Whitelash&quot; and economic fear</a></li>\n<li><a href=\"https://shoptalkshow.com/552/\">ShopTalk #552: Do You Want to Build a JS Framework? ☃️ CSS Wishlist for 2023</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://anildash.com/2023/07/07/vc-qanon/\">&quot;VC qanon&quot; and the radicalization of the tech tycoons</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://blog.thunderbird.net/2023/07/our-fastest-most-beautiful-release-ever-thunderbird-115-supernova-is-here/\">Our Fastest, Most Beautiful Release Ever: Thunderbird 115 &quot;Supernova&quot; Is Here!</a> - <em>Jason Evangelho</em></li>\n<li><a href=\"https://pluralistic.net/2023/07/13/whose-security/#for-me-not-thee\">A “secure” system can be the most dangerous of all</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.yieldcode.blog/post/why-engineers-should-write/\">Why engineers should focus on writing</a> - <em>Dmitry Kudryavtsev</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem  (feat. Bruce Springsteen) - History Books</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/gyUgfrCegOs\" title=\"The Gaslight Anthem  (feat. Bruce Springsteen) - History Books\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/07/12/random-thoughts-on-owning-things/",
      "url": "https://kpwags.com/posts/2023/07/12/random-thoughts-on-owning-things/",
      "title": "Random Thoughts on Owning Things",
      "content_html": "\n\t\t<p>With the latest news with <a href=\"https://gizmodo.com/star-trek-prodigy-cancelled-no-season-2-paramount-plus-1850571256\">Paramount+</a> and <a href=\"https://www.theverge.com/2023/5/19/23729642/disney-plus-hulu-remove-pull-shows-willow-streaming-bob-iger\">Disney/Hulu</a> pulling their own content from their own services, it's gotten me thinking quite a bit about ownership of what you purchase.</p>\n<p>It used to be you wanted the latest movie, book, music album, you went to the store and bought them. They were yours, no one could take them away from you. You could lend them to your friends and family, or let them collect dust on a shelf somewhere until you wanted to consume them again.</p>\n<p>Then along came digital downloads, first of music. The original downloads often came with Digital Rights Management (DRM) which basically meant that you could only listen to your purchases the way whoever you bought it from said you could. And you had to hope that the store you bought them from, didn't just <a href=\"https://arstechnica.com/uncategorized/2008/09/wal-mart-latest-to-shut-down-drm-key-servers/\">up and shut down, preventing your music from being played</a>.</p>\n<p>Eventually for music, the stores went DRM-free which made owning your purchases feasible again. But then came the Kindle with most if not all of its books locked down with more DRM. Eventually, Amazon started allowing some eBooks to be sold DRM-free...but don't expect the same for audio books purchased from Audible.</p>\n<p>Oh, and did I mention it's against the law to break DRM? Bought a Kindle and hundreds of eBooks from the Kindle store and decided you want to switch to Kobo? Hope you don't want to read (most) of the books on your brand new Kobo reader!</p>\n<p>The list goes on and on, and has now reached the streaming age. The content we watch on Netflix, Hulu, and the other video streaming sources can be added and pulled at their whim. Really like that Netflix series, enough that you enjoy watching it regularly? Better hope they don't pull it!</p>\n<p>Now I'm not trying to be a curmudgeon. I use music and video streaming services plenty, and enjoy them. But looking at the <em>Star Trek: Prodigy</em> case, it shows how much they can suck too. There's no easy way for me to go out and actually own it. CBS/Paramount don't offer the entire series on DVD or Blu-Ray. I can get the first 10 episodes on disc, but not the last 10. And that's the part that sucks.</p>\n<p>There are plenty of shows and movies where streaming makes plenty of sense. If I want to watch what might be a stupid movie (in all the good ways) and it's on a streaming service I have access to, I can watch it without having to shell out $20 for a DVD. And if I do like it, I can buy a physical copy.</p>\n<p>Streaming is perfect for those &quot;like, but not enough to buy&quot; movies, TV and books. But what do you do for the media you really like, are willing to shell out the money for, but the rights holders pull from streaming without offering an alternative? The cynic in me points to the last thing media companies want...</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/GnTjAhQaPn-544.webp 544w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/GnTjAhQaPn-544.gif 544w\" /><img alt=\"The Archer meme with the top text reading 'Do you want people to pirate your stuff?' and the bottom text reading 'Because this is why people pirate your stuff'\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/GnTjAhQaPn-544.jpeg\" width=\"544\" height=\"500\" /></picture></p>\n<p>Moving to the gaming world, there was a recent study, <a href=\"https://arstechnica.com/gaming/2023/07/87-of-classic-games-are-out-of-print-thats-a-problem-for-gaming-history/\">87% of classic games are out of print</a>. Even games that are 15 years old can be hard to come by. Hope you didn't want to play that PlayStation 2 game!</p>\n<p>After the whole <em>Star Trek: Prodigy</em> fiasco, I went out and bought the first season of <em>Star Trek: Strange New Worlds</em> on Blu-Ray because the show has been absolutely amazing so far (seriously, watch it). And I pre-ordered the entire series of <em>Star Trek: Picard</em>.</p>\n<p>Paramount+ can take their shows off their streaming services, but they can't come into my home and take my Blu-Ray player! Nor can Warner Music come in and take my record player! Mwahaha!</p>\n<p>I guess the whole point of this rambling is that over the last several months, I've been focused on buying more physical media, and DRM-free digital media so that I can watch, read, and listen to it without having to worry about it going away.</p>\n<p>You should consider that too.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/35/",
      "url": "https://kpwags.com/reading-log/35/",
      "title": "Reading Log - July 7, 2023 (#35)",
      "content_html": "\n\t\t<p>A Lot of software development links this week as well as a history of the fall of Google Reader and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://natemcmaster.com/blog/2023/06/18/less-code/\">Less Code is Often Better</a></h2>\n\t<div class=\"in-depth-meta\">Nate McMaster</div>\n\t<div class=\"in-depth-text\">\n<p>I can relate to a lot of what Nate talks about. I’ve written plenty of code that I revisit later only to wonder what I was thinking when I wrote it. I’m sure other developers have thought the same thing about my code and their own. When we write code, we are always trying to write the best code we can, but time constraints, vague requirements all get in the way.</p>\n<blockquote><p>However, with time, most engineers end up maintaining code they or someone else created long ago. And when that happens, what was hidden now becomes a headache.</p></blockquote>\n<p>I think it’s important to just be mindful of the code we write and do it in a way that minimizes headaches as best we can later down the road.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/23778253/google-reader-death-2013-rss-social\">Who killed Google Reader?</a></h2>\n\t<div class=\"in-depth-meta\">David Pierce</div>\n\t<div class=\"in-depth-text\">\n<p>I was really sad when Google killed off Reader. This was an interesting read about the history of Google Reader and how it formed and how it got pushed aside for Google’s push into social (which has since also been killed off).</p>\n<p>Since Reader was shuttered, I switched around between different services, but now am quite happy using - <a href=\"https://www.feedbin.com/\">FeedBin</a>. So while losing Reader sucked, it at least has shown that people want a good RSS reader. And with the Twitter drama, I think blogs and RSS are starting to make a bit of a resurgence.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://frontendmastery.com/posts/the-evolution-of-react-patterns/\">The evolution of React APIs and code reuse</a> - <em>REM</em></li>\n<li><a href=\"https://khalidabuhakmeh.com/the-privilege-of-dotnet-tooling-choices\">The Privilege of .NET Tooling Choices</a> - <em>Khalid Abuhakmeh</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2023/06/comments-are-design-tool.html\">Comments are a design tool</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://zellwk.com/blog/container-queries-best-practice/\">Best practices for container queries</a> - <em>Zell Liew</em></li>\n<li><a href=\"https://eisenbergeffect.medium.com/an-esbuild-setup-for-typescript-3b24852479fe\">An ESBuild Setup for TypeScript</a> - <em>Rob Eisenberg</em></li>\n<li><a href=\"https://dev.to/andypiper/improving-mastodon-developer-documentation-12cm\">Improving Mastodon developer documentation</a> - <em>Andy Piper</em></li>\n<li><a href=\"https://peterkellner.net/2023/06/15/Understanding-TypeScript-Type-Assertions/\">Understanding TypeScript's Powerful Type Assertions Through Practical Examples</a> - <em>Peter Kellner</em></li>\n<li><a href=\"https://www.trustbit.tech/blog/2023/6/16/css-has-amp-responsive-design\">CSS :has() &amp; Responsive Design</a> - <em>Chrystal Lantink</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/9916410c-0428-4caf-b88e-9fbae72b6a1f\">C# 12: Collection literals</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://codeopinion.com/biggest-scam-in-software-dev-best-practices/\">Biggest scam in software dev? Best Practices.</a> - <em>Derek Comartin</em></li>\n<li><a href=\"https://stackify.com/unit-test-frameworks-csharp/\">Unit Test Frameworks for C#: The Pros and Cons of the Top 3</a> - <em>Erik Dietrich</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/c24c5326-22f4-4035-9f87-a20e4814121d\">Why I like and prefer xUnit</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/57ed9867-4afd-4d02-9f35-e0941bc6f715\">LINQ: Select.Where or Where.Select?</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://blog.jetbrains.com/dotnet/2023/06/14/how-to-implement-a-soft-delete-strategy-with-entity-framework-core/\">How to Implement a Soft Delete Strategy with Entity Framework Core</a> - <em>Khalid Abuhakmeh</em></li>\n<li><a href=\"https://visualstudiomagazine.com/articles/2023/06/14/blazor-net-8-preview-5.aspx\">5 Blazor Improvements in New .NET 8 Preview 5</a> - <em>David Ramel</em></li>\n<li><a href=\"https://github.blog/2023-06-21-crafting-a-better-faster-code-view/\">Crafting a better, faster code view</a> - <em>Joshua Brown</em></li>\n<li><a href=\"https://davidwalsh.name/element-closest\">JavaScript closest</a> - <em>David Walsh</em></li>\n<li><a href=\"https://blog.ploeh.dk/2023/06/26/validation-and-business-rules/\">Validation and business rules</a> - <em>Mark Seemann</em></li>\n<li><a href=\"https://stackoverflow.blog/2023/06/26/the-hardest-part-of-building-software-is-not-coding-its-requirements/\">The hardest part of building software is not coding, it’s requirements</a> - <em>Jared Toporek</em></li>\n<li><a href=\"https://www.telerik.com/blogs/is-automated-testing-good-idea-what-should-you-keep-mind\">Is Automated Testing a Good Idea? What Should You Keep in Mind?</a> - <em>Vyom Srivastava</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.androidauthority.com/youtube-confirm-three-strikes-policy-ad-blocking-test-3340826/\">YouTube confirms three-strikes test for ad blocking, here's how it works</a> - <em>Hadlee Simons</em></li>\n<li><a href=\"https://www.techdirt.com/2023/07/05/school-decides-to-harden-security-by-giving-everyone-the-same-password/\">School Decides To Harden Security By Giving EVERYONE The Same Password</a> - <em>Tim Cushing</em></li>\n<li><a href=\"https://www.techdirt.com/2023/07/06/the-good-the-bad-and-the-incredibly-ugly-in-the-court-ruling-regarding-government-contacts-with-social-media/\">The Good, The Bad, And The Incredibly Ugly In The Court Ruling Regarding Government Contacts With Social Media</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/07/our-solar-system-possibly-survived-a-supernova-because-of-how-the-sun-formed/\">Our Solar System possibly survived a supernova because of how the Sun formed</a> - <em>Elizabeth Rayne</em></li>\n<li><a href=\"https://www.bbc.com/news/science-environment-66104822\">Climate change: World's hottest day since records began</a> - <em>Matt McGrath</em></li>\n<li><a href=\"https://www.theguardian.com/science/2023/jul/03/astronomers-observe-time-dilation-in-early-universe\">Astronomers observe time dilation in early universe</a> - <em>Ian Sample</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://timharford.com/2023/07/what-an-amusement-park-can-teach-us-about-central-banks/\">What an amusement park can teach us about central banks</a> - <em>Tim Harford</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4655207/2023/06/30/premier-hockey-federation-why-mark-walter/\">What we know about the PHF shutdown, and more on the new pro women’s hockey league</a> - <em>Hailey Salvian</em></li>\n<li><a href=\"https://defector.com/womens-hockeys-civil-war-has-ended-messily\">Women’s Hockey’s Civil War Has Ended, Messily</a> - <em>Maitreyi Anantharaman</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.econtalk.org/sam-harris-on-meditation-mindfulness-and-morality/\">EconTalk: Sam Harris on Meditation, Mindfulness, and Morality</a></li>\n<li><a href=\"https://www.jordanharbinger.com/mark-manson-giving-a-fck-about-what-really-matters/\">The Jordan Harbinger Show #791: Mark Manson | Giving a F*ck About What Really Matters</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.allthingsdistributed.com/2023/06/a-few-words-on-taking-notes.html\">A few words on taking notes</a> - <em>Dr. Werner Vogels</em></li>\n<li><a href=\"https://kottke.org/23/06/the-radical-theology-of-mr-rogers\">The Radical Theology of Mr. Rogers</a> - <em>Jason Kottke</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Device - Out of Line (feat. Serj Tankian &amp; Terry 'Geezer' Butler)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/n7CQxEIZTCU\" title=\"Device - Out of Line (feat. Serj Tankian & Terry 'Geezer' Butler)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/07/03/june-2023-check-in/",
      "url": "https://kpwags.com/posts/2023/07/03/june-2023-check-in/",
      "title": "June 2023 Check-In",
      "content_html": "\n\t\t<p>Half the year is over. This month also had me surviving another trip around the sun.</p>\n<h2>Site Updates</h2>\n<p>The one thing I've spent doing this month is moving my various lists (<a href=\"https://kpwags.com/tv\">TV</a>, <a href=\"https://kpwags.com/movies\">Movies</a>, <a href=\"https://kpwags.com/now\">Now</a>, <a href=\"https://kpwags.com/video-games\">Video Games</a>, <a href=\"https://kpwags.com/bookshelf\">Bookshelf</a>, <a href=\"https://kpwags.com/listening\">Podcasts</a>, &amp; my new <a href=\"https://kpwags.com/music\">Music</a> page) is to put the data into Notion and use it's API to load the data. This will save me the hassle of updating the JSON that currently populates it. I started with my new music page and now I've gotten TV, books, video games and the now pages all updated. Last ones are movies and podcasts.</p>\n<h2>New York City</h2>\n<p>It's become somewhat of a tradition, but Lauren and I spent a long weekend in New York City for my birthday. We seldomly go there with a plan, we just see what's going on and go from there.</p>\n<p>This year we went to MoMA to see a Georgia O'Keeffe exhibit Lauren had been wanting to see. It was interesting but I feel sadly that some of it is just lost on me.</p>\n<p>A lot of the rest of the trip was spent wandering around, checking out different restaurants, whiskey bars, and even a new brewery. Time was also spent at various parks people watching and reading. The weather was mostly good too. It wasn't too hot, it only really rained for a little bit and we were inside MoMA for the storm.</p>\n<p>Next year's birthday will be a little weird as I'll be hitting the big 4-0.</p>\n<h2>Back at it as a Goalie</h2>\n<p>The league I play goalie in has started back up, so I'm now spending more nights at the rink, this time guarding the net. I'm glad to have given my hip flexor a month and a half break, but am looking forward to getting better in net.</p>\n<p>I ended up playing a game towards the end of the month in a higher league as an emergency sub. We ended up winning the game too. The defense in front of me was a huge help and deserves most of the credit, but I felt like I played relatively well given the advanced skill level. Only helps me get better too!</p>\n<h2>Finally Starting My Sleeve</h2>\n<p>For the last 5+ years, I have been wanting to get a space-themed sleeve on my right arm. I finally found an artist to work on getting it started. My first session was last week and the work so far looks amazing. There's still plenty to go, but I can't wait for the final result.</p>\n<h1>Monthly Round Up</h1>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I only ended up running 9.3 miles. Weather hasn't been great and I've been busier with hockey.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Started back up with my 5/3/1 program. It's going well.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/the-conquering-tide-war-in-the-pacific-islands-1942-1944-ian-w-toll/8758811?ean=9780393353204\">The Conquering Tide: War in the Pacific Islands, 1942-1944</a> by Ian W. Toll</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/twilight-of-the-gods-war-in-the-western-pacific-1944-1945-ian-w-toll/13150893?ean=9780393868302\">Twilight of the Gods: War in the Western Pacific, 1944-1945</a> by Ian W. Toll</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/31\">June 2</a></li>\n<li><a href=\"https://kpwags.com/reading-log/32\">June 9</a></li>\n<li><a href=\"https://kpwags.com/reading-log/33\">June 23</a></li>\n<li><a href=\"https://kpwags.com/reading-log/34\">June 30</a></li>\n</ul>\n</li>\n<li>Wrote about:\n<ul>\n<li><a href=\"https://kpwags.com/posts/2023/06/07/further-thoughts-on-reddits-api-changes\">Reddit's API changes</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/06/12/goodbye-reddit\">Deleting my Reddit accounts</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/06/21/its-easy-to-fall-off-the-train\">Adversity with sticking to my fitness goals</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/06/24/gary-bettman-and-the-nhl-are-cowards\">Gary Bettman and the NHL making a very bad decision</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/06/27/star-trek-prodigy-what-a-bummer\">The sad end to Star Trek: Prodigy</a></li>\n</ul>\n</li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Beat <a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/games/horizon-forbidden-west/\">Horizon Forbidden West</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished rewatching <a href=\"https://www.imdb.com/title/tt2191671/\">Elementary</a></li>\n<li>Finished rewatching <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek: Voyager</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt1898069/?ref_=fn_al_tt_1\">American Gods</a></li>\n<li>Continued <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n<li>Started Season 2 of <a href=\"https://www.imdb.com/title/tt12327578/\">Star Trek: Strange New Worlds</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt2261227/\">Altered Carbon</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li>None this month</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-07-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/34/",
      "url": "https://kpwags.com/reading-log/34/",
      "title": "Reading Log - June 30, 2023 (#34)",
      "content_html": "\n\t\t<p>Got a lot this week. The NHL and Paramount+ make very poor decisions, some CSS &amp; dev tool tips, Meta's possibly joining ActivityPub and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://defector.com/the-nhl-scurries-away-from-its-pride-night-problem\">The NHL Scurries Away From Its Pride Night Problem</a></h2>\n\t<div class=\"in-depth-meta\">Tom Ley</div>\n\t<div class=\"in-depth-text\">\n<p>This is absolute garbage. I - <a href=\"https://kpwags.com/posts/2023/06/24/gary-bettman-and-the-nhl-are-cowards\">wrote more about it</a>, but needless to say, the NHL are trash for making this decision. Inclusion is incredibly important and all this does is tell an already marginalized community that they aren’t welcome. Hockey is for everyone. Everyone regardless of who they are should be able to lace up their skates and play.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://gizmodo.com/star-trek-prodigy-cancelled-no-season-2-paramount-plus-1850571256\">Star Trek: Prodigy Has Been Cancelled—and Will Be Removed From Paramount+</a></h2>\n\t<div class=\"in-depth-meta\">Cheryl Eddy</div>\n\t<div class=\"in-depth-text\">\n<p>There’s been a lot of talk about owning your purchases. This is the perfect example why.</p>\n<p>For some shows it might not matter. There have been plenty of shows I’ve been luke warm on and maybe don’t care if it disappears. But there are plenty of go-to shows that would be nice to always have access to. This is why I’ve been buying the DVD/Bluray sets of various shows over the last few years. It’s also why I’ve been buying more music. It’s nice to know that movies, shows, &amp; music I like can’t be pulled out from under me.</p>\n<p>Streaming might have it’s place, but it also has its downsides.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.bitecode.dev/p/hype-cycles\">XML is the future</a> - <em>Bite Code</em></li>\n<li><a href=\"https://code-maze.com/dotnet-efcore-records-as-model-classes/\">Should We Use Records With EF Core as Model Classes?</a> - <em>Code Maze</em></li>\n<li><a href=\"https://www.jeffgeerling.com/blog/2023/im-done-red-hat-enterprise-linux\">I'm done with Red Hat (Enterprise Linux)</a> - <em>Jeff Geerling</em></li>\n<li><a href=\"https://kilianvalkhof.com/2023/css-html/the-gotchas-of-css-nesting/\">The gotchas of CSS Nesting</a> - <em>Kilian Valkhof</em></li>\n<li><a href=\"https://evilmartians.com/chronicles/before-your-next-frontend-pull-request-use-this-checklist\">Before your next frontend pull request, use this checklist</a> - <em>Nina Torgunakova &amp; Travis Turner</em></li>\n<li><a href=\"https://1stwebdesigner.com/blockquotes-with-the-css-before-pseudo-element/\">Beautiful Blockquotes with CSS ::before Pseudo-Element</a> - <em>1WD Crew</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/06/popular-devtools-tips/\">Useful DevTools Tips and Tricks</a> - <em>Patrick Brosset</em></li>\n<li><a href=\"https://uxplanet.org/the-problem-with-bad-error-messages-and-how-to-fix-them-d6f78acc7ed9\">The Problem With Bad Error Messages (And How to Fix Them)</a> - <em>Chinwe Uzegbu</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/06/23/lawyers-who-used-chatgpt-in-lieu-of-research-must-pay-5k-alert-other-judges/\">Lawyers Who Used ChatGPT In Lieu Of Research Must Pay $5k, Alert Other Judges</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2023/06/23/new-york-city-business-owners-arent-happy-about-facial-recognition-ban-prompted-by-new-york-city-business-owner/\">New York City Business Owners Aren’t Happy About Facial Recognition Ban Prompted By New York City Business Owner</a> - <em>Tim Cushing</em></li>\n<li><a href=\"https://www.techdirt.com/2023/06/23/as-canada-passes-corrupt-link-tax-meta-says-no-more-news-links-in-canada/\">As Canada Passes Corrupt Link Tax, Meta Says No More News Links In Canada</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.wired.com/story/car-data-privacy-toyota-honda-ford/\">How Your New Car Tracks You</a> - <em>Matt Burgess</em></li>\n<li><a href=\"https://daringfireball.net/2023/06/more_on_preemptively_blocking\">More on Preemptively Blocking Facebook’s Imminent ActivityPub Entry</a> - <em>John Gruber</em></li>\n<li><a href=\"https://hub.fosstodon.org/facebook-fosstodon-fedi\">Facebook, Fosstodon &amp; The Fediverse</a> - <em>Kev Quirk</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/06/the-mars-sample-return-mission-is-starting-to-give-nasa-sticker-shock/\">NASA’s Mars Sample Return has a new price tag—and it’s colossal</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://www.npr.org/sections/health-shots/2023/06/26/1184026951/astronaut-immune-system-space-travel-health\">Why do some people get rashes in space? There's a clue in astronaut blood</a> - <em>Ari Daniel</em></li>\n<li><a href=\"https://www.washingtonpost.com/nation/2023/06/02/mars-helicopter-ingenuity-nasa-disappear/\">NASA’s Mars helicopter is somehow still flying — and playing hide-and-seek</a> - <em>Daniel Wu</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/deals/23769911/super-mario-rpg-pre-order-buy-nintendo-switch\">Super Mario RPG pre-order guide</a> - <em>Alice Newcome-Beill</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/lance-armstrong-is-suddenly-concerned-with-fairness-in-sports\">Lance Armstrong Is Suddenly Concerned With Fairness In Sports</a> - <em>Patrick Redford</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/06/26/1184420745/why-building-public-transit-in-the-us-costs-so-much\">The Indicator #1384: Why building public transit in the US costs so much</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/the-origins-of-the-feds-2-inflation-target/\">Make Me Smart #954: The origins of the Fed’s 2% inflation target</a></li>\n<li><a href=\"https://podcast.techfreedom.org/episodes/347-when-schools-scapegoat-social-media\">Tech Policy Podcast #347: When Schools Scapegoat Social Media</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/how-to-save-democratic-capitalism\">The New Bazaar: How To Save Democratic Capitalism</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://defector.com/the-countrys-most-unpleasant-moms-will-not-be-cowed-by-people-pointing-out-the-big-hitler-quote-on-their-newsletter\">The Country’s Most Unpleasant Moms Will Not Be Cowed By People Pointing Out The Big Hitler Quote On Their Newsletter</a> - <em>David Roth</em></li>\n<li><a href=\"https://hakaimagazine.com/news/the-secrets-of-ships-super-smooth-hulls/\">The Secrets of Ships’ Super Smooth Hulls</a> - <em>Chris Baraniuk</em></li>\n<li><a href=\"https://neal.fun/password-game/\">The Password Game</a> - <em>Neal Agarwal</em></li>\n<li><a href=\"https://www.wsj.com/articles/people-hire-phone-bots-to-torture-telemarketers-2dbb8457\">People Hire Phone Bots to Torture Telemarketers</a> - <em>Robert McMillan</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jason Isbell and the 400 Unit - Save the World</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HxIaZCQr_Ew\" title=\"Jason Isbell and the 400 Unit - Save the World\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/06/27/star-trek-prodigy-what-a-bummer/",
      "url": "https://kpwags.com/posts/2023/06/27/star-trek-prodigy-what-a-bummer/",
      "title": "Star Trek Prodigy...What a Bummer",
      "content_html": "\n\t\t<p>This past week Paramount announced the <a href=\"https://gizmodo.com/star-trek-prodigy-cancelled-no-season-2-paramount-plus-1850571256\">cancellation of <em>Star Trek: Prodigy</em></a>. And to make matters even worse, they have since pulled the series off of its Paramount+ service.</p>\n<p>HEY! I was watching that!</p>\n<p><em>Prodigy</em> had been on my backlog for a while, but since Paramount had given a green light to season 2, I didn't rush to watch it figuring I had time. Then the news came out last week about them cancelling it and also pulling it from the service. Saturday and Sunday Lauren and I started binging it. We got 14 episodes into its 20 episode run before time ran out. Now I'm stuck not knowing how it ended.</p>\n<p>Currently, <em>Prodigy</em> isn't on any of the streaming services, including the aforementioned Paramount+ (the service all the other <em>Star Trek</em> series are on mind you). I can buy the first 10 episodes on DVD or Blu Ray, but not the last 10. I could buy the entire series digitally on Amazon, but I don't trust Amazon to not pull the rug out from under me and remove access to my purchases. So for now, my options are to buy the first 10 episodes on a disc and hope that 11-20 comes out later, or wait and hope I can get the entire series on disc.</p>\n<p>I'm pretty much out of luck right now.</p>\n<p><em>Star Trek: Prodigy</em> was a fun show. It was targeted for kids, but still enjoyable as a <em>Star Trek</em> fan. I was bummed to hear it was cancelled after only a single season. I was pissed though, that it was pulled from the service.</p>\n<p>You know why people pirate media? This is why.</p>\n<p>It's also why I've been much more focused lately about buying the physical media for music, TV, &amp; movies. They can pull the media off of streaming services, but I'll still be able to stick the DVD or Blu Ray into my player.</p>\n<p>CBS Studios will be shopping <em>Star Trek: Prodigy</em> to other studios so hopefully someone will pick it up soon.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/06/24/gary-bettman-and-the-nhl-are-cowards/",
      "url": "https://kpwags.com/posts/2023/06/24/gary-bettman-and-the-nhl-are-cowards/",
      "title": "Gary Bettman and the NHL are Cowards",
      "content_html": "\n\t\t<p>Last year, the hubbub started when Flyers (my team sadly) defenseman Ivan Provorov decided to not skate warmups wearing the Flyers pride night jersey. Of the 20 active skaters and goalies, he was the only person to not be out there on the ice, and in the pride jersey. This week, the NHL &amp; Gary Bettman gave into the anti-LGBT hate and said that teams will not wear specialty jerseys for warmups in the 2023-24 season.</p>\n<p>It fucking sucks on a number of levels. Hockey should be for everyone. The LGBTQ community should feel welcome to come cheer their team on. They should feel welcome to lace up skates and play. They shouldn't feel marginalized nor should they feel like they don't belong.</p>\n<p>What I think many fail to understand is that the jerseys aren’t about the players. They’re about showing the fans in the building that they are all welcome. That it doesn’t matter what your gender or sexual identity is, you are welcome to come cheer your team on.</p>\n<p>Brian Burke, most recently the president of hockey operations for the Pittsburgh Penguins said it best.</p>\n<blockquote>\n<p>I repeat that I am extremely disappointed. I wish players would understand that the pride sweaters are about inclusion and welcoming everybody. A player wearing pride colors or tape isn’t endorsing a set of values or enlisting in a cause! He is saying you are welcome here. And you are. In ever single NHL building.</p>\n</blockquote>\n<p>This is sadly another step back and Gary Bettman and the NHL are cowards. They should be ashamed of themselves and it makes me incredibly sad and angry to be a fan of this sport.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/33/",
      "url": "https://kpwags.com/reading-log/33/",
      "title": "Reading Log - June 23, 2023 (#33)",
      "content_html": "\n\t\t<p>Two weeks worth of articles this week as I was in New York City last weekend. This log has a bunch of news out of the Microsoft-Activision acquisition, Reddit following the path of Twitter, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://marcoheine.com/blog/best-tech-stack-for-web-development-in-2023\">The best tech stack for web development in 2023</a></h2>\n\t<div class=\"in-depth-meta\">Marco Heine</div>\n\t<div class=\"in-depth-text\">\n<p>I completely agree with Marco here.</p>\n<blockquote><p>The tech you use doesn’t matter. What matters is that you satisfy the needs of your users. Your users don’t care what tech you use, but they do care if your website or application works as intended and if they can achieve the task or find the information they came for.</p></blockquote>\n<p>Use the tech stack that works for you. There’s no one tech stack to rule them all. Use what makes sense for you. Use what allows you to create the features and the desired user experience for your customers in a fast and efficient manner.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://jkone27-3876.medium.com/f-is-the-net-rust-62f71f8dae41\">F# is the .NET Rust</a> - <em>jkone27</em></li>\n<li><a href=\"https://spin.atomicobject.com/2023/06/05/javascript-backtick-strings-wrong/\">JavaScript’s Backtick Strings are Likely the Wrong Tool for Your Job</a> - <em>Mattie Behrens</em></li>\n<li><a href=\"https://nextjs.org/blog/june-2023-update\">Next.js App Router Update</a> - <em>Delba de Oliveira &amp; Lee Robinson</em></li>\n<li><a href=\"https://www.viget.com/articles/overcoming-anxiety-in-code-reviews/\">Overcoming Anxiety in Code Reviews</a> - <em>Melissa Piper</em></li>\n<li><a href=\"https://www.zachleat.com/web/eleventy-side-project/\">The Next Phase of Eleventy: Return of the Side Project</a> - <em>Zach Leatherman</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/odni-commercially-available-information-report/\">The US Is Openly Stockpiling Dirt on All Its Citizens</a> - <em>Dell Cameron</em></li>\n<li><a href=\"https://timharford.com/2023/06/what-neo-luddites-get-right-and-wrong-about-big-tech/\">What neo-Luddites get right – and wrong – about Big Tech</a> - <em>Tim Harford</em></li>\n<li><a href=\"https://www.theverge.com/2023/6/21/23768266/dpreview-acquisition-gear-patrol-camera-photography-reviews\">DPReview will live, actually — under new ownership</a> - <em>Jess Weatherbed</em></li>\n<li><a href=\"https://www.techdirt.com/2023/06/22/important-and-needed-new-report-scaling-trust-on-the-web/\">Important And Needed New Report: Scaling Trust On The Web</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.theverge.com/23763482/municipal-broadband-biden-internet-funds-telecom-lobbying\">The government is helping Big Telecom squeeze out city-run broadband</a> - <em>Sean Hollister</em></li>\n<li><a href=\"https://www.techdirt.com/2023/06/21/reddit-experiments-with-removing-mods-blocking-attempts-to-switch-subs-to-nsfw/\">Reddit Experiments With Removing Mods, Blocking Attempts To Switch Subs To NSFW</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/23758235/star-wars-outlaws-gameplay-trailer-ubisoft-forward-2023\">Star Wars Outlaws gameplay looks like Grand Theft Auto: Tatooine</a> - <em>Ash Parrish</em></li>\n<li><a href=\"https://www.theverge.com/2023/6/12/23758194/ftc-microsoft-activision-blizzard-complaint-block-acquisition-call-of-duty\">FTC files to block Microsoft from buying Activision Blizzard</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://retrododo.com/mcdonalds-grimaces-birthday/\">McDonald’s Just Dropped A Brand New Game Boy Game In 2023</a> - <em>Anthony Wallace</em></li>\n<li><a href=\"https://arstechnica.com/gaming/2023/06/ftc-xbox-exclusive-starfield-is-powerful-evidence-against-activision-deal/\">FTC: Xbox-exclusive Starfield is “powerful evidence” against Activision deal</a> - <em>Kyle Orland</em></li>\n<li><a href=\"https://arstechnica.com/gaming/2023/06/missing-titanic-sub-isnt-the-first-to-use-game-controls-for-heavy-machinery/\">Beyond missing Titanic sub, handheld gamepads are a common military interface</a> - <em>Kyle Orland</em></li>\n<li><a href=\"https://arstechnica.com/gaming/2023/06/playstation-chief-privately-dismissed-concerns-of-xbox-exclusive-call-of-duty/\">Private email shows PlayStation chief unworried about Xbox-exclusive Call of Duty</a> - <em>Kyle Orland</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/23768886/spotify-podcast-strategy-mistakes-joe-rogan-exclusives-trevor-noah\">Spotify’s podcast plan is going off the rails</a> - <em>Amrita Khalid</em></li>\n<li><a href=\"https://www.theverge.com/2023/6/21/23768372/ftc-amazon-lawsuit-prime-dark-patterns-subscriptions\">FTC sues Amazon for tricking customers into signing up for Prime</a> - <em>Makena Kelly</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/6/22/23769833/heatwaves-electricity-grids-power-outages-across-world\">Heatwaves are stressing out power grids all over the world</a> - <em>Justine Calma</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://www.theatlantic.com/magazine/archive/2023/07/baseball-mlb-rule-changes-2023-pitch-clock/674291/\">Moneyball Broke Baseball</a> - <em>Mark Leibovich</em></li>\n<li><a href=\"https://defector.com/the-athletic-decides-local-news-doesnt-pay\">The Athletic Decides Local News Doesn’t Pay</a> - <em>Lauren Theisen</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/06/13/techdirt-podcast-episode-354-decentralizing-content-moderation/\">Techdirt Podcast #354: Decentralizing Content Moderation</a></li>\n<li><a href=\"http://www.strongerbyscience.com/podcast-episode-114/\">Stronger by Science #114: Sleep, Health, And Fitness</a></li>\n<li><a href=\"https://www.techdirt.com/2023/06/22/techdirt-podcast-episode-355-the-reddit-meltdown/\">Techdirt Podcast #355: The Reddit Meltdown</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/six-on-six-basketball/\">99% Invisible #523: Six-on-Six Basketball</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1831\">.NET Rocks #1831: Clean Architecture in 2023 with Steven Smith</a></li>\n<li><a href=\"https://www.wbur.org/onpoint/2023/06/23/are-return-to-office-mandates-backfiring\">On Point: Are return-to-office mandates backfiring?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/06/21/1183194069/jason-isbell-weathervanes-profile\">The rebuilt heart of Jason Isbell</a> - <em>Jefferson Cowie</em></li>\n<li><a href=\"https://orionmagazine.org/article/edmund-fitzgerald-shipwreck-lake-superior/\">The Day the Lake Took the Edmund Fitzgerald</a> - <em>Martha Lundin</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Lottery Winners - Letter to Myself</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/fz3Y2O-m5-w\" title=\"The Lottery Winners - Letter to Myself\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/06/21/its-easy-to-fall-off-the-train/",
      "url": "https://kpwags.com/posts/2023/06/21/its-easy-to-fall-off-the-train/",
      "title": "It&#39;s Easy to Fall Off the Train",
      "content_html": "\n\t\t<p>I’ve been pretty good with my fitness to start the year. For the first 3 months of the year I worked out in some fashion just about every day. Then I tweaked my hip flexor and it came crashing down.</p>\n<p>I know it’s the age-old trope about having a hard time sticking to fitness and diet goals, but it’s amazing how even with months of doing well, it’s easy to get tripped up. The hip flexor issue prevented me from running and some of lifting routines, so I slowed to give it time to heal. Now that it’s back to normal and I’m pain-free, I haven’t been able to quite get back into my previous routine.</p>\n<p>It takes a lot of determination and self-control to keep to fitness routines so props to those who can do it. Off days and days to let loose are of course never a bad thing, just gotta be careful that the off days don’t become the new routine.</p>\n<p>I’ll get there.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/06/12/goodbye-reddit/",
      "url": "https://kpwags.com/posts/2023/06/12/goodbye-reddit/",
      "title": "Goodbye Reddit!",
      "content_html": "\n\t\t<p>Well, it’s official...I deleted my two Reddit accounts.</p>\n<p>Given the responses from /u/spez (Steve Huffman) in the AMA, it’s obvious the site’s ownership doesn’t care. Even if they do revert their API pricing changes, I’m done. I don’t trust them and I have better things I can spend my time doing.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/32/",
      "url": "https://kpwags.com/reading-log/32/",
      "title": "Reading Log - June 9, 2023 (#32)",
      "content_html": "\n\t\t<p>This week I read about Reddit’s bullshit and CEOs screwing over employees.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.wsj.com/articles/a-new-ceo-says-employees-cant-work-remotely-after-all-and-they-revolt-81135399\">A New CEO Says Employees Can’t Work Remotely After All, and They Revolt</a></h2>\n\t<div class=\"in-depth-meta\">Peter Grant</div>\n\t<div class=\"in-depth-text\">\n<blockquote><p>In an email to employees viewed by the Journal, Vargas explained his decision, saying he believed in the importance of in-office work for “collaboration, creativity and innovation.”</p></blockquote>\n<p>I call bullshit.</p>\n<p>I’ve been working remotely for 3 years now and I feel like I collaborate with my team well and we produce great work. I also feel like my productivity has only increased.</p>\n<p>There are some people who like working in the office, there’s nothing wrong with that. Not everyone feels that way and many are just as productive working from home, some probably more so from the lack of constant interruptions from the “collaboration”.</p>\n<p>What this feels like is companies trying to justify their middle managers and office leases. Meanwhile their workers, who they likely need most, suffer.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://khalidabuhakmeh.com/xunit-tests-jetbrains-rider-and-counting-until-failure\">XUnit Tests, JetBrains Rider, and Counting Until Failure</a> - <em>Khalid Abuhakmeh</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/single-line-comments-in-css/\">Single Line Comments in CSS</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/throwaway-browser-defaults/\">Browser Defaults We Throw Away</a> - <em>Jim Nielsen</em></li>\n<li><a href=\"https://developer.chrome.com/blog/introducing-popover-api/\">Introducing the popover API</a> - <em>Una Kravets</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/gratitude-for-dont-break-the-web/\">Gratitude For a Web That Tries Not to Break</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://adactio.com/journal/20181\">Nailspotting</a> - <em>Jeremy Keith</em></li>\n<li><a href=\"https://9to5mac.com/2023/05/31/top-reason-android-users-switch-to-iphone/\">This is the top reason Android users switch to iPhone – and it’s not blue bubbles</a> - <em>Michael Potluck</em></li>\n<li><a href=\"https://www.texasmonthly.com/news-politics/texas-tweetbot-developers-fighting-twitter/\">Two Texas Indie Developers Made It Big on Twitter a Decade Ago. Now They’re Fighting It.</a> - <em>Andrew Logan</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2023/06/blatant-tech-frauds-run-amok-on-the-biggest-online-marketplaces/\">Blatant tech frauds run amok on the biggest online marketplaces</a> - <em>Scharon Harding</em></li>\n<li><a href=\"https://blog.tomayac.com/2023/06/07/web-apps-on-macos-sonoma-14-beta/\">Web Apps on MacOS Sonoma Beta</a> - <em>Thomas Steiner</em></li>\n<li><a href=\"https://daringfireball.net/2023/06/first_impressions_of_vision_pro_and_visionos\">First Impressions of Vision Pro and VisionOS</a> - <em>John Gruber</em></li>\n<li><a href=\"https://www.techdirt.com/2023/06/02/ai-will-never-fit-into-a-licensing-regime/\">AI Will Never Fit Into A Licensing Regime</a> - <em>Matthew Lane</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2023/06/reddits-plan-to-kill-third-party-apps-sparks-widespread-protests/\">Reddit’s plan to kill third-party apps sparks widespread protests</a> - <em>Ron Amadeo</em></li>\n<li><a href=\"https://old.reddit.com/r/apolloapp/comments/144f6xm/apollo_will_close_down_on_june_30th_reddits/\">Apollo will Close June 30</a> - <em>Christian Selig</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/space/2023/06/to-keep-starliner-flying-boeing-must-make-some-hard-choices/\">To keep Starliner flying, Boeing must make some hard choices</a> - <em>Eric Berger</em></li>\n<li><a href=\"https://www.npr.org/2023/05/30/1178489879/birding-bird-watching-urban-city-migratory\">Heads up! Stunning birds are all around us, even in dense cities</a> - <em>Melissa Block</em></li>\n<li><a href=\"https://www.theguardian.com/books/2023/jun/05/the-big-idea-are-cats-really-domesticated\">The big idea: Are cats really domesticated?</a> - <em>Jonathan B. Losos</em></li>\n</ul>\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.dotnetrocks.com/details/1830\">.NET Rocks #1830: Sustainable Open Source with Sarah Novotny</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.economist.com/briefing/2023/05/30/its-not-just-a-fiscal-fiasco-greying-economies-also-innovate-less\">It’s Not Just a Fiscal Fiasco: Greying Economies Also Innovate Less</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Generation Loss</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Ucvf8CwHeTg\" title=\"Spanish Love Songs - Generation Loss\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/06/07/further-thoughts-on-reddits-api-changes/",
      "url": "https://kpwags.com/posts/2023/06/07/further-thoughts-on-reddits-api-changes/",
      "title": "Further Thoughts on Reddit&#39;s API Changes",
      "content_html": "\n\t\t<p>I mentioned in my last <a href=\"https://kpwags.com/reading-log/31\">reading log</a> that Reddit looked to be making changes to its API pricing and wanted to put down some more thoughts on the matter.</p>\n<p>Reddit recently announced that they were going to <a href=\"https://www.theverge.com/2023/5/31/23743993/reddit-apollo-client-api-cost\">significantly increase their pricing for use of the API</a>. This came out after Christian Selig had a meeting with Reddit. Selig is the developer behind my preferred way to browse Reddit, <a href=\"https://apps.apple.com/us/app/apollo-for-reddit/id979274575\">Apollo</a> for iOS. The changes mean that he will be facing a potential $20 million yearly bill. Him and other Reddit app developers will be facing some hard decisions.</p>\n<p>The issue there is that Reddit is alienating many of its users. I’ve tried their mobile app. To say that it’s a subpar experience probably gives it too much credit. Their website redesign is even worse. It’s slow and often lags for me. I still use old.reddit.com when I browse on the web. Because of this, I use Apollo as my primary Reddit experience.</p>\n<p>And while I don’t run or moderate any subreddits, I’ve been reading that the moderation tools Reddit provides on their mobile apps makes moderating difficult. Many mods rely on the 3rd party apps to help them moderate their subreddits. <a href=\"https://old.reddit.com/r/Blind/comments/13zr8h2/reddits_recently_announced_api_changes_and_the/\">/r/blind also needs 3rd party apps since the official app is awful with regards to accessibility</a>.</p>\n<p>Now look, Reddit is free to charge whatever they like for use of their API, it’s their platform, they make the rules. I also wouldn’t expect them to make it free. It also doesn’t sound like Selig is unwilling to pay. The price is just extraordinarily high and unsustainable for the 3rd party app ecosystem. If that is the way that Reddit wants to go about doing things, then I guess there’s not much that we can do.</p>\n<p>They’re going public with an IPO later this year and they’re probably figuring they need to squeeze every last cent out of its users through ads and tracking. 3rd party apps eat into this, so the easiest thing to do is to get rid of them. There already seems to be some <a href=\"https://news.ycombinator.com/item?id=36192312\">funny business</a> going on with some of the <a href=\"https://arstechnica.com/gadgets/2023/06/reddits-plan-to-kill-third-party-apps-sparks-widespread-protests/\">subreddit protsests</a>.</p>\n<p>At the end of the day, I don’t know how much of Reddit’s user base is like me and consumes Reddit through apps like Apollo. But I know I’m not alone, and I know there are plenty that might NEED accessible apps to even make use of the platform. If this does indeed go through and apps like Apollo go the way of the dodo bird, I’ll likely be leaving Reddit as well.</p>\n<p>With that said, like with the loss of Twitter, I’ll need more interesting RSS feeds!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/06/02/may-check-in/",
      "url": "https://kpwags.com/posts/2023/06/02/may-check-in/",
      "title": "May Check-In",
      "content_html": "\n\t\t<p>May was a bit of a frustrating month, but I can’t fully point my finger at why exactly. I ended up tweaking a muscle early in the month that limited my physical activities, but not much else really jumps out at me as to why the month felt off.</p>\n<h2>Injury Issues</h2>\n<p>My left hip flexor tends to be relatively tight. I need to stretch it more, but keep forgetting, and never really get around to it. It’s led to some painful days following hockey games, particularly games where I play as the goalie. Normally, the pain goes away after a day or two and I go back to normal. Early in the month I was in a battle for the puck in the corner and ended up falling awkwardly. Queue a 3-4 week healing process. It’s now June and it finally seems to be back to normal.</p>\n<p>Just stunk since I couldn’t run or lift like I normally like to. Funny thing is that hockey didn’t bother me too much, though I haven’t been playing in net since we’re between seasons in that league.</p>\n<p>I just need to remember to stretch, but if it keeps happening, a visit to an ortho might be in order.</p>\n<h2>It’s No Wonder I Never Finish a Side Project</h2>\n<p>It’s no wonder I never finish a side project, I currently started playing around with a new side project.</p>\n<p>I’ve been frustrated with the website my hockey league uses to manage my teams and what not. The site is absolutely awful and I know teammates and other team captains and players hate the system.</p>\n<p>I’ve been playing around with how I might go about building a similar system that has a much better UI and is much more user-friendly. I have no idea where I’m going to go with it, but why not I guess.</p>\n<h2>Everything Else</h2>\n<p>Not much else has been going on, it’s been mostly quiet. My wife and I went to a nice whiskey pairing dinner, a Gaslight Anthem concert, and even a Kentucky Derby party. But other than that, it’s generally been nice quiet evenings at home. I’ve been spending a lot of evenings out on my porch since it’s been so nice out. Not looking forward to the hot and humid weather that’s going to mess that all up.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Given the hip flexor, I only managed 10.26 miles.</li>\n<li><strong>Biking:</strong> I took a 25 mile bike ride early in the month...so progress?</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Still doing the 5/3/1 program, but because of the hip flexor, I’ve slowed some.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Continuing</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/the-conquering-tide-war-in-the-pacific-islands-1942-1944-ian-w-toll/8758811?ean=9780393353204\">The Conquering Tide: War in the Pacific Islands, 1942-1944</a> by Ian W. Toll</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/27\">May 5 (#27)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/28\">May 12 (#28)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/29\">May 19 (#29)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/30\">May 26 (#30)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/05/05/calming-down-after-hockey\">calming down after hockey games</a></li>\n<li>Wrote about the <a href=\"https://kpwags.com/posts/2023/05/21/ian-w-tolls-pacific-war-trilogy\">Pacific War trilogy I’m reading</a></li>\n<li>Wrote about having now been <a href=\"https://kpwags.com/posts/2023/05/26/10-years-of-playing-hockey\">playing hockey for 10 years</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li><a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a> - Really jumped back into this. I’m now at 29 hours played and have been having a lot of fun.</li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek Voyager</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt2191671/\">Elementary</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt1898069/?ref_=fn_al_tt_1\">American Gods</a></li>\n<li>2023 Stanley Cup Playoffs</li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt0472062/\">Charlie Wilson’s War</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/31/",
      "url": "https://kpwags.com/reading-log/31/",
      "title": "Reading Log - June 2, 2023 (#31)",
      "content_html": "\n\t\t<p>A little light this week, but some changes to the Reddit API look to be coming, AI might not be the job killer many seem to think it is and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/2023/5/31/23743993/reddit-apollo-client-api-cost\">A Developer Says Reddit Could Charge Him $20 Million a Year to Keep His App Working</a></h2>\n\t<div class=\"in-depth-meta\">Emma Roth</div>\n\t<div class=\"in-depth-text\">\n<p>I’m not a fan of the new Reddit website and still use <a href=\"http://old.reddit.com/\">old.reddit.com</a> as my way to view Reddit. Their mobile website and app are trash so Apollo on my iPad as been my Reddit gateway more often than not. If Reddit kills it off…my time on Reddit will probably crater (which to be honest, is probably not a bad thing).</p>\n<p>It is sad that Reddit, following in Twitter’s footsteps looks to be taking the route of killing off 3rd party apps that help make Reddit what it is.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://codeopinion.com/underrated-skill-as-a-developer/\">Underrated skill as a developer</a> - <em>Derek Comartin</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2023/05/software-design-private-by-default.html\">Software Design - Private by default</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://timleland.com/embracing-failure-the-journey-of-a-builder-and-maker/\">Embracing Failure: The Journey of a Builder and Maker</a> - <em>Tim Leland</em></li>\n<li><a href=\"https://www.claudiobernasconi.ch/2023/05/24/17-amazing-community-packages-for-net-developers/\">17 Amazing Community Packages for .NET Developers</a> - <em>Claudio Bernasconi</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/31/Studies%20Suggest%20That%20Rather%20Than%20Killing%20Jobs,%20AI%20Could%20Revive%20The%20Middle%20Class%0A\">Studies Suggest That Rather Than Killing Jobs, AI Could Revive The Middle Class</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2023/05/31/onlyfans-throws-the-open-internet-under-the-bus/\">OnlyFans Throws The Open Internet Under The Bus</a> - <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/wheres-the-lab-grown-beef/\">Make Me Smart: Where’s the (Lab-Grown) Meat?</a></li>\n<li><a href=\"https://www.smashingsecurity.com/324-zip-domains-ai-lies-and-did-social-media-inflame-a-riot/\">Smashing Security #324: .ZIP domains, AI lies, and did social media inflame a riot?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.cjr.org/analysis/defector-last-good-website.php\">”The Last Good Website”</a> - <em>Danny Funt</em></li>\n<li><a href=\"https://stackoverflow.blog/2023/05/22/modern-work-requires-attention-constant-alerts-steal-it/\">Modern work requires attention. Constant alerts steal it</a> - <em>Ryan Donovan</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>blink-182 - Anthem Part 2</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/s_hzK4DkNSI\" title=\"blink-182 - Anthem Part 2\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-06-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/05/26/10-years-of-playing-hockey/",
      "url": "https://kpwags.com/posts/2023/05/26/10-years-of-playing-hockey/",
      "title": "10 Years of Playing Hockey",
      "content_html": "\n\t\t<p>It was 10 years ago when I ended up starting to play ice hockey. I had tried playing baseball again but ended up hurting my shoulder so I opted for trying something new.</p>\n<p>For 2 years after college I tried getting back into playing baseball. I played for an adult league in Philly for 2 seasons and had some fun. In the process I ended up hurting my shoulder which led me to physical therapy.</p>\n<p>I had been getting into watching and following hockey more at that point, and had considered trying it, but nothing ever came of it. My physical therapist had different ideas. He mentioned a local rink had an instructional league where they have 6 weeks of instruction followed by 10 weeks of games (playing once a week every Monday). He happened to mention it the Monday before the next season started. I thought about it and decided I was in.</p>\n<p>I filled out the form, wrote a check and asked my fiancé (now wife) to drop the form and check off at the rink since she worked nearby. Then Thursday after work I went over to TotalHockey and bought all the gear, and Monday I was on the ice for the very first time having never played hockey or even really skated before.</p>\n<p>10 years later, I’m playing on 3 teams, playing every position, getting some exercise in, and having a lot of fun. I captain a team in one men’s league, play on another, and am still in the instructional league, though now as a goalie rather than a skater.</p>\n<p>I’ve been thoroughly enjoying playing and if I hadn’t had the physical therapist I had, who knows if I would have ever started playing.</p>\n<p>There are so many hockey players who have been playing since they could barely walk and there I was, lacing up my skates for the first time approaching my 29th birthday. It just goes to show that it’s never too late to start or learn something new!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/30/",
      "url": "https://kpwags.com/reading-log/30/",
      "title": "Reading Log - May 26, 2023 (#30)",
      "content_html": "\n\t\t<p>Wow, 30 issues now of my reading log in its current format! This week I read about Instagram joining the fediverse, Google’s AMP disaster, the importance of core functionality working without JavaScript, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/2023/5/19/23730070/instagram-twitter-app-competitor-leak\">This is Instagram’s new Twitter competitor</a></h2>\n\t<div class=\"in-depth-meta\">Jay Peters</div>\n\t<div class=\"in-depth-text\">\n<p>I deleted my Facebook &amp; Instagram accounts years ago and have never looked back. I’ve also promised to never create an account on a platform Facebook, now Meta owns. I don’t intend to change that. With that said, I like that they seem to be planning on some form of decentralization and tying it into Mastodon/ActivityPub.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://blog.pragmaticengineer.com/critical-thinking/\">Is Critical Thinking the Most Important Skill for Software Engineers?</a></h2>\n\t<div class=\"in-depth-meta\">Gergely Orosz</div>\n\t<div class=\"in-depth-text\">\n<p>This struck home for me.</p>\n<blockquote><p>I can answer why I felt uneasy about asking what a term like idempotency means: it’s because I was admitting that I don’t understand a part of tech jargon. And, to be fair, such admission implies that my professional experience or skills are below the person who knows what this jargon means, and knows how to use it.</p></blockquote>\n<p>In work, it can be hard to admit you don’t know certain terminology, but good teams will not look down on people for asking for clarifications and foster an open environment for everyone to feel comfortable asking questions.</p>\n<p>Gergely also had a good point about the thought leaders that have popped up in the industry.</p>\n<blockquote><p>These people - like myself - share opinions, observations, and views. Many less experienced engineers take these views at face value, assuming as many other people are paying attention to this person, this “famous” person must be right.</p></blockquote>\n<p>It reminds me a lot of the trope “I read it on the internet, so it must be true!”. Some thought leaders are where they’re at because they have studied and used their language and tooling for a long time and know their stuff. Others might not be as experienced. But there’s always a lot of nuance with what they might be pushing. Is it right for you? Despite popular opinion, the true response often comes down to two simple words: “It depends”.</p>\n<p>The best advice really comes down to digging in and asking questions about why people are recommending what they’re recommending.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://adactio.com/journal/20113\">Read-only web apps</a></h2>\n\t<div class=\"in-depth-meta\">Jeremy Keith</div>\n\t<div class=\"in-depth-text\">\n<p>I completely agree with Jeremy here.</p>\n<blockquote>\n<p>The most cartoonish misrepresentation of progressive enhancement is that it means making everything work without JavaScript.</p>\n<p>No. Progressive enhancement means making sure your core functionality works without JavaScript.</p>\n</blockquote>\n<p>My old site on Jekyll worked well with Javascript disabled. There wasn’t much that JS was needed for and most of it was “niceties” rather than key functionality. You could still read all my blog posts and navigate around. I feel like that’s important. I’ve tried to do the same thing on my current blog with Next.js.</p>\n<p>I’ve gone back and forth between having JavaScript disabled and not disabled in the browser and while I certainly wouldn’t expect fancier web apps to work without JavaScript, I SHOULD expect that I should be able to read blog posts on a blog.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/23711172/google-amp-accelerated-mobile-pages-search-publishers-lawsuit\">Speed Trap</a></h2>\n\t<div class=\"in-depth-meta\">David Pierce</div>\n\t<div class=\"in-depth-text\">\n<p>I’ll be completely honest and admit that I didn’t know all that much background on the history of AMP and why it was bad as it was. Reading this was enlightening and there were some quotes that stuck out to me.</p>\n<blockquote><p>“If Google said, ‘you must have your homepage colored bright pink on Tuesdays to be the result in Google,’ everybody would do it, because that’s what they need to do to survive,” says Terence Eden, a web standards expert and a former member of the Google AMP Advisory Committee.</p></blockquote>\n<p>This only highlights the power Google has. Media outlets are so dependent on Google that whether they like it or not, they have to play by Google’s rules, no matter how crazy they are, or how often they change them.</p>\n<blockquote><p>As long as anyone played the game, everybody had to. “Google’s strategy is always to create prisoner’s dilemmas that it controls — to create a system such that if only one person defects, then they win,” a former media executive says. As long as anyone was willing to use AMP and get into that carousel, everyone else had to do the same or risk being left out.</p></blockquote>\n<p>This goes back to - <a href=\"https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review\">Chokepoint Capitalism</a>, they have them wrapped up so tightly that they’re stuck.</p>\n<blockquote><p>“You meet with a Facebook person and you see in their eyes they’re psychotic,” says one media executive who’s dealt with all the major platforms. “The Apple person kind of listens but then does what it wants to do. The Google person honestly thinks what they’re doing is the best thing.”</p></blockquote>\n<p>I laughed out loud a little bit there.</p>\n<p>The one thing I do remember is Google touting AMP for is for speed. And given how bad the mobile experience on sites can be, I can’t say I don’t understand. I still hold that a well designed site can run beautifully and smoothly on mobile, you just need to design and build it the right way which might not be quite as “profitable”. It seems I’m not the only one with that thought.</p>\n<blockquote><p>AMP, it turned out, wasn’t even that fast. Multiple publishers ran internal tests and found they were able to make pages that loaded more quickly than AMP pages, so long as they were able to rein in the ad load and extra trackers.</p></blockquote>\n<p>At the end of the day, it’s a good thing that we seem to be moving away from AMP.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/typescript/announcing-typescript-5-1-rc/\">Announcing TypeScript 5.1 RC</a> - <em>Daniel Rosenwasser</em></li>\n<li><a href=\"https://webkit.org/blog/14154/webkit-features-in-safari-16-5/\">WebKit Features in Safari 16.5</a> - <em>Jen Simmons</em></li>\n<li><a href=\"https://davidwalsh.name/array-group\">JavaScript Array Group</a> - <em>David Walsh</em></li>\n<li><a href=\"https://michaelscodingspot.com/developer-tools/\">My 2023 C# Software Developer Tool List</a> - <em>Michael Shplit</em></li>\n<li><a href=\"https://www.claudiobernasconi.ch/2023/05/20/asp-net-core-dotnet-8-preview/\">The Future of ASP.NET Core: .NET 8 Feature Preview</a> - <em>Claudio Bernasconi</em></li>\n<li><a href=\"https://raygun.com/blog/c-sharp-logging-best-practices/\">C# logging: Best practices in 2023 with examples and tools</a> - <em>Shane Duggan</em></li>\n<li><a href=\"https://jonhilton.net/good-blazor-components/\">Good (Blazor) Components are... ?</a> - <em>Jon Hilton</em></li>\n<li><a href=\"https://www.phoronix.com/news/Podman-Desktop-1.0\">Podman Desktop 1.0 Released As An Alternative To Docker Desktop</a> - <em>Michael Larabel</em></li>\n<li><a href=\"https://changelog.com/posts/still-no-silver-bullet\">There's still no silver bullet</a> - <em>Jerod Santo</em></li>\n<li><a href=\"https://daverupert.com/2023/05/markdown-images-anti-pattern/\">Markdown images are an anti-pattern</a> - <em>Dave Rupert</em></li>\n<li><a href=\"https://timdeschryver.dev/blog/refactor-your-net-http-clients-to-typed-http-clients\">Refactor your .NET HTTP Clients to Typed HTTP Clients</a> - <em>Tim Deschryver</em></li>\n<li><a href=\"https://web.dev/6-css-snippets-every-front-end-developer-should-know-in-2023/\">6 CSS snippets every front-end developer should know in 2023</a> - <em>Adam Argyle</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://techcrunch.com/2023/05/23/meta-sells-giphy-to-shutterstock-for-53m-after-uk-divestment-order/\">Following UK antitrust order, Meta sells Giphy to Shutterstock for $53M after buying it for $400M</a> - <em>Paul Sawers</em></li>\n<li><a href=\"https://chriscoyier.net/2023/04/21/the-secret-list-of-websites/\">“The Secret List of Websites”</a> - <em>Chris Coyier</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/5/19/23729711/microsoft-cmo-staff-stock-price-pay\">Microsoft exec tells employees to improve its stock performance in lieu of raises</a> - <em>Emma Roth</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/05/20/1177056829/titanic-scan\">A remarkable new view of the Titanic shipwreck is here, thanks to deep-sea mappers</a> - <em>Rachel Treisman</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://podcasts.apple.com/us/podcast/knowing-when-to-quit-with-world-poker-champion-annie-duke/id1346314086?i=1000591027157\">WorkLife with Adam Grant: Knowing When to Quit with World Poker Champion Annie Duke</a></li>\n<li><a href=\"https://www.npr.org/2023/05/23/1177772441/is-ai-a-job-killer-or-an-up-skiller\">The Indicator: Is AI a job-killer or an up-skiller?</a></li>\n<li><a href=\"https://www.marketplace.org/shows/make-me-smart/the-pandemics-panic-neglect-cycle-isnt-over/\">Make Me Smart #930: The pandemic’s panic-neglect cycle isn’t over</a></li>\n<li><a href=\"https://unhandledexceptionpodcast.com/posts/0048-isaaclevin/\">The Unhandled Exception #48: Coffee and Code - with Isaac Levin</a></li>\n<li><a href=\"https://www.marketplace.org/shows/marketplace/whats-really-at-the-heart-of-the-debt-limit-debate/\">Marketplace: What’s really at the heart of the debt limit debate?</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Pedal Down</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bH5-6dQcgmM\" title=\"Dave Hause - Pedal Down\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/05/21/ian-w-tolls-pacific-war-trilogy/",
      "url": "https://kpwags.com/posts/2023/05/21/ian-w-tolls-pacific-war-trilogy/",
      "title": "Ian W. Toll&#39;s Pacific War Trilogy",
      "content_html": "\n\t\t<p>Over the course of the last month, I’ve been reading a three book series written by Ian W. Toll on the history of World War II in the Pacific. I’m currently on the second book and I can’t recommend it enough.</p>\n<p>I heard about this series on a <a href=\"https://www.youtube.com/watch?v=8cE5-Ze6EcU\">Hardcore History Addendum Episode</a> and it dawned on me that while I knew quite a bit about the war in Europe against Nazi Germany, I didn’t know a great deal about the war in the Pacific Ocean against Japan. The interview was interesting and it inspired me to buy the three books and add them to my reading list.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/H1tpI2jrK2-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/H1tpI2jrK2-1200.gif 1200w\" /><img alt=\"The three massive books in Ian W. Toll's Pacific War Trilogy\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/H1tpI2jrK2-1200.jpeg\" width=\"1200\" height=\"978\" /></picture></p>\n<p>If you’re interested in history, they’ve been a great read so far. Toll does a great job talking and explaining what happened and who the characters involved were. He does it in such a way that is not dull, but informative and interesting. Some books on history can be dull and sometimes dry, these books are not one of them.</p>\n<p>Here are the links to buy the books on bookshop.org.</p>\n<ul>\n<li>Book 1: <a href=\"https://bookshop.org/p/books/pacific-crucible-war-at-sea-in-the-pacific-1941-1942-ian-w-toll/8754662?ean=9780393343410\">Pacific Crucible</a></li>\n<li>Book 2: <a href=\"https://bookshop.org/p/books/the-conquering-tide-war-in-the-pacific-islands-1942-1944-ian-w-toll/8758811?ean=9780393353204\">The Conquering Tide</a></li>\n<li>Book 3: <a href=\"https://bookshop.org/p/books/twilight-of-the-gods-war-in-the-western-pacific-1944-1945-ian-w-toll/13150893?ean=9780393868302\">Twilight of the Gods</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/29/",
      "url": "https://kpwags.com/reading-log/29/",
      "title": "Reading Log - May 19, 2023 (#29)",
      "content_html": "\n\t\t<p>I’ve finally started going through all my RSS feeds, so there’s a lot to this week’s log. The topics are all over the place from the IRS doing what it should have done from the beginning, to a boneheaded decision to add some new top level domains, to the US Supreme Court saving Section 230.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.npr.org/2023/05/16/1176417594/irs-taxes-filing-turbotax-intuit-tax-prep\">The IRS is building its own online tax filing system. Tax-prep companies aren't happy</a></h2>\n\t<div class=\"in-depth-meta\">Scott Horsley</div>\n\t<div class=\"in-depth-text\">\n<p>The IRS should have done this from the beginning but the tax prep companies lobbied hard against it. Their greed in hiding the free options is who they have to blame for this. Here’s hoping they follow through for the 2023 tax season.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.infoq.com/news/2023/04/csharp-12-preview/\">C# 12: Preview of Three New Features Coming</a> - <em>Almir Vuk</em></li>\n<li><a href=\"https://nodogmablog.bryanhogan.net/2023/05/sending-mediatr-notifications-immediately-after-saving-an-entity-with-entity-framework-core/\">Sending MediatR Notifications Immediately After Saving an Entity with Entity Framework Core</a> - <em>Bryan Hogan</em></li>\n<li><a href=\"https://csharp.christiannagel.com/2023/05/03/minimal-api-growing-with-net-7/\">Minimal API growing with .NET 7</a> - <em>Christian Nagel</em></li>\n<li><a href=\"https://harshmatharu.com/blog/solid-principles-in-csharp\">Solid Principles in C#</a> - <em>Harsh Matharu</em></li>\n<li><a href=\"https://eisenbergeffect.medium.com/web-components-2023-spring-update-60c7873adf98\">Web Components 2023 Spring Update</a> - <em>Rob Eisenberg</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/05/safest-way-hide-api-keys-react/\">The Safest Way To Hide Your API Keys When Using React</a> - <em>Jessica Joseph</em></li>\n<li><a href=\"https://github.blog/2023-05-09-push-protection-is-generally-available-and-free-for-all-public-repositories/\">Push protection is generally available, and free for all public repositories</a> - <em>Zain Malik &amp; Mariam Sulakian</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/visual-studio-ui-refresh/\">Visual Studio UI Refresh</a> - <em>Kaitlin Brooks, Cherry Wang, &amp; Dante Gagne</em></li>\n<li><a href=\"https://www.viget.com/articles/what-even-are-react-server-components/\">What Even Are React Server Components</a> - <em>Nick Teslan</em></li>\n<li><a href=\"https://rauno.me/craft/nextjs\">Crafting the Next.js Website</a> - <em>Rauno Freiberg</em></li>\n<li><a href=\"https://keithjgrant.com/posts/2023/04/scoped-css-is-back/\">Scoped CSS is Back</a> - <em>Keith J. Grant</em></li>\n<li><a href=\"https://christianheilmann.com/2023/05/09/the-ongoing-defence-of-frontend-as-a-full-time-job/\">The ongoing defence of frontend as a full-time job</a> - <em>Christian Heilmann</em></li>\n<li><a href=\"https://fly.io/blog/js-ecosystem-delightfully-wierd/\">The JavaScript Ecosystem Is Delightfully Weird</a> - <em>Sam Ruby</em></li>\n<li><a href=\"https://anthonysimmon.com/dotnet-minimal-workers/\">Modern minimal workers in .NET</a> - <em>Anthony Simmon</em></li>\n<li><a href=\"https://deno.com/blog/kv\">Announcing Deno KV</a> - <em>Andy Jiang &amp; Ryan Dahl</em></li>\n<li><a href=\"https://ericwbailey.website/published/dont-use-custom-css-scrollbars/\">Don’t use custom CSS scrollbars</a> - <em>Eric Bailey</em></li>\n<li><a href=\"https://goauthentik.io/blog/2023-05-04-i-gambled-against-react-and-lost\">I gambled against React and lost (and I don’t regret a thing)</a> - <em>Jens Langhammer</em></li>\n<li><a href=\"https://tobiasahlin.com/blog/previous-sibling-css-has/\">Selecting previous siblings with CSS :has()</a> - <em>Tobias Ahlin</em></li>\n<li><a href=\"https://tobiasahlin.com/blog/hiding-an-element-if-its-empty/\">Hiding Empty Elements with CSS :empty and :has</a> - <em>Tobias Ahlin</em></li>\n<li><a href=\"https://blog.jetbrains.com/dotnet/2023/05/09/dotnet-background-services/\">How to start using .NET Background Services</a> - <em>Khalid Abuhakmeh</em></li>\n<li><a href=\"https://www.telerik.com/blogs/big-changes-coming-blazor-dotnet-8\">Big Changes Coming for Blazor in .NET 8</a> - <em>Jon Hilton</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-4/\">Announcing .NET 8 Preview 4</a> - <em>Jon Douglas</em></li>\n<li><a href=\"https://blog.visionarycto.com/p/my-20-year-career-is-technical-debt\">My 20 Year Career is Technical Debt or Deprecated</a> - <em>Matt Watson</em></li>\n<li><a href=\"https://jamiemagee.co.uk/blog/your-jest-tests-might-be-wrong/\">Your Jest tests might be wrong</a> - <em>Jamie Magee</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2023/05/an-alternative-approach-to-structuring.html\">An alternative approach to structuring your tests in XUnit</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://gradient.style/\">CSS HD Gradients</a></li>\n<li><a href=\"https://stephaniewalter.design/blog/accessibility-resources-tools-articles-books-for-designer\">Accessibility for designer: where do I start?</a> - <em>Stephanie Walter</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-4/\">ASP.NET Core updates in .NET 8 Preview 4</a> - <em>Daniel Roth</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://doctorow.medium.com/two-principles-to-protect-internet-users-from-decaying-platforms-b03327183b9a\">Two principles to protect internet users from decaying platforms</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/05/twitter-users-fear-new-ceo-will-end-musks-commitment-to-free-speech-on-platform/\">Right-wing Twitter worried Musk’s CEO pick could return Twitter to its roots</a> - <em>Ashley Belanger</em></li>\n<li><a href=\"https://blog.chromium.org/2023/05/an-update-on-lock-icon.html\">An Update on the Lock Icon</a> - _ David Adrian, Serena Chen, Joe DeBlasio, Emily Stark, &amp; Emanuel von Zezschwitz_</li>\n<li><a href=\"https://financialstatement.zip/\">The .zip TLD sucks and it needs to be immediately revoked</a> - <em>Swift on Security</em></li>\n<li><a href=\"https://www.techdirt.com/2023/05/15/once-again-free-speech-absolutist-elon-musk-caves-to-authoritarian-censorial-bullies/\">Once Again, ‘Free Speech Absolutist’ Elon Musk Caves To Authoritarian Censorial Bullies</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2023/05/18/supreme-court-leaves-230-alone-for-now-but-justice-thomas-gives-a-pretty-good-explanation-for-why-it-exists-in-the-first-place/\">Supreme Court Leaves 230 Alone For Now, But Justice Thomas Gives A Pretty Good Explanation For Why It Exists In The First Place</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://9to5google.com/2023/05/16/pixel-dashcam-personal-safety-update/\">Google will soon let Pixel phones double as dashcams</a> - <em>Kyle Bradshaw</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://johnhcochrane.blogspot.com/2023/05/missing-mortgage-contract-innovation.html\">Missing mortgage contract innovation</a> - <em>John Cochrane</em></li>\n<li><a href=\"https://www.npr.org/sections/money/2023/05/16/1176189034/the-case-for-financial-literacy-education\">The case for financial literacy education</a> - <em>Paddy Hirsch</em></li>\n<li><a href=\"https://www.wsj.com/articles/espn-lays-plans-to-stream-flagship-channel-eyeing-cable-tvs-demise-ad0fb727\">ESPN Plans to Stream Flagship Channel, Eying Cable TV’s Demise</a> - <em>Jessica Toonkel &amp; Sarah Krouse</em></li>\n<li><a href=\"https://www.npr.org/2023/05/16/1174938708/commercial-real-estate-property-offices-work-from-home-remote-work\">A lot of offices are still empty — and it's becoming a major risk for the economy</a> - <em>Arezou Rezvani</em></li>\n<li><a href=\"https://www.economist.com/united-states/2023/05/07/what-americas-tiny-banks-do-that-big-ones-dont\">What America’s tiny banks do that big ones don’t</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/05/otc-birth-control-pill-gets-unanimous-vote-in-favor-from-fda-advisers/\">FDA advisers vote unanimously in favor of OTC birth control pills</a> - <em>Beth Mole</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/05/more-evidence-emerges-that-saturns-rings-are-much-younger-than-the-planet/\">More evidence emerges that Saturn’s rings are much younger than the planet</a> - <em>Jennifer Ouellette</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/05/the-complicated-history-of-how-the-earths-atmosphere-became-breathable/\">The complicated history of how the Earth’s atmosphere became breathable</a> - <em>Howard Lee</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/05/a-private-company-has-an-audacious-plan-to-rescue-nasas-last-great-observatory/\">A private company has an audacious plan to rescue NASA’s last “Great Observatory”</a> - <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.wbur.org/onpoint/2022/04/25/why-social-psychologist-jonathan-haidt-says-americas-institutions-are-in-trouble\">On Point: Social psychologist Jonathan Haidt on democracy, social media and how to fix America's 'ailing' institutions</a></li>\n<li><a href=\"https://www.npr.org/2023/05/17/1176781995/the-man-who-busted-the-inflation-employment-myth\">The Indicator: The Man Who Busted the Inflation Myth</a></li>\n<li><a href=\"https://www.codingblocks.net/podcast/job-hopping-favorite-dev-books/\">Coding Blocks #199 - Job Hopping and Favorite Dev Books</a></li>\n<li><a href=\"https://pitchforkeconomics.com/episode/america-isnt-lost-its-adrift-with-scott-galloway/\">Pitchfork Economics - America isn’t Lost, it’s Adrift (with Scott Galloway)</a></li>\n<li><a href=\"https://www.buzzsprout.com/1112270/11857765-beanie-babies-with-jamie-loftus\">You’re Wrong About: Beanie Babies with Jamie Loftus</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.inc.com/nick-hobson/kias-logo-redesign-was-a-total-flop-company-did-what-no-brand-should-ever-do.html\">Kia’s Logo Redesign was a Total Flop</a> - <em>Nick Hobson</em></li>\n<li><a href=\"https://markmanson.net/how-to-make-friends\">How to Make Friends as an Adult</a> - <em>Mark Manson</em></li>\n<li><a href=\"https://arie.ls/2023/leading-successful-product-teams/\">Leading Successful Product Teams</a> - <em>Ariel Salminen</em></li>\n<li><a href=\"https://anildash.com/2023/03/14/what-was-selling-out/\">What Was Selling Out</a> - <em>Anil Dash</em></li>\n<li><a href=\"https://kpwags.com/reading-log/29/police-fentanyl-overdose-misinformation%20%20-%20https://www.npr.org/2023/05/16/1175726650/cops-say-theyre-being-poisoned-by-fentanyl-experts-say-the-risk-is-extremely-low\">Cops say they're being poisoned by fentanyl. Experts say the risk is &quot;extremely low&quot;</a> - <em>Brian Mann</em></li>\n<li><a href=\"https://doctorow.medium.com/the-memex-method-238c71f2fb46\">The Memex Method</a> - <em>Cory Doctorow</em></li>\n<li><a href=\"https://www.axios.com/2023/05/13/us-suburbs-boom-housing-retail\">America's surprise revival: The suburbs</a> - <em>Erica Pandey</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/site-search-in-arc-browser/\">Site Search in Arc Browser — For Your Own Site</a> - <em>Jim Nielsen</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - Goddamnitall</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/X_hWCZ-sZps\" title=\"The Wonder Years - Goddamnitall\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/28/",
      "url": "https://kpwags.com/reading-log/28/",
      "title": "Reading Log - May 12, 2023 (#28)",
      "content_html": "\n\t\t<p>This week I look at a new game that helps illuminate what the content moderators of sites like Twitter, Facebook and Reddit have to deal with. I’ve also read about writing better CSS, Bookshop.org’s rise, return to office shenanigans and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.techdirt.com/2023/05/11/moderator-mayhem-a-mobile-game-to-see-how-well-you-can-handle-content-moderation/\">Moderator Mayhem: A Mobile Game To See How Well YOU Can Handle Content Moderation</a></h2>\n\t<div class=\"in-depth-meta\">Mike Masnick</div>\n\t<div class=\"in-depth-text\">\n<p>Everyone tends to think that they can do content moderation better than Twitter, Reddit, Facebook and all the other social media sites. The truth of the matter is that it’s not easy. Sure some posts should be pretty obvious they need to be removed, but there’s also a lot more nuance behind it.</p>\n<blockquote><p>A friend of mine in the trust &amp; safety world once suggested that these conversations would be a lot more useful if everyone had to spend a few days moderating an actual community, and could learn how content moderation is not about “suppressing viewpoints,” but almost always about understanding really complex scenarios in which you have to make decisions in a very limited period of time, with limited information, and where there may not be any “right” answer.</p></blockquote>\n<p>Nails it right on the head. The moderators are having to deal with countless reports in a very short timeframe and are often dealing with content that can be absolutely awful and soul sucking.</p>\n<p>This little game helps show some of the pressures and things the moderators have to deal with. I’d highly recommend giving it a go.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.telerik.com/blogs/10-awesome-csharp-refactoring-tips\">10 Awesome C# Refactoring Tips</a> - <em>Assis Zang</em></li>\n<li><a href=\"https://www.webscope.io/blog/server-components-vs-ssr\">Server Components vs. SSR in Next.js</a> - <em>Jan Koriťák</em></li>\n<li><a href=\"https://developer.chrome.com/blog/reading-order/\">Solving the CSS layout and source order disconnect</a> - <em>Rachel Andrew</em></li>\n<li><a href=\"https://matthiasott.com/notes/custom-properties-beyond-the-root\">CSS Custom Properties Beyond the :root</a> - <em>Matthias Ott</em></li>\n<li><a href=\"https://stackify.com/opentelemetry-dotnet/\">A Guide to OpenTelemetry for .NET Engineers</a> - <em>Stackify</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2023/04/write-better-css-borrow-ideas-javascript-functions/\">Write Better CSS By Borrowing Ideas From JavaScript Functions</a> - <em>Yaphi Berhanu</em></li>\n<li><a href=\"https://lucasfcosta.com/2022/10/02/scrum-versus-kanban.html\">You don't need Scrum. You just need to do Kanban right.</a> - <em>Lucas F. Costa</em></li>\n<li><a href=\"https://ishadeed.com/article/rebuild-featured-news-modern-css/\">Rebuilding a featured news section with modern CSS: Vox news</a> - <em>Ahmad Shadeed</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/4/25/23697532/microsoft-edge-browser-url-leak-bing-privacy\">Microsoft Edge is leaking the sites you visit to Bing</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://www.techdirt.com/2023/03/01/taamneh-case-gave-us-a-glimpse-of-the-horror-websites-would-face-in-a-post-section-230-world/\">Taamneh Case Gave Us A Glimpse Of The Horror Websites Would Face In A Post-Section 230 World</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://futurism.com/the-byte/steve-wozniak-ai-killing-people-tesla\">Steve Wozniak: If you want to learn about AI killing people, “Get a Tesla”</a> - <em>Victor Tangermann</em></li>\n<li><a href=\"https://anderegg.ca/2023/05/09/bluesky-frustrations\">Bluesky Frustrations</a> - <em>Gavid Anderegg</em></li>\n<li><a href=\"https://www.economist.com/technology-quarterly/2023/04/05/adding-capacity-to-the-electricity-grid-is-not-a-simple-task\">Adding capacity to the electricity grid is not a simple task</a> - <em>The Economist</em></li>\n<li><a href=\"https://www.bleepingcomputer.com/news/technology/youtube-tests-blocking-videos-unless-you-disable-ad-blockers/\">YouTube tests blocking videos unless you disable ad blockers</a> - <em>Sergiu Gatlan</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/books-bookshop-org-thrives-amazon-world/\">How Bookshop.org Survives—and Thrives—in Amazon’s World</a> - <em>Kate Knibbs</em></li>\n<li><a href=\"https://www.businessinsider.com/airbnb-brian-chesky-ceos-mandating-return-to-office-going-hamptons-2023-5\">Airbnb CEO Brian Chesky, who lets employees work from anywhere, says many CEOs calling workers back to the office are 'going away to the Hamptons for the summer’</a> - <em>Sarah Jackson</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://mars.nasa.gov/news/9365/engineers-keep-an-eye-on-fuel-supply-of-nasas-oldest-mars-orbiter/\">Engineers Keep an Eye on Fuel Supply of NASA's Oldest Mars Orbiter</a> - <em>NASA</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://defector.com/enough-with-the-blowouts\">Enough With The Blowouts!</a> - <em>Lauren Theisen</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.econtalk.org/annie-duke-on-the-power-of-quitting/\">EconTalk: Annie Duke on the Power of Quitting</a></li>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/e-suvs-may-be-popular-but-are-they-sustainable/\">Marketplace Tech: E-SUVs may be popular, but are they sustainable?</a></li>\n<li><a href=\"https://www.economist.com/podcasts/2023/05/04/is-the-business-of-podcasting-sustainable\">Money Talks: Is the Business of Podcasting Sustainable</a></li>\n<li><a href=\"https://dotnetcore.show/episode-110-jet-brains-and-remote-development-with-maarten-balliauw/\">The .NET Core Podcast #110: JetBrains and Remote Development with Maarten Balliauw</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/freedom-house-ambulance-service/\">99% Invisible #405: Freedom House Ambulance Service</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://newrepublic.com/article/170242/betrayal-adam-smith\">The Betrayal of Adam Smith</a> - <em>Mark Harris</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - Positive Charge</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Rymbk5I_WlA\" title=\"The Gaslight Anthem - Positive Charge\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/05/11/how-i-set-up-repositories-in-entity-framework/",
      "url": "https://kpwags.com/posts/2023/05/11/how-i-set-up-repositories-in-entity-framework/",
      "title": "How I Set Up Repositories in Entity Framework",
      "content_html": &lt;p&gt;It’s a secret to everyone! This post is for RSS subscribers only. &lt;a href=&quot;https://kpwags.com/rss-club/&quot;&gt;Read more about RSS Club&lt;/a&gt;.&lt;/p&gt;"\n\t\t<p><em>This post is for the <a href=\"https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club\">Secret RSS Club Readers</a>.</em></p>\n<p>Ever since I built <em>Where Do You Want to Eat 2</em> I’ve been building repository classes to interact with Entity Framework and the database in a very similar manner. Since much of my interactions are relatively simple CRUD (Create, Read, Update, &amp; Delete) operations, having a standard method to interact makes a lot of sense.</p>\n<p>For just about every database object, I need to be able to perform one of five operations.</p>\n<ol>\n<li>I need to be able to get a specific object by its ID.</li>\n<li>I need to be able to return a list of all the objects.</li>\n<li>I need to be able to add a new object.</li>\n<li>I need to be able to update an existing object.</li>\n<li>I need to be able to delete an object.</li>\n</ol>\n<p>It seems like an interface would be nice to have to support this. It would help with mocking for unit tests and it would also help ensure that I build out all the CRUD functionality.</p>\n<p>So let’s use .NET’s generic types to build out an interface that I can use.</p>\n<pre class=\"language-cs\" tabindex=\"0\"><code class=\"language-cs\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">IRepository<span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token return-type class-name\">T</span> <span class=\"token function\">GetById</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token return-type class-name\">IQueryable<span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span> <span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">T</span> entity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Update</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">T</span> entity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Delete</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This defines a generic repository for type <code>T</code> where <code>T</code> can be any class. So if I were to define a repository for the <code>Brand</code> object from my <a href=\"https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework\">previous post about diving into Entity Framework</a> <code>T</code> would essentially become <code>Brand</code>.</p>\n<p>So now, when I want to build a repository for my brand model, I create the following interface.</p>\n<pre class=\"language-cs\" tabindex=\"0\"><code class=\"language-cs\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">IBrandRespository</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IRepository<span class=\"token punctuation\">&lt;</span>Brand<span class=\"token punctuation\">></span></span></span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token return-type class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Brand<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetBrandsOfType</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Constants<span class=\"token punctuation\">.</span>CardType</span> cardType<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Because <code>IBrandRepository</code> inherits from <code>IRepository&lt;Brand&gt;</code>, any classes that implement the interface must implement all the methods defined in <code>IRepository&lt;Brand&gt;</code> and also the <code>GetBrandsOfType</code> method from <code>IBrandRepository</code> as well.</p>\n<p>For reference, here’s my brand model.</p>\n<pre class=\"language-cs\" tabindex=\"0\"><code class=\"language-cs\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Brand</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">int</span></span> BrandId <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Name <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">Constants<span class=\"token punctuation\">.</span>CardType</span> CardType <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">bool</span></span> IsActive <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>And here’s my implementation of its interface.</p>\n<pre class=\"language-cs\" tabindex=\"0\"><code class=\"language-cs\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BrandRepository</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IBrandRespository</span></span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">IDbContextFactory<span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span> _contextFactory<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">BrandRepository</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">IDbContextFactory<span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span> contextFactory<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        _contextFactory <span class=\"token operator\">=</span> contextFactory<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">Brand</span> <span class=\"token function\">GetById</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> brandId<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> brand <span class=\"token operator\">=</span> dbContext<span class=\"token punctuation\">.</span>Brands<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>BrandId <span class=\"token operator\">==</span> brandId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>brand <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ObjectNotFoundException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to find the specified brand\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> Brand<span class=\"token punctuation\">.</span><span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span>brand<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">IQueryable<span class=\"token punctuation\">&lt;</span>Brand<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">return</span> dbContext<span class=\"token punctuation\">.</span>Brands\n            <span class=\"token punctuation\">.</span><span class=\"token function\">OrderBy</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">Select</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> Brand<span class=\"token punctuation\">.</span><span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span> <span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Brand</span> brand<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContextAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> newBrand <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">BrandDto</span>\n        <span class=\"token punctuation\">{</span>\n            Name <span class=\"token operator\">=</span> brand<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n            IsActive <span class=\"token operator\">=</span> brand<span class=\"token punctuation\">.</span>IsActive<span class=\"token punctuation\">,</span>\n            CardTypeId <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>brand<span class=\"token punctuation\">.</span>CardType<span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n        dbContext<span class=\"token punctuation\">.</span>Brands<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span>newBrand<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">await</span> dbContext<span class=\"token punctuation\">.</span><span class=\"token function\">SaveChangesAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">return</span> newBrand<span class=\"token punctuation\">.</span>BrandId<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Update</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Brand</span> brand<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContextAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> cardBrand <span class=\"token operator\">=</span> dbContext<span class=\"token punctuation\">.</span>Brands<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>BrandId <span class=\"token operator\">==</span> brand<span class=\"token punctuation\">.</span>BrandId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>cardBrand <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ObjectNotFoundException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to find the specified brand\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        cardBrand<span class=\"token punctuation\">.</span>Name <span class=\"token operator\">=</span> brand<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">;</span>\n        cardBrand<span class=\"token punctuation\">.</span>IsActive <span class=\"token operator\">=</span> brand<span class=\"token punctuation\">.</span>IsActive<span class=\"token punctuation\">;</span>\n        cardBrand<span class=\"token punctuation\">.</span>CardTypeId <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>brand<span class=\"token punctuation\">.</span>CardType<span class=\"token punctuation\">;</span>\n\n        dbContext<span class=\"token punctuation\">.</span>Brands<span class=\"token punctuation\">.</span><span class=\"token function\">Update</span><span class=\"token punctuation\">(</span>cardBrand<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">await</span> dbContext<span class=\"token punctuation\">.</span><span class=\"token function\">SaveChangesAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Delete</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> brandId<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContextAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">await</span> dbContext<span class=\"token punctuation\">.</span>Brands<span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>BrandId <span class=\"token operator\">==</span> brandId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">ExecuteDeleteAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">IEnumerable<span class=\"token punctuation\">&lt;</span>Brand<span class=\"token punctuation\">></span></span> <span class=\"token function\">GetBrandsOfType</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Constants<span class=\"token punctuation\">.</span>CardType</span> cardType<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">return</span> dbContext<span class=\"token punctuation\">.</span>Brands\n            <span class=\"token punctuation\">.</span><span class=\"token function\">Where</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>CardTypeId <span class=\"token operator\">==</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>cardType<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">OrderBy</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">Select</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> Brand<span class=\"token punctuation\">.</span><span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">AsEnumerable</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>You can see in the constructor, I use dependency injection to inject the DbContextFactory to use in the repo, so that in every action, I can easily create a new DB context by:</p>\n<pre class=\"language-cs\" tabindex=\"0\"><code class=\"language-cs\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContextAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>From there on, there’s no real difference between using Entity Framework in a Blazor app or a .NET Web API.</p>\n<p>The one thing you might also notice is that I don’t have the repository return the DTO (Data Transfer Object) from the repository. Instead I have it return the domain model. My reasoning for that is that I want any extra logic I might need in the model separate from the model that gets saved and retrieved from the database. For the <code>Brand</code> domain model, the <code>FromDto</code> function is pretty simple.</p>\n<pre class=\"language-cs\" tabindex=\"0\"><code class=\"language-cs\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">Brand</span> <span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BrandDto</span> dto<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Brand</span>\n<span class=\"token punctuation\">{</span>\n    BrandId <span class=\"token operator\">=</span> dto<span class=\"token punctuation\">.</span>BrandId<span class=\"token punctuation\">,</span>\n    Name <span class=\"token operator\">=</span> dto<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n    CardType <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>CardType<span class=\"token punctuation\">)</span>dto<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">,</span>\n    IsActive <span class=\"token operator\">=</span> dto<span class=\"token punctuation\">.</span>IsActive<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>In the next post, my plan is to dig into dealing with authentication in Blazor. It was probably the biggest stumbling block I faced so far.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/05/05/calming-down-after-hockey/",
      "url": "https://kpwags.com/posts/2023/05/05/calming-down-after-hockey/",
      "title": "Calming Down After Hockey",
      "content_html": "\n\t\t<p>I enjoy playing hockey and will often play as much as 3 nights a week. Being an adult, I’m stuck with the late ice times so the kiddos can be home and in bed. This means that I’m often not starting games until 10:00 to 10:30pm some nights. This means that I’m not home until midnight some nights. Add in the rush of adrenaline from playing and it’s not a fun combo. I’ve started to settle into a good habit though.</p>\n<p>Getting home at midnight after a beer league hockey game on a work night is no fun. What makes it worse is that you’re still amped up, so even if you get into bed, you’re still too “awake” to sleep.</p>\n<p>A little before the new year, I tried a new strategy of coming home and reading for 30 minutes to an hour before crawling into bed. It’s a quiet activity that helps calm me down and lower the adrenaline. I’ll sometimes read with one last beer too (which may or may not be for the best, but oh well).</p>\n<p>It’s nice to be able to be “productive” and to get something out of the post-game buzz rather than twisting and turning in bed possibly keeping my wife awake. It’s become somewhat of a ritual and in a weird way I kind of look forward to getting comfortable on the couch in a quiet house with my cat and a good book.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/27/",
      "url": "https://kpwags.com/reading-log/27/",
      "title": "Reading Log - May 5, 2023 (#27)",
      "content_html": "\n\t\t<p>Between a weekend trip and my site update, this has been 3 weeks in the making. This log we look at the passing of a folk legend, Microsoft reverting to its old ways, Microsoft facing a hurdle in its Activision acquisition, some chatty parrots, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.npr.org/2023/05/01/133464279/gordon-lightfoot-canadian-folk-legend-dies-at-84\">Gordon Lightfoot, Canadian folk legend, dies at 84</a></h2>\n\t<div class=\"in-depth-meta\">Neda Ulaby</div>\n\t<div class=\"in-depth-text\">\n<p>I grew up with my dad listening to Gordon Lightfoot quite a bit. It gave me a real appreciation for his music. I have several vinyl records of his and have seen him in concert. The world has lost a fantastic musician.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://nextjs.org/blog/next-13-4\">Next.js 13.4</a> - <em>Tim Neutrons &amp; Sebastian Markbåge</em></li>\n<li><a href=\"https://www.robinrendle.com/notes/the-details-element-is-amazing/\">The details element is amazing</a> - Robin Rendle</li>\n<li><a href=\"https://jonhilton.net/blazor-rendering/\">State Hasn't Changed? Why and when Blazor components re-render</a> - <em>Jon Hilton</em></li>\n<li><a href=\"https://uxdesign.cc/dark-matters-342ff2c7cc\">Dark mode: How accessible design raises the bar</a> - <em>Layth Sihan</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/04/14/substack-ceo-chris-best-doesnt-realize-hes-just-become-the-nazi-bar/\">Substack CEO Chris Best Doesn’t Realize He’s Just Become The Nazi Bar</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://gizmodo.com/microsoft-windows-google-chrome-feature-broken-edge-1850392901\">Microsoft Broke a Chrome Feature to Promote Its Edge Browser</a> - <em>Thomas Germain</em></li>\n<li><a href=\"https://defector.com/the-internet-isnt-meant-to-be-so-small\">The Internet Isn’t Meant To Be So Small</a> - <em>Kelsey McKinney</em></li>\n<li><a href=\"https://www.theverge.com/2023/5/3/23709297/microsoft-edge-force-outlook-teams-web-links-open\">Microsoft is forcing Outlook and Teams to open links in Edge, and IT admins are angry</a> - <em>Tom Warren</em></li>\n<li><a href=\"https://gizmodo.com/nyc-msg-facial-recognition-landlords-ban-law-hearing-1850401997\">These New Yorkers Want to Stop Landlords From Using Facial Recognition</a> - <em>Mack DeGeurin</em></li>\n<li><a href=\"https://pudding.cool/2023/05/dark-patterns/\">How Companies Use Dark Patterns to Keep You Subscribed</a> - <em>Caroline Sinders</em></li>\n<li><a href=\"https://www.theverge.com/23710406/mozilla-social-mastodon-fediverse-moderation\">Mozilla’s setting up shop on Mastodon and trying to reinvent content moderation</a> - <em>David Pierce</em></li>\n<li><a href=\"https://www.techdirt.com/2023/05/03/elon-whines-that-hell-give-away-nprs-twitter-account-if-they-wont-start-using-twitter-again/\">Elon Whines That He’ll Give Away NPR’s Twitter Account If They Won’t Start Using Twitter Again</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://www.techdirt.com/2023/05/05/mercedes-locks-better-ev-engine-performance-behind-annoying-subscription-paywalls/\">Mercedes Locks Better EV Engine Performance Behind Annoying Subscription Paywalls</a> - <em>Karl Bode</em></li>\n<li><a href=\"https://www.techdirt.com/2023/05/04/colorado-finally-kills-dumb-2005-comcast-backed-state-law-banning-community-broadband-networks/\">Colorado Finally Kills Dumb 2005 Comcast-Backed State Law Banning Community Broadband Networks</a> - <em>Karl Bode</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.economist.com/culture/2023/04/19/a-new-video-game-educates-young-people-about-the-holocaust\">A new video game educates young people about the Holocaust</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2023/04/uk-government-blocks-microsofts-proposed-activision-purchase/\">UK government blocks Microsoft’s proposed Activision purchase</a> - <em>Kyle Orland</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/04/judge-slams-tesla-for-claiming-musk-quotes-captured-on-video-may-be-deepfakes/\">Judge slams Tesla for claiming Musk quotes captured on video may be deepfakes</a> - <em>Jon Brodkin</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/05/watch-a-distant-death-star-devour-a-gas-giant-planet-in-one-big-gulp/\">Caught in the act: Astronomers spot star swallowing a planet for first time</a> - * Jennifer Ouellette*</li>\n<li><a href=\"https://www.scientificamerican.com/article/most-planets-in-the-galaxy-orbit-stars-you-cant-even-see/\">Most Planets in the Galaxy Orbit Stars You Can’t Even See</a> - <em>Phil Plait</em></li>\n<li><a href=\"https://www.smithsonianmag.com/smart-news/scientists-taught-pet-parrots-to-video-call-each-other-and-the-birds-loved-it-180982041/\">Scientists Taught Pet Parrots to Video Call Each Other—and the Birds Loved It</a> - <em>Sarah Kuta</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/04/18/techdirt-podcast-episode-351-save-the-children-from-state-social-media-laws/\">Techdirt Podcast #351: Save the Children (From State Social Media Laws)</a></li>\n<li><a href=\"https://www.pushkin.fm/podcasts/cautionary-tales/the-online-date-thats-too-good-to-be-true\">Cautionary Tales: The Online Date That’s Too Good to Be True</a></li>\n<li><a href=\"https://radiolab.org/podcast/black-box\">Radiolab: Black Box</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/the-safety-bicycle/\">99% Invisible #513: The Safety Bicycle</a></li>\n<li><a href=\"https://www.npr.org/2023/04/28/1172854934/will-artificial-intelligence-help-or-hurt-medicine\">Short Wave: Will artificial intelligence help — or hurt — medicine?</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.vulture.com/2023/04/is-the-economist-making-the-best-news-podcasts-right-now.html\">Is The Economist Making the Best News Podcasts Right Now?</a> - <em>Nicholas Quah</em></li>\n<li><a href=\"https://www.polygon.com/23688347/galaxy-quest-tv-series-paramount-plus\">Galaxy Quest is Getting a TV Show, For Real this Time Hopefully</a> - <em>Austen Goslin</em></li>\n<li><a href=\"https://matthiasott.com/notes/simple-truths-about-personal-websites\">Simple Truths About Personal Websites</a> - <em>Matthias Ott</em></li>\n<li><a href=\"https://www.npr.org/2023/04/30/1171703402/metallica-new-album-72-seasons-master-of-puppets\">Metallica's new album, '72 Seasons,' has met critical acclaim. What's their secret?</a> - <em>Vincent Acovino, Ailsa Chang, &amp; Jonah Mehta</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Gordon Lightfoot - The Wreck of the Edmund Fitzgerald</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/FuzTkGyxkYI\" title=\"Gordon Lightfoot - The Wreck of the Edmund Fitzgerald\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/05/02/april-check-in/",
      "url": "https://kpwags.com/posts/2023/05/02/april-check-in/",
      "title": "April Check-In",
      "content_html": "\n\t\t<p>April wasn’t a bad month. I was productive and was able to finish the month with a well deserved long weekend vacation.</p>\n<h2>Reworking My Site</h2>\n<p>Early on in the month I decided to put Astro on hold and instead focus on cleaning up what I already had for my site with Next.js. I took some of the designing I was doing with Astro and applied it to my current platform. The work was fun and in the end my site is now running the latest version of Next.js (for now) and looks a tad bit better. The downside is that I had to remove my photography section and photo blog temporarily while I find a CDN to store the images.</p>\n<h2>A Nice Long Weekend</h2>\n<p>At the end of the month, my wife and I went to Cape May, New Jersey to celebrate her birthday. The weather was gorgeous and we were able to check out the local wineries and just sit out on our hotel’s veranda with a drink and read. It wasn’t a full week, but the long weekend was the perfect way to unwind.</p>\n<h2>Hey, We’re League Champions!</h2>\n<p>The latest I-League season at my rink ended this month and my team was able to win the upper bracket championship. We started the season out rough at 0 - 3, but finished with 7 straight wins to capture the trophy. I managed to get a 1 - 0 shutout to seal the win.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/w5A2kzrVeB-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/w5A2kzrVeB-1920.gif 1920w\" /><img alt=\"The Green Team wins the trophy!\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/w5A2kzrVeB-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I only ended up running 22.9 miles this month.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>After hitting the 1,000 lbs. mark, I’ve deloaded and am working my way back up. It’s going well, might not be doing the same weight, but am doing more volume.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/anansi-boys-neil-gaiman/6438691?ean=9780063070738\">Anansi Boys</a> by Neil Gaiman</li>\n<li><a href=\"https://bookshop.org/p/books/heart-is-a-lonely-hunter-carson-mccullers/266374\">The Heart is a Lonely Hunter</a> by Carson McCullers</li>\n<li><a href=\"https://bookshop.org/p/books/pacific-crucible-war-at-sea-in-the-pacific-1941-1942-ian-w-toll/8754662?ean=9780393343410\">Pacific Crucible: War at Sea in the Pacific, 1941-1942</a> by Ian W. Toll</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/the-conquering-tide-war-in-the-pacific-islands-1942-1944-ian-w-toll/8758811?ean=9780393353204\">The Conquering Tide: War in the Pacific Islands, 1942-1944</a> by Ian W. Toll</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/25\">April 7 (#25)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/26\">April 14 (#26)</a></li>\n</ul>\n</li>\n<li>Continued my Blazor Series with <a href=\"https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework\">Integrating with Entity Framework</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/04/18/libby-and-libraries\">Libby &amp; Libraries</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/04/28/some-site-and-design-updates\">My Site Updates</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Not much of any gaming</li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished <a href=\"https://www.imdb.com/title/tt8806524/\">Star Trek Picard</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek Voyager</a></li>\n<li>Started re-watching <a href=\"https://www.imdb.com/title/tt2191671/\">Elementary</a></li>\n<li>2023 Stanley Cup Playoffs</li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt1343092/\">The Great Gatsby</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0111161/\">The Shawshank Redemption</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1649418/\">The Gray Man</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0454848/\">Inside Man</a></li>\n</ul>\n<hr />\n<p><em>Update 5.2.2023 : Fixed Duplicate Header</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-05-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/04/28/some-site-and-design-updates/",
      "url": "https://kpwags.com/posts/2023/04/28/some-site-and-design-updates/",
      "title": "Some Site &amp; Design Updates",
      "content_html": "\n\t\t<p>Over the course of the last month or so, I’ve been tweaking the design of my site. You might have noticed the changes to the look and the feel.</p>\n<p>Playing around with Astro I realized that I wanted to give my site a bit of a refresh. And given that I’ve put Astro on hold for the time being, I figured I’d take a break and apply some of the refreshes I was developing with Astro to my Next.js implementation.</p>\n<p>Some of the changes that I made:</p>\n<ul>\n<li>Removed the font options. I know it kind of feels like removing functionality, but I thought more about it and it will be easier for me to handle typography. I chose the monospaced font because I like the way it looks and feels.</li>\n<li>Better handled my <a href=\"https://kpwags.com/bookshelf\">bookshelf</a>, <a href=\"https://kpwags.com/tv\">TV</a>, <a href=\"https://kpwags.com/movies\">movies</a>, &amp; <a href=\"https://kpwags.com/video-games\">video game</a> pages. I didn’t like the way I was handling the wider widths so I laid out the HTML elements better to allow for a wider width for the pages.</li>\n<li>Changed the look and feel of blog headers both on the entry page and on the listing pages.</li>\n<li>Improved the header to allow for search and theme picking from mobile.</li>\n<li>Added a proper 404 page.</li>\n<li>Cleaned up all the front matter in my blog posts since they were all over the place depending on when I wrote the post.</li>\n<li>Added <a href=\"https://sandpack.codesandbox.io/\">Sandpack</a> support for future posts where I want to include a code sandbox.</li>\n<li>Switched from Prism to <a href=\"https://codehike.org/\">Code Hike</a> for my code blocks.</li>\n<li>Upgraded Next.js to v13.</li>\n</ul>\n<p>The one downside that I came across was upgrading to Next.js 13 caused some issues with deploying my site to Netlify. I’ve had to remove my photography pages until I can move the images into a CDN. I had been including them in the project (probably foolishly) and with the upgrade to Next.js and Netlify’s Next.js plugin, it made my deploy way too large. I’ll probably look into S3 or something similar so I can re-add the photographs back. So a bummer, but hopefully only temporary.</p>\n<p>I might be making some tweaks here and there, but if you notice anything weird, please let me know.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-04-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/04/18/libby-and-libraries/",
      "url": "https://kpwags.com/posts/2023/04/18/libby-and-libraries/",
      "title": "Libby and Libraries",
      "content_html": "\n\t\t<p>As a kid, I loved it when my parents took me to the library. I read often and loved checking out books to read. As an adult it’s no different.</p>\n<p>One of the apps on my iPhone is <a href=\"https://libbyapp.com/interview/welcome#doYouHaveACard\">Libby</a> which allows me to borrow eBooks from my local library. I discovered it during the pandemic and it gives me access to books on my Kindle with the press of a button.</p>\n<p>Like physical books, libraries only have so many digital copies available to lend as well. The nice part is that if they have the book you want to read but it’s checked out, you can easily add yourself to the waiting list to get it as soon as it becomes available. Another nice (or maybe not so nice thing from some points of view) is that because it’s digital, once the two weeks the reader has are up, it gets “returned” to the library for the next person. You don’t have to worry about the person before you losing it or returning it a month late.</p>\n<p>They haven’t had every book on my reading list, but it’s a nice way to take advantage of what my local library offers.</p>\n<p>I’d highly recommend seeing what your local libraries offer digitally, and any other of their services. The Wall Street Journal had a <a href=\"https://www.wsj.com/articles/the-money-saving-power-of-your-library-card-8f490455\">good article</a> about it a week or so ago.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-04-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/26/",
      "url": "https://kpwags.com/reading-log/26/",
      "title": "Reading Log - April 14, 2023 (#26)",
      "content_html": "\n\t\t<p>This week a lot of details were announced about .NET 8 and C# 12. Also included is NPR leaving Twitter, Uber screwing drivers, and the power of libraries.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://ishadeed.com/article/css-text-wrap-balance/\">CSS Text balancing with text-wrap:balance</a> - <em>Ahmad Shadeed</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/d38e70b4-6f36-41ff-8011-b0b0d1f54f6e\">5 useful extensions for Task&lt;T&gt; in .NET</a> - <em>Steven Giesel</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/learn-how-to-modernize-your-dotnet-apps/\">Learn how to modernize your .NET apps from the pros!</a> - <em>Jon Galloway</em></li>\n<li><a href=\"https://matthiasott.com/notes/a-readme-template-with-an-automatically-generated-table-of-contents\">A README Template – With an Automatically Generated Table of Contents</a> - <em>Matthias Ott</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-3/\">ASP.NET Core updates in .NET 8 Preview 3</a> - <em>Daniel Roth</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/check-out-csharp-12-preview/\">Check out new C# 12 preview features!</a> - <em>Kathleen Dollard</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-3/\">Announcing .NET 8 Preview 3</a> - <em>Jiachen Jiang</em></li>\n<li><a href=\"https://www.theverge.com/23650428/colorblindness-design-ui-accessibility-wordle\">Chasing Rainbows</a> - <em>Andy Baio</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.businessinsider.com/tech-companies-ruining-apps-websites-internet-worse-google-facebook-amazon-2023-3\">Big Tech's Big Downgrade</a> - <em>Ed Zitron</em></li>\n<li><a href=\"https://www.npr.org/2023/04/12/1169269161/npr-leaves-twitter-government-funded-media-label\">NPR quits Twitter after being falsely labeled as 'state-affiliated media’</a> - <em>David Folkenflik</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/4/7/23674958/joe-staten-halo-infinite-destiny-microsoft-bungie\">Halo veteran Joseph Staten is leaving Microsoft</a> - <em>Jay Peters</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2023/04/10/how-ride-hail-companies-use-data-to-pay-drivers-less/\">How ride-hail companies use data to pay drivers less</a> - <em>Kai Ryssdal &amp; Livi Burdette</em></li>\n<li><a href=\"https://www.economist.com/finance-and-economics/2023/04/12/how-the-state-could-take-control-of-the-banking-system\">How the State Could Take Control of the Banking System</a> - <em>The Economist</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/04/black-hole-is-soaring-between-galaxies-leaving-stars-in-its-wake/\">Black hole is soaring between galaxies, leaving stars in its wake</a> - <em>John Timmer</em></li>\n<li><a href=\"https://www.npr.org/sections/health-shots/2023/04/14/1169216517/youre-less-likely-to-get-long-covid-after-a-second-infection-than-a-first\">You're less likely to get long COVID after a second infection than a first</a> - <em>Rob Stein</em></li>\n<li><a href=\"https://gizmodo.com/nasa-goddard-makenzie-lystrup-sagan-pale-blue-dot-1850320312\">New NASA Official Took Her Oath of Office on Carl Sagan’s ‘Pale Blue Dot’</a> - <em>Passant Rabie</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/articles/the-money-saving-power-of-your-library-card-8f490455\">The Money Saving Power of Your Library Card</a> - <em>Shara Tibken</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Breaking Benjamin - Never Again</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/zEUG3_Zh-rw\" title=\"Breaking Benjamin - Never Again\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-04-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/25/",
      "url": "https://kpwags.com/reading-log/25/",
      "title": "Reading Log - April 7, 2023 (#25)",
      "content_html": "\n\t\t<p>NASA makes a big announcement about Artemis II, rumors about Apple’s USB-C iPhone, Twitter being Twitter, and more.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://nodogmablog.bryanhogan.net/2023/04/accessing-objects-just-after-they-are-saved-by-entity-framework/\">Accessing Objects Just After they are Saved by Entity Framework</a> - <em>Bryan Hogan</em></li>\n<li><a href=\"https://michaelscodingspot.com/csharp-12-proposals/\">Looking at C# 12 Proposals and Beyond</a> - <em>Michael Shpilt</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/improvements-auth-identity-aspnetcore-8/\">Improvements to auth and identity in ASP.NET Core 8</a> - <em>Jeremy Likness</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.tomsguide.com/news/apples-rumored-usb-c-plans-for-iphone-15-could-be-illegal\">Apple’s Rumored USB-C Plans for iPhone 15 Could Be Illegal</a> - <em>Philip Michaels</em></li>\n<li><a href=\"https://www.theverge.com/23653556/tweetbot-twitter-api-elon-musk-mastodon\">Canary in the emerald mine</a> - <em>Rob Dubbin</em></li>\n<li><a href=\"https://www.techdirt.com/2023/04/05/npr-was-twitters-example-of-what-should-not-be-labeled-state-affiliated-media-then-musk-added-the-label-and-retconned-the-policy/\">NPR Was Twitter’s Example Of What Should NOT Be Labeled ‘State-Affiliated Media.’ Then Musk Added The Label And Retconned The Policy</a> - <em>Mike Masnick</em></li>\n<li><a href=\"https://andy-bell.co.uk/i-think-im-not-alone-that-mastodon-is-giving-me-the-ick/\">I think I’m not alone that Mastodon is giving me the ick</a> - <em>Andy Bell</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2023/04/bitcoin-whitepaper-is-hidden-away-in-macoss-system-folders-for-some-reason/\">Bitcoin white paper is hidden away in macOS’s system folder for some reason</a> - <em>Andrew Cunningham</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.newscientist.com/article/2366432-losing-weight-is-good-for-your-health-even-if-you-regain-it/\">Losing weight is good for your health – even if you regain it</a> - <em>Grace Wade</em></li>\n<li><a href=\"https://arstechnica.com/science/2023/04/stunning-new-webb-telescope-image-showcases-nested-rings-of-uranus/\">NASA: Uranus has “never looked better” in spectacular Webb Telescope image</a> - <em>Jennifer Ouellette</em></li>\n<li><a href=\"https://www.nasa.gov/press-release/nasa-names-astronauts-to-next-moon-mission-first-crew-under-artemis\">NASA Names Astronauts to Next Moon Mission, First Crew Under Artemis</a> - <em>NASA</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4366629/2023/04/06/nhl-goalie-skates-bauer-konekt/\">How is ski boot technology making life easier for many NHL goalies?</a> - <em>Jesse Granger</em></li>\n<li><a href=\"https://www.npr.org/2023/04/06/1167772714/golf-ball-change-rule-augusta-tiger-woods-pros-courses\">Golf has a problem: people are hitting the ball too far</a> - <em>Gus Contreras</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://radiolab.org/episodes/40000-recipes-murder\">Radiolab: 40,000 Recipes for Murder</a></li>\n<li><a href=\"https://stackoverflow.blog/2023/03/31/how-to-keep-the-servers-running-when-your-mastodon-goes-viral/\">Stack Overflow Podcast #567: How to keep the servers running when your Mastodon goes viral</a></li>\n<li><a href=\"https://podcasts.apple.com/ca/podcast/508-president-clinton-interviews-roman-mars/id394775318?i=1000580110425\">99% Invisible #508: President Clinton Interviews Roman Mars</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - The Backseat</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/TX0psH6zH7g\" title=\"The Gaslight Anthem - The Backseat\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-04-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework/",
      "url": "https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework/",
      "title": "Digging Into Blazor - Integrating with Entity Framework",
      "content_html": "\n\t\t<p>Now that I was getting my feet wet, it was time for me to start laying out the framework for my first real Blazor project. Step one was to get the database setup.</p>\n<p>This is the second post in a multi-part series. If you haven't read part one, you can <a href=\"https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions\">read about my first impressions</a>.</p>\n<section class=\"blog-series\">\n    <h2>Series: Digging into Blazor</h2>\n    <ul class=\"posts\">\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions\">First Impressions</a></li>\n        <li class=\"post\"><span class=\"current\">Integrating with Entity Framework</span></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/07/31/blazor-custom-authentication\">Setting Up Custom Authentication</a></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/09/29/digging-into-blazor-forms\">Forms</a></li>\n    </ul>\n</section>\n<p>I had already decided to use Entity Framework to interact with my SQL server. I have used Entity Framework plenty in the past so I was familiar with the basics. If you haven't used Entity Framework, I would highly recommend reading about it and going through some tutorials. Microsoft provides some <a href=\"https://learn.microsoft.com/en-us/ef/core/\">great documentation</a>.</p>\n<p>The first thing I did was look into how to use <a href=\"https://learn.microsoft.com/en-us/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-7.0\">Entity Framework with Blazor</a>.</p>\n<blockquote>\n<p>In Blazor Server apps, scoped service registrations can be problematic because the instance is shared across components within the user's circuit.</p>\n</blockquote>\n<p>Well that's different.</p>\n<p>I quickly realized that things were a little different, but following their setup, I worked to make sure that each interaction would operate in its own context. Reading more I found out that Microsoft recommended I use a factory to help. I added the DB Factory to my <code>Program.cs</code> file. The nice part is that it's very similar to how I configure it in my other projects.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token comment\">// Program.cs</span>\n\nbuilder<span class=\"token punctuation\">.</span>Services<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">AddDbContextFactory</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span>opt <span class=\"token operator\">=></span>\n    opt<span class=\"token punctuation\">.</span><span class=\"token function\">UseSqlServer</span><span class=\"token punctuation\">(</span>configuration<span class=\"token punctuation\">.</span><span class=\"token function\">GetConnectionString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Main\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Setting up my models worked the same way as <a href=\"https://github.com/kpwags/digital-family-cookbook\">Digital Family Cookbook</a>.</p>\n<p>Let's create my first database table and model. Each of my baseball cards are going to need a brand (think Topps, Donruss, or Upper Deck).</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token comment\">// BrandDto.cs</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">CardOrganizer<span class=\"token punctuation\">.</span>Domain<span class=\"token punctuation\">.</span>Dtos</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BrandDto</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">int</span></span> BrandId <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Name <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">int</span></span> CardTypeId <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">bool</span></span> IsActive <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">List<span class=\"token punctuation\">&lt;</span>BaseballCardDto<span class=\"token punctuation\">></span></span> BaseballCards <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">List<span class=\"token punctuation\">&lt;</span>BaseballCardDto<span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Now let's actually create the app's database context.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token comment\">// ApplicationDbContext.cs</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">CardOrganizer<span class=\"token punctuation\">.</span>Infrastructure<span class=\"token punctuation\">.</span>Database</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Role</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IdentityRole<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ApplicationDbContext</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IdentityDbContext<span class=\"token punctuation\">&lt;</span>UserAccountDto<span class=\"token punctuation\">,</span> IdentityRole<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">></span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">></span></span></span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">DbSet<span class=\"token punctuation\">&lt;</span>BrandDto<span class=\"token punctuation\">></span></span> Brands <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">DbSet<span class=\"token punctuation\">&lt;</span>BaseballCardDto<span class=\"token punctuation\">></span></span> BaseballCards <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">ApplicationDbContext</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DbContextOptions<span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span> options<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">:</span> <span class=\"token keyword\">base</span><span class=\"token punctuation\">(</span>options<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n\n    <span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">protected</span> <span class=\"token keyword\">override</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">OnModelCreating</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">ModelBuilder</span> builder<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">base</span><span class=\"token punctuation\">.</span><span class=\"token function\">OnModelCreating</span><span class=\"token punctuation\">(</span>builder<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        builder<span class=\"token punctuation\">.</span><span class=\"token function\">HasDefaultSchema</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"application\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\t\t<span class=\"token preprocessor property\">#<span class=\"token directive keyword\">region</span> </span><span class=\"token string\">\"Brand\"</span>\n        builder<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">Entity</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>BrandDto<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">ToTable</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Brand\"</span><span class=\"token punctuation\">,</span> <span class=\"token named-parameter punctuation\">schema</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"card\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        builder<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">Entity</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>BrandDto<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">HasKey</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>BrandId<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">HasName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PK_Card_Brand\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        builder<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">Entity</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>BrandDto<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">Property</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">IsRequired</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        builder<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">Entity</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>BrandDto<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">Property</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">HasMaxLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">150</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">IsRequired</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token preprocessor property\">#<span class=\"token directive keyword\">endregion</span> </span><span class=\"token string\">\"Brand\"</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>You can ignore the <code>Role</code> and <code>Identity</code> declarations as I'll get into those in the next post, but it was familiar to me to use the <a href=\"https://learn.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/types-and-properties\">Fluent API</a> to build the model that Entity Framework will use to build the tables in the database.</p>\n<p>To build the database, I used the standard EF terminal commands</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$ dotnet ef migrations <span class=\"token function\">add</span> AddBrandModels</code></pre>\n<p>And then once that succeeded:</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$ dotnet ef database update</code></pre>\n<p>Now that the database was built, I can interact with the database using the <code>IDbContextFactory</code> I added to my <code>Program.cs</code> file above.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token comment\">// BrandRepository.cs</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">CardOrganizer<span class=\"token punctuation\">.</span>Infrastructure<span class=\"token punctuation\">.</span>Repositories</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BrandRepository</span> <span class=\"token punctuation\">:</span> <span class=\"token type-list\"><span class=\"token class-name\">IBrandRespository</span></span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">readonly</span> <span class=\"token class-name\">IDbContextFactory<span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span> _contextFactory<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">BrandRepository</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">IDbContextFactory<span class=\"token punctuation\">&lt;</span>ApplicationDbContext<span class=\"token punctuation\">></span></span> contextFactory<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        _contextFactory <span class=\"token operator\">=</span> contextFactory<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">Brand</span> <span class=\"token function\">GetById</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">int</span></span> brandId<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> brand <span class=\"token operator\">=</span> dbContext<span class=\"token punctuation\">.</span>Brands<span class=\"token punctuation\">.</span><span class=\"token function\">FirstOrDefault</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>BrandId <span class=\"token operator\">==</span> brandId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>brand <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ObjectNotFoundException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to find the specified brand\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> Brand<span class=\"token punctuation\">.</span><span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span>brand<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>You can see in the constructor, I use dependency injection to inject the DbContextFactory to use in the repo, so that in any method I need access to the DB, I can easily create a new DB context by:</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> dbContext <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> _contextFactory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDbContextAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>From there on, there's no real difference between using Entity Framework in a Blazor app or a .NET Web API.</p>\n<p>The one thing you might also notice is that I don't have the repository return the DTO (Data Transfer Object) from the repository. Instead I have it return the domain model. My reasoning for that is that I want any extra logic I might need in the model separate from the model that gets saved and retrieved from the database. For the <code>Brand</code> domain model, the <code>FromDto</code> function is pretty simple.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">Brand</span> <span class=\"token function\">FromDto</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BrandDto</span> dto<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Brand</span>\n<span class=\"token punctuation\">{</span>\n    BrandId <span class=\"token operator\">=</span> dto<span class=\"token punctuation\">.</span>BrandId<span class=\"token punctuation\">,</span>\n    Name <span class=\"token operator\">=</span> dto<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">,</span>\n    CardType <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>CardType<span class=\"token punctuation\">)</span>dto<span class=\"token punctuation\">.</span>CardTypeId<span class=\"token punctuation\">,</span>\n    IsActive <span class=\"token operator\">=</span> dto<span class=\"token punctuation\">.</span>IsActive<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>In the next post, my plan is to dig into dealing with authentication in Blazor. It was probably the biggest stumbling block I faced so far.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-04-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/04/03/march-check-in/",
      "url": "https://kpwags.com/posts/2023/04/03/march-check-in/",
      "title": "March Check-In",
      "content_html": "\n\t\t<p>March wasn't a particularly bad month, had a wedding a whiskey dinner.</p>\n<h2>Getting My Camera Out Again</h2>\n<p>At the beginning of March, my Sister-in-Law got married and as a wedding gift, I offered to take some photos of her special day. It gave me the chance to get my camera out and enjoy my hobby. I still need to go through the photos, and I'm thinking it will be a good chance to give <a href=\"https://apps.apple.com/us/app/darkroom-photo-video-editor/id953286746\">Darkroom</a> a try.</p>\n<h2>Whiskey Dinner</h2>\n<p>Later in the month, Lauren and I went to Bloom Southern Kitchen again for another food and drink pairing. This time it was what they called a “Single Malt Showcase” where we tasted some single malt whiskeys from India, Japan and more. It was another good time and we're planning on going to another in May and then again in June.</p>\n<h2>Digging into Astro</h2>\n<p>You know the saying that developers can't finish a side project? Yeah, that trend continues as I've been splitting my time between Blazor and re-writing my blog using Astro 2.0. I'm actually pretty impressed with how easy it is to implement. I miss bits and pieces of React &amp; Next.js, but man is Astro fast. I'm not sure if I'll end up switching platforms, but I'm liking the ease of developer experience.</p>\n<h2>Continuing Blazor</h2>\n<p>I've been making good progress with my card organizer in Blazor. I'm amazed at how fast it is to build an app with Blazor. It's taken a slight back seat with my blog rewrite in Astro, but I'm getting it into a good place.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I ended up running 35 miles in March. Still trying to do longer runs in the hopes of making the transition to marathon training in August.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Was able to finally hit the 1,000 lbs. club. I hit new PRs on both deadlifts (400 lbs.) &amp; Bench Press (240 lbs.). I've since dropped weight a bit to focus more on reps than sheer weight.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/american-gods-neil-gaiman/6438874?ean=9780063081918\">American Gods</a> by Neil Gaiman</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/anansi-boys-neil-gaiman/6438691?ean=9780063070738\">Anansi Boys</a> by Neil Gaiman</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/20\">March 3 (#20)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/21\">March 10 (#21)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/22\">March 17 (#22)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/23\">March 24 (#23)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/24\">March 31 (#24)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/03/01/separating-reading-logs\">separating my reading logs</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions\">my first impressions of Blazor</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/03/28/handling-an-unruly-podcast-queue\">my unruly podcast queue</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li><a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a> - Continuing with this</li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt8806524/\">Star Trek Picard</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek Voyager</a></li>\n<li>Started re-watching <a href=\"https://www.imdb.com/title/tt2191671/\">Elementary</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt1371150\">This is Where I Leave You</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0082971/\">Raiders of the Lost Ark</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-04-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/24/",
      "url": "https://kpwags.com/reading-log/24/",
      "title": "Reading Log - March 31, 2023 (#24)",
      "content_html": "\n\t\t<p>Podcast heavy this week. I've been trying to go through and listen to my unruly queue.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.robinwieruch.de/react-starter/\">How to start a React Project in 2023</a> - <em>Robin Wieruch</em></li>\n<li><a href=\"https://designshack.net/articles/graphics/choosing-font-for-titles-and-headline/\">How to Choose the Perfect Font for Titles &amp; Headlines</a> - <em>Jenifer Davies</em></li>\n<li><a href=\"https://www.joshwcomeau.com/blog/the-end-of-frontend-development/\">The End of Front-End Development</a> - <em>Josh Comeau</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2023/03/c-clean-up-your-exception-handling.html\">C# - Clean up your exception handling logic with Exception Filters</a> - <em>Bart Wullems</em></li>\n<li><a href=\"https://www.zachleat.com/web/single-page-applications/\">Defaulting on Single Page Applications (SPA)</a> - <em>Zach Leatherman</em></li>\n<li><a href=\"https://csharp.christiannagel.com/2023/03/28/primaryctors/\">Primary Constructors with C#</a> - <em>Christian Nagel</em></li>\n<li><a href=\"https://blog.sandworm.dev/one-in-two-new-npm-packages-is-seo-spam-right-now\">One in Two New npm Packages is SEO Spam Right Now</a> - <em>Gabi Dobocan</em></li>\n<li><a href=\"https://www.aha.io/engineering/articles/css-is-hard-no-matter-how-good-you-are-at-it\">CSS is hard no matter how good you are at it</a> - <em>Jonathan Steel</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/3/27/23658863/arc-browser-iphone-ios-companion-app-mac\">Arc is coming to iPhone, but it won't replace Safari yet, says CEO</a> - <em>Mitchell Clark</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.boweryboyshistory.com/2022/08/danger-in-the-harbor-world-war-i-and-the-black-tom-explosion-of-1916.html\">Danger in the Harbor: World War I and the Black Tom Explosion of 1916</a></li>\n<li><a href=\"https://www.economist.com/moscowpod\">The Economist: Next Year in Moscow</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/the-moral-consequences-of-economic-growth-revisited\">The New Bazaar #49: The Moral Consequences of Economic Growth, Revisited</a></li>\n<li><a href=\"https://shows.acast.com/wtf-with-marc-maron-podcast/episodes/episode-1353-neil-gaiman\">WTF with Marc Maron #1353: Neil Gaiman</a></li>\n<li><a href=\"https://wondery.com/shows/how-i-built-this/episode/10386-dogfish-head-craft-brewery-sam-and-mariah-calagione/\">How I Built This #433: Dogfish Head Craft Brewery</a></li>\n<li><a href=\"https://www.theverge.com/23658648/mastodon-ceo-twitter-interview-elon-musk-twitter\">Decoder: Can Mastodon seize the moment from Twitter?</a></li>\n<li><a href=\"https://www.pushkin.fm/podcasts/cautionary-tales/cautionary-conversation-flying-on-empty\">Cautionary Conversation: Flying on Empty</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Spanish Love Songs - Kick</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/li8_sda6Gt0\" title=\"Spanish Love Songs - Kick\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/03/28/handling-an-unruly-podcast-queue/",
      "url": "https://kpwags.com/posts/2023/03/28/handling-an-unruly-podcast-queue/",
      "title": "Handling an Unruly Podcast Queue",
      "content_html": "\n\t\t<p>Right now, I am currently subscribed to 170 podcasts. And while I don't necessarily listen to every episode of every podcast I subscribe to, it does lead to my podcast queue to become rather unruly.</p>\n<p>Right now, my queue stands at 283 episodes totaling over 250 hours worth of content. The funny thing is that it was over 900 episodes before I got a new iPhone and ended up clearing out a lot of my queue due to a sync issue with PocketCasts. I probably could have recovered most of it, but given the large number and how old some of the episodes were, I took it as a chance to trim the queue.</p>\n<p>I don't really know what a good solution is. I go through my “new” filter and archive the episodes I know I don't have an interest in, queue the ones I do and see the queue count grow.</p>\n<p>I try to keep up with it, but I don't always get the chance to listen on a regular basis. If I'm deep in thought trying to solve a difficult task at work, music ends up being a better option as I don't have to keep track of the story or discussion. Nothing is more frustrating than missing several minutes worth of discussion because you're focused on something else, then are trying to catch up with what you missed. This is a case where me listening at podcasts at 2x speed might not be the most helpful.</p>\n<p>It's a shame really because many of the podcasts I listen to are interesting and I WANT to listen to them all, but might just be resigned to having a queue that dates back 6+ months. The best “process” I have going at the moment is to just archive the episode I'm listening to if it doesn't grab my attention after 5-10 minutes.</p>\n<p>Are there any tools or apps that you can think of that might help keep my queue a little more organized? I currently use PocketCasts to listen to podcasts with a filter for all new podcasts. I generally add most episodes to the end of the queue so I listen to the oldest episodes first.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/23/",
      "url": "https://kpwags.com/reading-log/23/",
      "title": "Reading Log - March 24, 2023 (#23)",
      "content_html": "\n\t\t<p>You know all those supposedly &quot;good&quot; password rules? Well, they tend not to be so good.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.wsj.com/articles/annoying-password-rules-actually-make-us-less-secure-a05edb70\">Annoying Password Rules Actually Make Us Less Secure</a></h2>\n\t<div class=\"in-depth-meta\">Christopher Mims</div>\n\t<div class=\"in-depth-text\">\n<p>So many of the rules that sites and companies use annoy the living bejeezus out of me. There’s no reason I shouldn’t be able to have a long password with special characters in it…and please let me use a password manager.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.scottohara.me/blog/2023/03/24/search-element.html\">The Search Element</a> <em>Scott O'Hara</em></li>\n<li><a href=\"https://johnnyreilly.com/lighthouse-meet-github-actions\">Lighthouse meet GitHub Actions</a> <em>John Reilly</em></li>\n<li><a href=\"https://blog.ploeh.dk/2023/03/20/on-trust-in-software-development/\">On trust in software development</a> <em>Mark Seemann</em></li>\n<li><a href=\"https://raygun.com/blog/react-debugging-guide/\">The 2023 guide to React debugging</a> <em>Anna Monus</em></li>\n<li><a href=\"https://javascript.plainenglish.io/clean-code-in-typescript-a183d43f3bf0\">Clean Code in TypeScript</a> <em>Kyle Le</em></li>\n<li><a href=\"https://web.dev/6-css-snippets-every-front-end-developer-should-know-in-2023/\">6 CSS snippets every front-end developer should know in 2023</a> <em>Adam Argyle</em></li>\n<li><a href=\"https://damienbod.com/2023/03/20/a-first-look-at-blazor-and-net-8/\">A first look at Blazor and .NET 8</a> <em>Damien Bowden</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://clivethompson.medium.com/maybe-zoom-parties-werent-so-bad-e5e57e1c869c\">Maybe Zoom Parties Weren't So Bad</a> <em>Clive Thompson</em></li>\n<li><a href=\"https://www.techdirt.com/2023/03/20/fcc-staffers-routinely-held-stock-in-telecom-giants-they-regulated/\">FCC Staffers Routinely Held Stock In Telecom Giants They Regulated</a> <em>Karl Bode</em></li>\n<li><a href=\"https://www.bitestring.com/posts/2023-03-19-web-fingerprinting-is-worse-than-I-thought.html\">Web fingerprinting is worse than I thought</a> <em>bitestring.com</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2023/03/antisemitism-on-twitter-has-more-than-doubled-since-elon-musk-took-over/\">Antisemitism on Twitter has more than doubled since Elon Musk took over</a> <em>Carl Miller</em></li>\n<li><a href=\"https://www.techdirt.com/2023/03/21/appeals-court-says-nope-to-florida-governors-stop-woke-law-denies-request-to-lift-injunction-against-it/\">Appeals Court Says Nope To Florida Governor's 'Stop Woke' Law, Denies Request To Lift Injunction Against It</a> <em>Tim Cushing</em></li>\n<li><a href=\"https://blog.mozilla.org/en/mozilla/introducing-mozilla-ai-investing-in-trustworthy-ai/\">Introducing Mozilla.ai: Investing in trustworthy AI</a> <em>Mark Surman</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.counter-strike.net/cs2\">Introducing Counter-Strike 2</a> <em>counter-strike.net</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/articles/that-plum-job-listing-may-just-be-a-ghost-3aafc794\">Job Listings Abound, but Many Are Fake</a> <em>Te—Ping Chen</em></li>\n<li><a href=\"https://www.techdirt.com/2023/03/22/book-publishers-wont-stop-until-libraries-are-dead/\">Book Publishers Won't Stop Until Libraries Are Dead</a> <em>Mike Masnick</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/03/relativity-space-has-a-successful-failure-with-the-debut-of-terran-1/\">Relativity Space has a successful failure with the debut of Terran 1</a> <em>Eric Berger</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://mebfaber.com/2021/08/04/e337-richard-thaler/\">The Meb Faber Show #337: Professor Richard Thaler</a></li>\n<li><a href=\"https://www.jordanharbinger.com/sam-harris-rationally-confronting-the-irrational/\">The Jordan Harbinger Show #698: Sam Harris | Rationally Confronting the Irrational</a></li>\n<li><a href=\"https://www.npr.org/2023/03/21/1164979588/svb-collapse-bailout-startup-founder\">Planet Money #1624: Inside a Bank Run</a></li>\n<li><a href=\"https://longform.org/posts/longform-podcast-496-michael-pollan\">Longform Podcast #496: Michael Pollan</a></li>\n<li><a href=\"https://www.dancarlin.com/product/hardcore-history-68-blitz-human-resources/\">Hardcore History #68: Human Resources</a></li>\n<li><a href=\"https://theathletic.com/podcast/278-luck/\">The Athletic: Luck</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://chasem.co/2023/03/weblogs-as-a-form/\">How blogs shaped the web</a> <em>Chase McCoy</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - Bad Actors</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/N1XBswrzOV8\" title=\"The Menzingers - Bad Actors\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions/",
      "url": "https://kpwags.com/posts/2023/03/19/digging-into-blazor-first-impressions/",
      "title": "Digging Into Blazor - First Impressions",
      "content_html": "\n\t\t<p>I've been hearing a lot of good things about Blazor for a while now and as a .NET developer I figured it was time for me to see what the fuss was about.</p>\n<p>This post will be the first in a multi-part series.</p>\n<section class=\"blog-series\">\n    <h2>Series: Digging into Blazor</h2>\n    <ul class=\"posts\">\n        <li class=\"post\"><span class=\"current\">First Impressions</span></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/04/04/digging-into-blazor-entity-framework\">Integrating with Entity Framework</a></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/07/31/blazor-custom-authentication\">Setting Up Custom Authentication</a></li>\n        <li class=\"post\"><a href=\"https://kpwags.com/posts/2023/09/29/digging-into-blazor-forms\">Forms</a></li>\n    </ul>\n</section>\n<p>To get started, I went through <a href=\"https://dotnet.microsoft.com/en-us/learn/aspnet/blazor-tutorial/intro\">Microsoft's tutorials</a>. Playing around with it, my first thought was this felt kind of similar to my time years ago working with ASP.NET MVC sites. It was different, and it looked different in a good way, but the little bit of familiarity was definitely beneficial as it gave me a good jumping off point.</p>\n<p>After going through the tutorials, I realized I needed something to build. The best way I've found for myself to learn new languages and tools is to build something. Tutorials only go so far. The project I decided to build is an app to inventory my baseball and <a href=\"https://en.wikipedia.org/wiki/Star_Wars_Customizable_Card_Game\">Star Wars Customizable Card Game</a> cards. I recently found a bunch of cards from when I was a kid, so I figured it'd be a fun way to learn a new framework.</p>\n<p>The first thing I did was to figure out the technology I was going to use. To make things simple, I was just going to stick with Microsoft technologies for the core of the app. I was going to store the data with Entity Framework and use Microsoft Identity for user authentication. I'm not sure I really need user authentication for a little side project, but figured “why not?”.</p>\n<p>I'll go into more details in later posts, but suffice it to say, it was both familiar and alien at the same time. The libraries used have been the same ones I've used in both Digital Family Cookbook and my fitness tracker which helped smooth out the differences in usage. But the ways I needed to use them posed some challenges and made my learning curve a tad bit steeper.</p>\n<p>I've also decided to use Tailwind to help with the styling for this project. This is one of the things I kind of miss from working with React, TypeScript &amp; Vite. The build system made it pretty easy to adjust to changes. I'm currently having some issues in bundling my CSS. Part of this is because I'm trying to trim down the Tailwind bundle size by limiting what Tailwind classes are included. I'm sure there's a way to make this easier, but I often find myself having to manually run a <code>yarn</code> command to build the latest CSS based on the classes included. This is probably a little more on me though as I probably need to familiarize myself with some of the internal tooling.</p>\n<p>I've been making a lot of progress over the last few weeks. So much so that I'm actually a little surprised at how easy it is to build things. In my case it helps that I'm familiar with .NET, but I think that bodes well for Blazor. The easier it is to get a minimal viable product (MVP) out the door, the better.</p>\n<p>I'm excited by how nice it is to work in Blazor and am hoping by sharing my experiences starting up, I can help others get off the ground.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/22/",
      "url": "https://kpwags.com/reading-log/22/",
      "title": "Reading Log - March 17, 2023 (#22)",
      "content_html": "\n\t\t<p>New updates about .NET 8 &amp; TypeScript, JavaScript failures &amp; progressive enhancement, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://scribe.rip/@jason.godesky/when-javascript-fails-52eef47e90db\">When JavaScript Fails</a></h2>\n\t<div class=\"in-depth-meta\">Jason Godesky</div>\n\t<div class=\"in-depth-text\">\n<p>I’ve been guilty of not properly handling my site without JavaScript enabled. I didn’t even necessarily thing about what happens if it fails to load at all. It’s important to think of the edge cases to help produce a good experience. There are obviously some functionality that require JavaScript, but that doesn’t mean you should ignore the user and not have some fallback in place, even if it means alerting the user they need to turn on scripts.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://blog.container-solutions.com/why-your-desk-is-the-worst-place-to-work-and-other-life-lessons-from-a-lazy-developer\">Why Your Desk is the Worst Place to Work, and Other Life Lessons from a Lazy Developer</a> <em>Holly Cummins</em></li>\n<li><a href=\"https://andrewlock.net/working-with-git-in-jetbrains-rider/\">Working with Git in JetBrains Rider</a> <em>Andrew Lock</em></li>\n<li><a href=\"https://frankrausch.com/ios-navigation\">Modern iOS Navigation Patterns</a> <em>Frank Rausch</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-ef8-preview-2/\">EF Core 8 Preview 2: Lite and familiar</a> <em>Arthur Vickers</em></li>\n<li><a href=\"https://blogs.windows.com/msedgedev/2023/03/14/taking-control-of-your-applications-title-bar/\">Taking control of your application's title bar</a> <em>Diego Gonzalez</em></li>\n<li><a href=\"https://css-tricks.com/5-mistakes-starting-react/\">5 Mistakes I Made When Starting My First React Project</a> <em>Richard Oliver Bray</em></li>\n<li><a href=\"https://www.adhamdannaway.com/blog/ui-design/16-ui-design-rules\">16 little UI design rules that make a big impact</a> <em>Adham Dannaway</em></li>\n<li><a href=\"https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/\">Announcing TypeScript 5.0</a> <em>Daniel Rosenwasser</em></li>\n<li><a href=\"https://luketheweb.dev/blog/what-is-vite-and-why-should-you-use-it-instead-of-create-react-app\">What is Vite and Why Should You Use It Instead of Create React App?</a> <em>Luke Twomey</em></li>\n<li><a href=\"https://modernfontstacks.com/\">Modern Font Stacks</a> <em>Dan Klammer</em></li>\n<li><a href=\"https://joshcollinsworth.com/blog/great-transitions\">Ten tips for better CSS transitions and animations</a> <em>Josh Collinsworth</em></li>\n<li><a href=\"https://react.dev/blog/2023/03/16/introducing-react-dev\">Introducing react.dev</a> <em>Dan Abramov &amp; Rachel Nabors</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/how-async-await-really-works/\">How Async/Await Really Works in C# - .NET Blog</a> <em>Stephen Toub</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.wired.com/story/why-the-floppy-disk-just-wont-die/\">Why the Floppy Disk Just Won't Die</a> <em>Jacopo Prisco</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.npr.org/sections/money/2023/03/14/1163200179/the-collapse-of-silicon-valley-bank\">The Collapse Of Silicon Valley Bank</a> <em>Bobby Allyn, David Gura, Paddy Hirsch &amp; Greg Rosalsky</em></li>\n<li><a href=\"https://www.axios.com/2023/03/16/the-long-anticipated-office-reckoning-is-upon-us\">The long-anticipated office reckoning is upon us</a> <em>Emily Peck</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/3/14/23639474/floating-solar-panels-power-cities-renewable-energy\">Floating solar panels could completely power thousands of cities</a> <em>Justine Calma</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4257621/2023/03/14/officiating-ncaa-tournament-super-bowl-big-moments/\">What's it like to be an official in the final moments of a huge game? 'I was dead and right'</a> <em>Brandon Quinn</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/03/15/techdirt-podcast-episode-347-why-is-congress-so-wrong-about-section-230/\">Techdirt Podcast #347: Why Is Congress So Wrong About Section 230?</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Jerry Goldsmith - Star Trek: First Credit End Credits</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/q1H_OwK9r5s\" title=\"Jerry Goldsmith - Star Trek: First Credit End Credits\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/21/",
      "url": "https://kpwags.com/reading-log/21/",
      "title": "Reading Log - March 10, 2023 (#21)",
      "content_html": "\n\t\t<p>This week I read about the web becoming more miserable, and dysfunction in D.C. over tech issues.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/2023/2/28/23618804/google-facebook-login-ads-web-design-hell\">I don't want to log in to your website</a></h2>\n\t<div class=\"in-depth-meta\">Elizabeth Lopatto</div>\n\t<div class=\"in-depth-text\">\n<p>The title says it all. If I need to login or enter my email to read your article, I’m not going to. I’ll simply close the tab and move on.</p>\n<blockquote><p>The web is becoming a miserable experience because some salesbro who is trying to meet his KPIs is doing stuff to marginally increase the number of paying customers.</p></blockquote>\n<p>I get that websites need to make money and that ads don’t always cut it…especially when there are so many like myself that block ads. But if I’m just reading a single article, cut me a break.</p>\n<p>And Elizabeth talks about that too.</p>\n<blockquote><p>I understand that. Shit, if I’m reading more than 10 of your articles a month, I probably <em>should</em> subscribe. Fair’s fair, and writers have to eat just like everyone else.</p></blockquote>\n<p>I do subscribe to some sites to support their journalism, but sadly I don’t have the money, nor time to subscribe to everything. I’d like to, but I, and many others can’t.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://arstechnica.com/tech-policy/2023/03/biden-helped-draft-bipartisan-bill-that-could-ban-tiktok-nationwide/\">Biden helped draft bipartisan bill that could ban TikTok nationwide</a></h2>\n\t<div class=\"in-depth-meta\">Ashley Belanger</div>\n\t<div class=\"in-depth-text\">\n<p>I’m not really a fan of TikTok. I don’t have an account and I can’t see any reason that would make me create an account. That said, if the government or other entities are worried about China slurping up all our data, I got news for you…banning TikTok isn’t going to stop them, it’ll just drive them to other sources, like the unregulated data broker industry.</p>\n<p>If the concern is China, the best defense is to pass laws and regulations that target the data brokers. The laws and regulations can have the added benefit of protecting U.S. consumers from those gathering all our data, both foreign and domestic.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.planetgeek.ch/2023/03/01/myths-about-f-imperative-code-is-simpler-than-functional-code-no-not-at-all-but-you-are-more-used-to-it/\">Myths about F#: Imperative code is simpler than functional code! No, not at all, but you are more used to it.</a> <em>(Urs Enzler)</em></li>\n<li><a href=\"https://sixlabors.com/posts/announcing-imagesharp-300/\">Announcing ImageSharp 3.0.0</a> <em>(Six Labors)</em></li>\n<li><a href=\"https://www.joshwcomeau.com/career/clever-code-considered-harmful/\">Clever Code Considered Harmful</a> <em>(Josh W. Comeau)</em></li>\n<li><a href=\"https://blog.ploeh.dk/2023/03/06/warnings-as-errors-friction/\">Warnings-as-errors friction</a> <em>(Mark Seemann)</em></li>\n<li><a href=\"https://www.claudiobernasconi.ch/2023/03/03/the-required-keyword-in-csharp-11/\">The Required Keyword in C# 11</a> <em>(Claudio Bernasconi)</em></li>\n<li><a href=\"https://geoffgraham.me/my-css-tricks-top-10/\">My CSS-Tricks Top 10</a> <em>(Geoff Graham)</em></li>\n<li><a href=\"https://begin.com/blog/posts/2023-02-28-redefining-developer-experience\">Redefining Developer Experience</a> <em>(Cole Peters)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://techcrunch.com/2023/03/01/us-postal-service-change-of-address-fraud/\">The life-upending flaw that USPS won't fix</a> <em>(Zack Whittaker)</em></li>\n<li><a href=\"https://www.techdirt.com/2023/03/01/our-growing-tiktok-moral-panic-still-isnt-addressing-the-actual-problem/\">Our Growing TikTok Moral Panic Still Isn't Addressing The Actual Problem</a> <em>(Karl Bode)</em></li>\n<li><a href=\"https://www.techdirt.com/2023/03/06/ford-submits-a-patent-that-would-allow-cars-to-repossess-themselves/\">Ford Submits A Patent That Would Allow Cars To Repossess Themselves</a> <em>(Tim Cushing)</em></li>\n<li><a href=\"https://www.theverge.com/2023/3/7/23629307/gigi-sohn-withdraws-fcc-commissioner-nomination\">Gigi Sohn withdraws her nomination for President Joe Biden's FCC</a> <em>(Makena Kelly)</em></li>\n<li><a href=\"https://www.npr.org/2023/02/24/1159286436/ai-chatbot-chatgpt-magazine-clarkesworld-artificial-intelligence\">Sci-fi magazine 'Clarkesworld' stops submissions after a rush of AI-made stories</a> <em>(Vincent Acovino, Mary Louise Kelly, &amp; Halimah Abdullah)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.pcgamer.com/simcity-launched-a-decade-ago-and-it-was-so-disastrous-it-killed-the-series/\">SimCity launched a decade ago, and it was so disastrous it killed the series</a> <em>(Callum Bains)</em></li>\n<li><a href=\"https://www.gameinformer.com/2023/03/06/cities-skylines-ii-annnounced-releasing-this-year\">Cities: Skylines II Annnounced, Releasing This Year</a> <em>(Marcus Stewart)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/articles/how-to-fill-an-office-today-waive-the-rent-6ff4f9ec\">How to Fill an Office Today? Waive the Rent</a> <em>(Carol Ryan)</em></li>\n<li><a href=\"https://www.marketplace.org/2023/03/06/immigrants-help-fill-gaps-in-trucking-workforce/\">Immigrants help fill gaps in trucking workforce</a> <em>(Elizabeth Trovall)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/03/nasa-will-target-november-2024-to-send-astronauts-around-the-moon/\">NASA studying unexpected performance of Orion's heat shield ahead of crew mission</a> <em>(Eric Berger)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4285101/2023/03/08/flyers-prospects-artem-anisimov-ahl/\">How Artem Anisimov embraced his role as a mentor to Flyers' AHL prospects</a> <em>(Charlie O'Connor)</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://armoxon.substack.com/p/the-case-for-shunning\">The Case For Shunning</a> <em>(A.R. Moxon)</em></li>\n<li><a href=\"https://ericwbailey.website/published/i-doubled-down-on-rss/\">I doubled-down on RSS</a> <em>(Eric Bailey)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Nothington - The Lies I Need</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/4sPZkQ8RPEw\" title=\"Nothington - The Lies I Need\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/03/06/february-check-in/",
      "url": "https://kpwags.com/posts/2023/03/06/february-check-in/",
      "title": "February Check-In",
      "content_html": "\n\t\t<p>Two months in and the year has been going relatively well. Bummed the Eagles couldn't pull off a Super Bowl win, but no complaints otherwise.</p>\n<h2>Sad Super Bowl</h2>\n<p>I knew facing Patrick Mahomes and the Chiefs was going to be difficult, but the Eagles defense played an awful game and in the end, they couldn't maintain their lead. It was certainly a bummer, but alas.</p>\n<h2>Fitness Goals Coming Along Nicely</h2>\n<p>With regards to my strength training, my switch to <em>nSuns</em> is going well. I've been getting back up to my previous highs and have broken my deadlifts PR by 5 lbs. hitting 1 rep at 390. Currently sitting at 965 lbs. towards the 1,000 lbs. club. Maybe March will be the lucky month. I might drop weights afterwards a tad to focus on getting higher reps, but I'll decide that later.</p>\n<p>With running, the weather has been crazy warm and I've taken advantage of that to run some longer distances. I'd been focusing on running 3 miles per run, this month I was targeting 4+ miles. Managed that on all but one run, and even hit 5 and then 6 miles too. Getting some longer runs in earlier will hopefully help a bit when I go to start training for the marathon later in the year.</p>\n<h2>Traveling to Hershey</h2>\n<p>At the end of the month, Lauren and I drove out to Hershey, Pennsylvania to explore some of their distilleries and breweries, and to see a Lehigh Valley Phantoms hockey game against the local Bears team.</p>\n<p>The hotel we stayed up was awesomely enough within walking distance of some great restaurants and distilleries. We ended up stopping by <a href=\"https://www.midstatedistillery.com/\">Midstate Distillery</a>, <a href=\"https://www.hiddenstillspirits.com/\">Hidden Still Spirits</a>, <a href=\"https://www.tatteredflagsupplydrop.com/\">Tattered Flag</a> &amp; <a href=\"https://troegs.com/\">Troegs</a>. It was a fun trip, and there were more places we would like to see next time we meander out that way.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/J5ewDBb8no-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/J5ewDBb8no-1920.gif 1920w\" /><img alt=\"The Lehigh Valley Phantoms playing the Hershey Bears in a hockey game at the Giant Center in Hershey, Pennsylvania\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/J5ewDBb8no-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<h2>Continuing My Blazor Journey</h2>\n<p>I've continued to work with Blazor in building my card organizer app. I've been really impressed with the ease of which I can build out forms. I'm making good progress and hope to have an MVP out in the next month or so.</p>\n<h2>Work</h2>\n<p>Work has been going well so far this year. I've been working on getting several pages rewritten into React to make it a little easier for my team and the design team to work on them.</p>\n<p>I've also been immersing myself in the database project to help set it up for true integration tests. We've been using mock data which is less than ideal. I've been working with our engineering team to get a docker container set up to allow our integration tests to run as part of our CI/CD process. I'm learning a lot and it's actually a pretty neat process.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I ended up running a little over 31 miles. The upside is that I took advantage of the nicer weather to run longer distances.</li>\n<li><strong>Biking:</strong> Still nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Switched to running a program based off <a href=\"https://liftvault.com/programs/powerlifting/n-suns-lifting-spreadsheets/\">nSuns</a> and ended up setting a new PR of 390 lbs. on deadlifts as well as some 2 and 3 rep PRS on Bench Press &amp; Squats.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/american-nations-a-history-of-the-eleven-rival-regional-cultures-of-north-america-colin-woodard/16638225?ean=9780143122029\">American Nations</a> by Colin Woodard</li>\n<li><a href=\"https://bookshop.org/p/books/liar-s-poker-michael-lewis/8855267?ean=9780393338690\">Liar's Poker</a> by Michael Lewis</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/american-gods-neil-gaiman/6438874?ean=9780063081918\">American Gods</a> by Neil Gaiman</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/reading-log/17\">Reading Log - February 3 (#17)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/18\">Reading Log - February 10 (#18)</a></li>\n<li><a href=\"https://kpwags.com/reading-log/19\">Reading Log - February 17 (#19)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/02/16/luck\">Luck</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li><a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a> - Didn't game much, but still playing through</li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Started <a href=\"https://www.imdb.com/title/tt13991232/\">1883</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt8806524/\">Star Trek: Picard Season 3</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek: Voyager</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt10696784/\">The Harder They Fall</a></li>\n<li><a href=\"https://m.imdb.com/title/tt7657566/\">Death on the Nile</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1615147/\">Margin Call</a></li>\n<li><a href=\"https://www.imdb.com/title/tt5688932/\">Sorry to Bother You</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/20/",
      "url": "https://kpwags.com/reading-log/20/",
      "title": "Reading Log - March 3, 2023 (#20)",
      "content_html": "\n\t\t<p>Due to a trip out of town last weekend, this edition has 2 weeks worth of links!</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/2023/3/3/23623363/microsoft-sony-ftc-activision-blocking-rights-exclusivity\">Sony might be forced to reveal how much it pays to keep games off Xbox Game Pass</a></h2>\n\t<div class=\"in-depth-meta\">Tom Warren</div>\n\t<div class=\"in-depth-text\">\n<p>I’m not much of a fan of Microsoft buying Activision, but if Sony is pulling stuff like this, that should most certainly be brought out to the public…and it should stop.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://defector.com/the-program-must-be-protected\">The Program Must Be Protected</a></h2>\n\t<div class=\"in-depth-meta\">Diana Moskovitz</div>\n\t<div class=\"in-depth-text\">\n<p>I really wish I could say I was surprised by this, but I’m really not. When it comes to sports, winning trumps everything…morals be damned.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/reference-github-issues-and-pull-requests-in-visual-studio/\">Reference GitHub Issues and Pull Requests in Visual Studio</a> <em>(Jessie Houghton)</em></li>\n<li><a href=\"https://kristoffer-strube.dk/post/the-blazor-navigationmanager/\">The Blazor NavigationManager</a> <em>(Kristoffer Strube)</em></li>\n<li><a href=\"https://stenbrinke.nl/blog/taking-ef-core-data-seeding-to-the-next-level-with-bogus/\">Taking Entity Framework Core data seeding to the next level with Bogus</a> <em>(Sander ten Brinke)</em></li>\n<li><a href=\"https://code.tutsplus.com/articles/array-merge-in-javascript--cms-93870\">Merge Arrays in JavaScript: With and Without Duplicates</a> <em>(Divya Dev)</em></li>\n<li><a href=\"https://codeteddy.com/2023/02/14/typecasting-in-c/\">Typecasting in C#</a> <em>(Akhil Mittal)</em></li>\n<li><a href=\"https://devops.com/technical-debt-is-a-major-threat-to-innovation/\">Technical Debt is a Major Threat to Innovation</a> <em>(Mike Vizard)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-1/\">Announcing .NET 8 Preview 1</a> <em>(Jeremy Likness)</em></li>\n<li><a href=\"https://bartwullems.blogspot.com/2023/02/c-11the-scoped-keyword.html\">C# 11 - The scoped keyword</a> <em>(Bart Wullems)</em></li>\n<li><a href=\"https://www.infoq.com/articles/unit-testing-approach/\">The Unit in Unit Testing</a> <em>(Tyson Gern)</em></li>\n<li><a href=\"https://uxdesign.cc/make-it-easier-is-not-a-product-strategy-5d0fdab1f76e\">“Make it easier” is not a product strategy</a> <em>(Pavel Samsonov)</em></li>\n<li><a href=\"https://css-irl.info/resizing-with-css/\">Resizing with CSS</a> <em>(Michelle Barker)</em></li>\n<li><a href=\"https://gapsystudio.com/blog/brutalism-web-design/\">Brutalism Web Design</a> <em>(Gapsy)</em></li>\n<li><a href=\"https://www.builder.io/blog/css-tips-for-better-web-development\">CSS Tips for Better Web Development</a> <em>(Yoav Ganbar)</em></li>\n<li><a href=\"https://jeremybytes.blogspot.com/2023/02/c-var-with-reference-types-is-always.html\">C# “var” with a Reference Type is Always Nullable</a> <em>(Jeremy Bytes)</em></li>\n<li><a href=\"https://jonhilton.net/blazor-united/\">Blazor United - Solving Blazor's biggest challenges?</a> <em>(Jon Hilton)</em></li>\n<li><a href=\"https://www.planetgeek.ch/2023/02/22/myths-about-f-f-is-for-fp-c-for-oop/\">Myths about F#: F# is for FP, C# for OOP! No, F# loves OO</a> <em>(Urs Enzler)</em></li>\n<li><a href=\"https://laurentkempe.com/2023/02/20/refactoring-huge-csharp-code-base-in-minutes/\">Refactoring huge C# code base in minutes</a> <em>(Laurent Kempé)</em></li>\n<li><a href=\"https://alice.pages.igalia.com/blog/how-shadow-dom-and-accessibility-are-in-conflict/\">How Shadow DOM and accessibility are in conflict</a> <em>(Alice Boxhall)</em></li>\n<li><a href=\"https://www.syncfusion.com/blogs/post/handling-http-errors-javascript.aspx\">5 Best Practices in Handling HTTP Errors in JavaScript</a> <em>(Lahiru Lakshan Hewawasam)</em></li>\n<li><a href=\"https://stackoverflow.blog/2023/02/27/stop-saying-technical-debt/\">Stop saying “technical debt”</a> <em>(Chelsea Troy)</em></li>\n<li><a href=\"https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/\">How Rust went from a side project to the world's most-loved programming language</a> <em>(Clive Thompson)</em></li>\n<li><a href=\"https://code-maze.com/charp-difference-between-returning-and-awaiting-a-task/\">Difference Between Returning and Awaiting a Task in C#</a> <em>(Ahsan Ullah)</em></li>\n<li><a href=\"https://www.learmoreseekmore.com/2023/02/part-1-dotnet7-aspnetcore-identity-series-intro-and-project-setup.html\">Asp.Net Core Identity Series.NET 7 Introduction &amp; Project Setup</a> <em>(Naveen Bommidi)</em></li>\n<li><a href=\"https://developer.chrome.com/en/blog/style-queries/\">Getting Started with Style Queries</a> <em>(Una Kravets)</em></li>\n<li><a href=\"https://mattfrisbie.substack.com/p/spy-chrome-extension\">Let's build a Chrome extension that steals everything</a> <em>(Matt Frisbie)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/nuget/write-a-high-quality-readme-for-nuget-packages/\">Write a high-quality README for NuGet packages</a> <em>(Lynn Dai)</em></li>\n<li><a href=\"https://scrollbar.app/\">Scrollbar</a> <em>(Henri Parviainen)</em></li>\n<li><a href=\"https://ericsink.com/native_aot/delegate_i32.html\">Delegates</a> <em>(Erik Sink)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/2/24/23612141/fitbit-google-server-outage-challenges-wearables\">What is going on with Fitbit?</a> <em>(Victoria Song)</em></li>\n<li><a href=\"https://www.ft.com/content/8a2e8442-449e-4dbd-bd6d-2656b4503526\">How Apple captured Gen Z in the US — and changed their social circles</a> <em>(Patrick McGee)</em></li>\n<li><a href=\"https://searchengineland.com/musk-gave-engineers-one-week-to-make-twitters-ad-targeting-work-like-google-393457\">Musk gave engineers one week to make Twitter's ad targeting work like Google</a> <em>(Nicole Farley)</em></li>\n<li><a href=\"https://www.theverge.com/2023/2/23/23610362/spotify-ai-dj-beta-announcement-custom-playlist-feature-personalized\">Spotify's new AI-powered DJ builds and commentates on custom playlists</a> <em>(Jess Weatherbed &amp; James Vincent)</em></li>\n<li><a href=\"https://timkadlec.com/remembers/2023-02-23-investing-in-rss/\">Investing in RSS</a> <em>(Tim Kadlec)</em></li>\n<li><a href=\"https://krebsonsecurity.com/2023/02/hackers-claim-they-breached-t-mobile-more-than-100-times-in-2022/\">Hackers Claim They Breached T-Mobile More Than 100 Times in 2022</a> <em>(Brian Krebs)</em></li>\n<li><a href=\"https://arstechnica.com/information-technology/2023/03/biden-administration-wants-to-hold-companies-liable-for-bad-cybersecurity/\">Biden administration wants to hold companies liable for bad cybersecurity</a> <em>(Dan Goodin)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/23613774/halo-infinite-season-three-trailer-bandit-rifle-community-playlist\">Halo Infinite season 3 is gonna bring everyone back to Halo Infinite</a> <em>(Ari Notis)</em></li>\n<li><a href=\"https://www.polygon.com/23610095/valve-dota-2-huge-ban-trap\">Valve bans 40,000 Dota 2 cheaters through 'honeypot' patch</a> <em>(Nicole Carpenter)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/finance-and-economics/2023/02/16/scrutiny-of-major-crypto-institutions-is-intensifying\">Scrutiny of major crypto institutions is intensifying</a> <em>(The Economist)</em></li>\n<li><a href=\"https://ritholtz.com/2023/02/what-if-dunning-kruger-explains-everything/\">What if Dunning Kruger Explains Everything?</a> <em>(Barry Ritholtz)</em></li>\n<li><a href=\"https://www.economist.com/finance-and-economics/2023/03/02/the-anti-esg-industry-is-taking-investors-for-a-ride\">The anti-ESG industry is taking investors for a ride</a> <em>(The Economist)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/algorithms-may-start-deciding-who-gets-fired/\">Marketplace Tech: Algorithms may start deciding who gets fired</a></li>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/episodes/on-the-media-brooke-the-press-in-war\">On the Media: Brooke on the Press in Times of War</a></li>\n<li><a href=\"https://www.npr.org/2023/03/01/1160397633/congressional-budget-office-medicare-medicaid\">Planet Money #1619: How the CBO estimated Medicare's prescription drug cost</a></li>\n<li><a href=\"https://theathletic.com/4170706/2023/02/14/nfl-black-players-coaches-race/\">Between the Lines Episode 1: How America's biggest game has failed to grapple with its biggest issue</a></li>\n<li><a href=\"https://theathletic.com/4242176/2023/02/24/how-player-activism-in-the-nfl-has-recently-evolved/\">Between the Lines Episode 2: How player activism in the NFL has recently evolved</a></li>\n<li><a href=\"https://theathletic.com/4268811/2023/03/03/clarence-shelmon-nfl-between-the-lines-podcast-episode-3/\">Between the Lines Episode 3: Why a Black coach retired early from the NFL</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/02/28/new-desantis-endorsed-florida-bill-an-outright-attack-on-the-1st-amendment-and-free-speech/\">New DeSantis-Endorsed Florida Bill An Outright Attack On The 1st Amendment And Free Speech</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.polygon.com/23620555/worf-star-trek-picard-season-3-michael-dorn-interview\">Star Trek legend Michael Dorn reflects on Worf's final act in Picard</a> <em>(Dylan Roth)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Angels &amp; Airwaves - The Adventure</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/JMl8cQjBfqk\" title=\"Angels & Airwaves - The Adventure\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/03/01/separating-reading-logs/",
      "url": "https://kpwags.com/posts/2023/03/01/separating-reading-logs/",
      "title": "Separating Reading Logs",
      "content_html": "\n\t\t<p>I just moved my reading logs into their own page and unfortunately I'm dealing with a few side effects caused by it.</p>\n<p>I'm hoping to fix them over the next couple days. The biggest issue is the redirects. Moving the reading logs, I have redirects in place that work locally, but aren't working in production. It's an annoying bug that I'm gonna have to experiment with to fix.</p>\n<p>The other thing I added was additional RSS feeds. The default feed before includes both blog posts and reading logs. I also added feeds for the reading logs and blog posts separately. You can click the RSS feed icon in the site header to choose your feed.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-03-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/19/",
      "url": "https://kpwags.com/reading-log/19/",
      "title": "Reading Log - February 17, 2023 (#19)",
      "content_html": "\n\t\t<p>CSS is finally getting a killer feature, Elon is being Elon &amp; the Supreme Court hears an important Internet case.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://webkit.org/blog/13813/try-css-nesting-today-in-safari-technology-preview/\">Try Out CSS Nesting Today</a></h2>\n\t<div class=\"in-depth-meta\">Jen Simmons</div>\n\t<div class=\"in-depth-text\">\n<p>This makes me so excited. I know it only applies to Safari right now, but this is the last bastion for me to consider SASS or LESS. I’m really looking forward to this reaching Chromium and Firefox.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.polygon.com/23561086/cortana-halo-villain-twist\">Halo dropped the ball on Cortana's villainous twist</a></h2>\n\t<div class=\"in-depth-meta\">Stephen Wilds</div>\n\t<div class=\"in-depth-text\">\n<p>I didn’t hate Halo 5 or it’s story. I didn’t even completely hate the antagonism between Locke and the Master Chief. (I think it could’ve been done better, but that’s another topic) But 343 really missed an opportunity on the Cortana storyline with Halo Infinite.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://jvns.ca/blog/2023/02/16/writing-javascript-without-a-build-system/\">Writing JavaScript Without a Build System</a> <em>(Julia Evans)</em></li>\n<li><a href=\"https://wildermuth.com/2023/02/13/nullable-reference-types-in-csharp/\">Digging Into Nullable Reference Types in C#</a> <em>(Shawn Wildermuth)</em></li>\n<li><a href=\"https://eisenbergeffect.medium.com/hello-web-components-795ed1bd108e\">Hello Web Components</a> <em>(Rob Eisenberg)</em></li>\n<li><a href=\"https://jimmybogard.com/mediatr-12-0-released/\">MediatR 12.0 Released</a> <em>(Jimmy Bogard)</em></li>\n<li><a href=\"https://www.code4it.dev/csharptips/list-pattern\">C# Tip: List Pattern to match an collection against a sequence of patterns</a> <em>(Davide Bellone)</em></li>\n<li><a href=\"https://www.telerik.com/blogs/getting-started-generics-dotnet\">Getting Started with Generics in .NET</a> <em>(Assis Zang)</em></li>\n<li><a href=\"https://nestenius.se/2023/02/02/identityserver-identityresource-vs-apiresource-vs-apiscope/\">IdentityServer - IdentityResource vs. ApiResource vs. ApiScope</a> <em>(Tore Nestenius)</em></li>\n<li><a href=\"https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/\">Web Push for Web Apps on iOS and iPadOS</a> <em>(Brady Eidson &amp; Jen Simmons)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/02/15/engineers-gave-elons-tweets-special-treatment-because-elon-freaked-out-that-a-joe-biden-tweet-got-more-engagement/\">Engineers Gave Elon's Tweets Special Treatment Because Elon Freaked Out That A Joe Biden Tweet Got More Engagement</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2023/02/17/next-week-the-supreme-court-could-destroy-everything-good-about-the-internet/\">Next Week, The Supreme Court Could Destroy Everything Good About The Internet</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.theverge.com/2023/2/15/23599072/microsoft-ai-bing-personality-conversations-spy-employees-webcams\">Microsoft's Bing is an emotionally manipulative liar, and people love it</a> <em>(James Vincent)</em></li>\n<li><a href=\"https://www.theverge.com/2023/2/17/23604664/apple-iphone-ios-16-4-ipad-public-beta-test-update\">iOS 16.4 public beta for iPhone and iPad arrives with new emoji and more</a> <em>(Umar Shakir)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://timharford.com/2023/02/what-economists-get-wrong-about-personal-finance/\">What Economists Get Wrong About Personal Finance</a> <em>(Tim Harford)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/02/the-secret-lives-of-neutron-stars/\">The Secret Lives of Neutron Stars</a> <em>(Sophia Chen)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/02/14/techdirt-podcast-episode-343-congress-v-twitter/\">Techdirt Podcast #343: Congress v. Twitter</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://clivethompson.medium.com/how-to-practice-productive-procrastination-e2522247bd07\">How to Practice &quot;Productive Procrastination&quot;</a> <em>(Clive Thompson)</em></li>\n<li><a href=\"https://www.businessinsider.com/american-drivers-have-a-blinding-headlight-problem-2023-2\">American Drivers Have a Blinding Headlight Problem</a> <em>(Madison Hall)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - I Just Wanna Sell Out My Funeral</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/rwrsrsauHfI\" title=\"The Wonder Years - I Just Wanna Sell Out My Funeral\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-02-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/02/16/luck/",
      "url": "https://kpwags.com/posts/2023/02/16/luck/",
      "title": "Luck",
      "content_html": "\n\t\t<p>I forget what I was reading, but there was a line in it about luck that stuck with me.</p>\n<p>The exact quote eludes me, but it was about how we so often attribute our successes purely to our hard work, grit, and determination, leaving out the role of luck.</p>\n<p>I think about where I am in life, and while I certainly have worked hard, I can't attribute everything I've earned to that hard work. Luck has played a role in me getting to where I am now as well.</p>\n<p>I think about how lucky I am that:</p>\n<ul>\n<li>I was born in a solidly middle class family</li>\n<li>I was born in a country that allowed me to explore a multitude of opportunities</li>\n<li>Both my parents were always there to help and support me</li>\n<li>My Dad was an engineer who was always able to help me with any math and science classes all the way through college.</li>\n<li>My Mom was a teacher who could help me with English and literature classes.</li>\n<li>I grew up never having to worry about food on my plate or a roof over my head.</li>\n</ul>\n<p>And this is just a subset of it all. None of this I had any control over. It just was.</p>\n<p>This is not to say that those who didn't have what I had growing up couldn't achieve what I have, it just made my journey all that much easier. It also makes it all that much more impressive for those that have had more barriers to break through.</p>\n<p>It really makes me count my blessings and be ever more thankful for everything I have.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-02-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/18/",
      "url": "https://kpwags.com/reading-log/18/",
      "title": "Reading Log - February 10, 2023 (#18)",
      "content_html": "\n\t\t<p>Some criticism and defense of React this week.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.zachleat.com/web/react-criticism/\">A Historical Reference of React Criticism</a> - <em>(Zach Leatherman)</em></li>\n<li><a href=\"https://tkdodo.eu/blog/why-react-isnt-dying\">Why React isn't dying</a> <em>(Dominik)</em></li>\n<li><a href=\"https://codeopinion.com/why-is-clean-architecture-so-popular/\">Why is Clean Architecture so Popular?</a> <em>(Derek Comartin)</em></li>\n<li><a href=\"https://herbcaudill.com/words/20190219-rewrite-refactor-reinvent\">Rewrite, refactor, or reinvent?</a> <em>(Herb Caudill)</em></li>\n<li><a href=\"https://andy-bell.co.uk/my-favourite-3-lines-of-css/\">My favourite 3 lines of CSS</a> <em>(Andy Bell)</em></li>\n<li><a href=\"https://www.syncfusion.com/blogs/post/10-tips-and-tricks-to-handle-javascript-objects.aspx\">10 Tips and Tricks to Handle JavaScript Objects</a> <em>(Charuka Herath)</em></li>\n<li><a href=\"https://www.betterbydesign.cc/p/the-10-types-of-tech-debt-that-will\">The 10 types of tech debt that have broken my creative heart</a> <em>(Patrick Morgan)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/02/09/1155650909/google-chatbot--error-bard-shares\">Google's AI chatbot, Bard, sparks a $100 billion loss in Alphabet shares</a> <em>(Emily Olsen)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://slate.com/business/2023/01/electric-cars-hummer-ev-tax-fees-weight-joe-biden.html\">If You Want a Car This Heavy, You Should Pay Through the Nose</a> <em>(David Zipper)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.scientificamerican.com/article/light-pollution-is-dimming-our-view-of-the-sky-and-its-getting-worse/\">Light Pollution Is Dimming Our View of the Sky, and It's Getting Worse</a> <em>(Phil Plait)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4159445/2023/02/07/mlb-expansion-geographic-realignment/\">MLB expansion should include geographic realignment - so let's build new divisions</a> <em>(Jim Bowden)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/01/27/1152015250/economics-papers-nigeria-church-vietnam-china-sweden\">Planet Money #1610: Three economists on the econ papers that changed their lives</a></li>\n<li><a href=\"https://www.smashingsecurity.com/308-jail-after-vpn-fail-criminal-messaging-apps-and-wolf-crying-watches/\">Smashing Security #308: Jail after VPN fail, criminal messaging apps, and wolf-crying watches</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - Little Life</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/1xAZGEXUGrI\" title=\"Frank Turner - Little Life\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-02-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/02/04/january-check-in/",
      "url": "https://kpwags.com/posts/2023/02/04/january-check-in/",
      "title": "January Check-In",
      "content_html": "\n\t\t<p>It seems like a new year just started and already we're one month in...</p>\n<h2>Getting Back into Fitness</h2>\n<p>Not that I really stopped last year, but I started a bigger emphasis on it this year. I've made a concerted effort to drink less alcohol and try to limit my snacking. So far it's been working. I didn't do <em>Dry January</em> but I did a better job of not overindulging on the weekends.</p>\n<p>With the nice weather, I've also been getting more runs in. I managed 48 miles in January, somehow running in the high 40s and low 50s some days.</p>\n<p>With regards to lifting, I switched back to running an <em>nSuns</em> based routine. I'm putting in more sets and reps and have been getting back to my personal bests. I'm 100 pounds away from my goal of joining the 1,000 pound club!</p>\n<h2>Picking Up Blazor</h2>\n<p>As a .NET developer, Blazor has been on my radar for a little while now. I decided to play around with it and learn by building a web app to go through and organize my baseball card collection (because why not?). I haven't gotten that far and I'm actually toying with the idea of streaming a little bit of it on Twitch or something.</p>\n<h2>Go Birds</h2>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/Z_qxA4xJ8Q-600.webp 600w\" /><img alt=\"Mac from It's Always Sunny in Philadelphia shouting 'Go Birds'\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/Z_qxA4xJ8Q-600.gif\" width=\"600\" height=\"300\" /></picture></p>\n<p>The Philadelphia Eagles are back in the Super Bowl facing off against the Kansas City Chiefs. Grease those light posts!</p>\n<h2>Monthly Round-Up</h2>\n<h3>🏃🏼‍♂️ Running &amp; Biking</h3>\n<ul>\n<li><strong>Running:</strong> I ended up running 48 miles this month</li>\n<li><strong>Biking:</strong> Need to get on this</li>\n</ul>\n<h3>🏋🏼‍♂️ Lifting</h3>\n<ul>\n<li>Switch programs and have quickly started to get my lifts back to my all-time highs.</li>\n</ul>\n<h3>📚 Reading</h3>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/snow-crash-neal-stephenson/7327954?ean=9780553380958\">Snow Crash</a> by Neal Stephenson</li>\n<li><a href=\"https://bookshop.org/p/books/the-bond-king-how-one-man-made-a-market-built-an-empire-and-lost-it-all-mary-childs/15873505?ean=9781250120847\">The Bond King: How One Man Made a Market, Built an Empire, and Lost It All</a> by Mary Childs</li>\n<li><a href=\"https://bookshop.org/p/books/the-bomb-presidents-generals-and-the-secret-history-of-nuclear-war-fred-kaplan/7774644?ean=9781982107307\">The Bomb: Presidents, Generals, and the Secret History of Nuclear War</a> by Fred Kaplan</li>\n<li><a href=\"https://bookshop.org/p/books/the-bomber-mafia-a-dream-a-temptation-and-the-longest-night-of-the-second-world-war-malcolm-gladwell/17377135?ean=9780316296816\">The Bomber Mafia: A Dream, a Temptation, and the Longest Night of the Second World War</a> by Malcolm Gladwell</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/american-nations-a-history-of-the-eleven-rival-regional-cultures-of-north-america-colin-woodard/16638225?ean=9780143122029\">American Nations: A History of the Eleven Rival Regional Cultures of North America</a> by Colin Woodard</li>\n</ul>\n<h3>✍🏻 Writing</h3>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/posts/2023/01/06/reading-log-january-6-13\">January 6 (#13)</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/01/13/reading-log-january-13-14\">January 13 (#14)</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/01/20/reading-log-january-20-15\">January 20 (#15)</a></li>\n<li><a href=\"https://kpwags.com/posts/2023/01/27/reading-log-january-27-16\">January 27 (#16)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2023/01/02/2022-retrospective\">2022 and Looking onto 2023</a></li>\n<li>Wrote about the <a href=\"https://kpwags.com/posts/2023/01/07/books-i-read-in-2022\">books I read in 2022</a></li>\n</ul>\n<h3>🎮 Gaming</h3>\n<ul>\n<li>Continued <a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a></li>\n<li>Played a bit of <a href=\"https://www.xbox.com/en-us/games/store/goldeneye-007/9n6639h7vgh4\">GoldenEye 007</a></li>\n</ul>\n<h2>📺 Watched</h2>\n<ul>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek: Voyager</a></li>\n</ul>\n<h3>🎬 Movies</h3>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt11564570/\">Glass Onion</a></li>\n<li><a href=\"https://www.imdb.com/title/tt8041270/\">Jurassic World: Dominion</a></li>\n<li><a href=\"https://www.imdb.com/title/tt10304142/\">Amsterdam</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1302006/\">The Irishman</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0109445/\">Clerks</a></li>\n<li><a href=\"https://www.imdb.com/title/tt14826022/\">You People</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-02-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/02/03/building-a-stats-page/",
      "url": "https://kpwags.com/posts/2023/02/03/building-a-stats-page/",
      "title": "Building a Stats Page",
      "content_html": &lt;p&gt;It’s a secret to everyone! This post is for RSS subscribers only. &lt;a href=&quot;https://kpwags.com/rss-club/&quot;&gt;Read more about RSS Club&lt;/a&gt;.&lt;/p&gt;"\n\t\t<p><em>This post is for the <a href=\"https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club\">Secret RSS Club Readers</a>.</em></p>\n<p>With the rebirth of personal sites as a content platform, I’ve seen a lot of people making a page dedicated to different statistics about their sites. I figured it was time for me to get in on the action.</p>\n<p>When I first thought to do this, I wasn’t sure what stats to include. I don’t have analytics on my site as I question the privacy implications. The only initial thought I had was posts per year. That was something I could easily gather given that all my posts are in a single folder and all of them have their date in both their filename and their metadata.</p>\n<h2>Posts by Year</h2>\n<p>The first task was to get a list of all my posts, this is pretty simple since I already do this to load my posts.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getStats <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> Stats <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> posts <span class=\"token operator\">=</span> <span class=\"token function\">getAllPosts</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        PostsPerYear<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The next step was to go through the posts and break down the years and the number of posts per year.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> getPostYear <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>postDate<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">=></span> <span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>postDate<span class=\"token punctuation\">.</span><span class=\"token function\">substring</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getPostsPerYear <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>posts<span class=\"token operator\">:</span> BlogPost<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> PostsPerYear<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> allYears <span class=\"token operator\">=</span> posts<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">getPostYear</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> years <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Set</span><span class=\"token punctuation\">(</span>allYears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> postsPerYear<span class=\"token operator\">:</span> PostsPerYear<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> years<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        postsPerYear<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            year<span class=\"token operator\">:</span> years<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n            count<span class=\"token operator\">:</span> posts<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">getPostYear</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> years<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> postsPerYear<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The first thing I do is get a list of the years from all the posts. There will be a lot of duplicates here, so I use JavaScript’s <code>Set</code> object to create a unique list.</p>\n<h3>An Aside</h3>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> years <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Set</span><span class=\"token punctuation\">(</span>allYears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></code></pre>\n<p>By passing in an array to the <code>Set</code> constructor, and spreading it into an array, it will remove duplicates and create a distinct list...quite useful.</p>\n<h3>Back to the Point</h3>\n<p>At this point I have an array of years with their associated number of posts</p>\n<pre class=\"language-json\" tabindex=\"0\"><code class=\"language-json\"><span class=\"token punctuation\">[</span>\n\t<span class=\"token punctuation\">{</span> year<span class=\"token operator\">:</span> <span class=\"token number\">2013</span><span class=\"token punctuation\">,</span> count<span class=\"token operator\">:</span> <span class=\"token number\">11</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">{</span> year<span class=\"token operator\">:</span> <span class=\"token number\">2014</span><span class=\"token punctuation\">,</span> count<span class=\"token operator\">:</span> <span class=\"token number\">14</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t...\n\t<span class=\"token punctuation\">{</span> year<span class=\"token operator\">:</span> <span class=\"token number\">2023</span><span class=\"token punctuation\">,</span> count<span class=\"token operator\">:</span> <span class=\"token number\">6</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre>\n<p>So at this point, my <code>stats.ts</code> library file looks like this:</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getStats <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> Stats <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> posts <span class=\"token operator\">=</span> <span class=\"token function\">getAllPosts</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        PostsPerYear<span class=\"token operator\">:</span> <span class=\"token function\">getPostsPerYear</span><span class=\"token punctuation\">(</span>posts<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I then can take that data and pass it into a component to create a nice graphic. More on that later.</p>\n<h2>Most Popular Tags</h2>\n<p>While working on the years, I realized that when I converted my site to run on [Next.js], I added tags to all of my posts. While there are many tags I’ve used, I figured the ten most popular could be a good item to show.</p>\n<p>This one was going to prove to be a little more challenging. For reference, each blog post has an array of tags for it.</p>\n<pre class=\"language-json\" tabindex=\"0\"><code class=\"language-json\"><span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'Reading Log'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'reading-log' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'Twitter'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'twitter' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'C#'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'csharp' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> '.NET'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> '.net' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'CSS'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'css' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'Unit Testing'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'unit-testing' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'NASA'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'nasa' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> 'JWST'<span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> 'jwst' <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre>\n<p>This is an example from my [Reading Log - January 20 (#15)] post. Each tag has 2 properties. The display name, and the URL slug that corresponds to it. I’ve toyed with trying to auto-generate it, but this has worked for me thus far.</p>\n<p>To find the tags most commonly used, I wanted to create an array of tags with their associated post count.</p>\n<pre class=\"language-json\" tabindex=\"0\"><code class=\"language-json\"><span class=\"token punctuation\">[</span>\n\t<span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> <span class=\"token string\">\"Reading Log\"</span><span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> <span class=\"token string\">\"reading-log\"</span><span class=\"token punctuation\">,</span> count<span class=\"token operator\">:</span> <span class=\"token number\">42</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> <span class=\"token string\">\"Life\"</span><span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> <span class=\"token string\">\"life\"</span><span class=\"token punctuation\">,</span> count<span class=\"token operator\">:</span> <span class=\"token number\">40</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t...\n\t<span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> <span class=\"token string\">\"Monthly Check-In\"</span><span class=\"token punctuation\">,</span> url<span class=\"token operator\">:</span> <span class=\"token string\">\"monthly-check-in\"</span><span class=\"token punctuation\">,</span> count<span class=\"token operator\">:</span> <span class=\"token number\">16</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre>\n<p>By default, I only wanted the top 10 posts, so I put a limit on the function call and defaulted it to 10. I’m not sure if I’ll use this elsewhere so I figured I’d make it a little extensible.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> getPopularTags <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>posts<span class=\"token operator\">:</span> BlogPost<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> limit <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> PostsPerTag<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> postsPerTag<span class=\"token operator\">:</span> PostsPerTag<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">let</span> tagArray<span class=\"token operator\">:</span> BlogTag<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> posts<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> tags <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> posts<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n        tagArray <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>tagArray<span class=\"token punctuation\">,</span> <span class=\"token operator\">...</span>tags<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">const</span> uniqueTags <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Set</span><span class=\"token punctuation\">(</span>tagArray<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> t<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    uniqueTags<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>tagUrl<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        postsPerTag<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            name<span class=\"token operator\">:</span> tagArray<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> t<span class=\"token punctuation\">.</span>url <span class=\"token operator\">===</span> tagUrl<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span>\n            url<span class=\"token operator\">:</span> tagUrl<span class=\"token punctuation\">,</span>\n            count<span class=\"token operator\">:</span> tagArray<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> t<span class=\"token punctuation\">.</span>url <span class=\"token operator\">===</span> tagUrl<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> postsPerTag<span class=\"token punctuation\">.</span>length <span class=\"token operator\">&lt;=</span> limit\n        <span class=\"token operator\">?</span> postsPerTag\n            <span class=\"token punctuation\">.</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>count <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">)</span>\n        <span class=\"token operator\">:</span> postsPerTag\n            <span class=\"token punctuation\">.</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span>count <span class=\"token operator\">-</span> a<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">slice</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> limit<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The way the function works is it goes through all the posts and adds all the tags to a giant array. I then use the same <code>Set</code> command to trim that array to unique tags based on the URL slug. From there, I go through each unique tag and create the array of tags with their associated post count.</p>\n<p>At the very end I return either the entire array sorted by post count descending, or the first ten posts sorted. That gets sent to component to be rendered on the page.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getStats <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> Stats <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> posts <span class=\"token operator\">=</span> <span class=\"token function\">getAllPosts</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        PostsPerYear<span class=\"token operator\">:</span> <span class=\"token function\">getPostsPerYear</span><span class=\"token punctuation\">(</span>posts<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        MostPopularTags<span class=\"token operator\">:</span> <span class=\"token function\">getPopularTags</span><span class=\"token punctuation\">(</span>posts<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<h2>Putting It All Together</h2>\n<p>The final step was to build by <a href=\"https://kpwags.com/stats\">stats</a> page.</p>\n<p>On the stats page, the first thing I want to do is retrieve the stats in the <code>getStaticProps()</code> call.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getStaticProps<span class=\"token operator\">:</span> <span class=\"token function-variable function\">GetStaticProps</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> stats <span class=\"token operator\">=</span> <span class=\"token function\">getStats</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        props<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n            stats<span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Returning that to the page I then created 2 components to display the stats in chart form.</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Posts Per Year</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">PostsPerYearCharts</span></span> <span class=\"token attr-name\">stats</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>stats<span class=\"token punctuation\">.</span>PostsPerYear<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>hr</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>statsSeparator<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Most Popular Tags</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">MostPopularTagsChart</span></span> <span class=\"token attr-name\">stats</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>stats<span class=\"token punctuation\">.</span>MostPopularTags<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span></code></pre>\n<h3>Posts Per Year</h3>\n<p>Let’s first look at the posts per year chart.</p>\n<p>The first thing I’ll need to do is to transform the data into something I can use to display on the page. I’ve stolen the CSS from my <a href=\"https://kpwags.com/progress/2023\">goal progress</a> page for the charts. Basically I have some <code>div</code> elements that span the full width of the chart container. I opted to have the year with the most posts span the full width and have all the other years span a percentage based on that.</p>\n<p>So the first thing I need to do is figure out the year with the highest post count, or more specifically, what that post count is. There might be a more efficient\tway to do this, but at this point, this’ll do. I go through each year in the <code>stats</code> object and check to see if the count is greater than the current max. If it is, I re-assign the value to <code>max</code>, if it isn’t, I move on. Once all years are looped through, I just return the highest number that will be assigned to the <code>max</code> variable.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> getMaxCount <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> max <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> stats<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> count <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> stats<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>count <span class=\"token operator\">></span> max<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            max <span class=\"token operator\">=</span> count<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> max<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The next step will be to create the data for the graph. Typescript conveniently allows you to extend interfaces, so I created a new type based on the <code>PostsPerYear</code> type.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">PostsPerYearGraph</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">PostsPerYear</span> <span class=\"token punctuation\">{</span>\n    percentage<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n    color<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I end up with a type that is defined as:</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">PostsPerYearGraph</span> <span class=\"token punctuation\">{</span>\n    year<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n    count<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n    color<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n    percentage<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>Now let’s build the data.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> availableColors <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token string\">'#ff0000'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#e76000'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#ddb400'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#15931a'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#2659e5'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#aa00ff'</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">calculateData</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> maxCount <span class=\"token operator\">=</span> <span class=\"token function\">getMaxCount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> chartData<span class=\"token operator\">:</span> PostsPerYearGraph<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> colorIdx <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> stats<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> year<span class=\"token punctuation\">,</span> count <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> stats<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>colorIdx <span class=\"token operator\">>=</span> availableColors<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            colorIdx <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        chartData<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            year<span class=\"token punctuation\">,</span>\n            count<span class=\"token punctuation\">,</span>\n            color<span class=\"token operator\">:</span> availableColors<span class=\"token punctuation\">[</span>colorIdx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n            percentage<span class=\"token operator\">:</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">round</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">/</span> maxCount<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        colorIdx <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">setYearData</span><span class=\"token punctuation\">(</span>chartData<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>You can see at the beginning of <code>calculateData()</code> I get the max number using the <code>getMaxCount</code> function defined above. I then create an empty array for the chart data. I go through the years and add the data to that array. The 2 complications are that I want separate colors for each bar, and that I need to calculate the width of the bar.</p>\n<p>The color I calculate by having a second loop through an array of colors I wish to use. In this case, it’s the rainbow (save for indigo)! The percentage is a math calculation. What I want for the percentage is “What is the percentage of the current year of the highest count?” In this case I divide the count by the max and multiply by 100, and then round it using the <code>Math.round</code> function.</p>\n<p>I can then take the data and pass it into the JSX to render to the screen.</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>mainContainer<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token punctuation\">{</span>yearData<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">d</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>year<span class=\"token punctuation\">}</span></span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>container<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>barTitle<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>year<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>mobileStats<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">&amp;nbsp;(</span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\">)</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>bar<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>innerBar<span class=\"token punctuation\">}</span></span> <span class=\"token attr-name\">style</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">backgroundColor</span><span class=\"token operator\">:</span> d<span class=\"token punctuation\">.</span>color<span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">width</span><span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>d<span class=\"token punctuation\">.</span>percentage<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">%</span><span class=\"token template-punctuation string\">`</span></span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>barLegend<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre>\n<p>Here I loop through the yearly data returned by the <code>calculateData()</code> function and create the different bars. I use the inline styles to define both the <code>width</code> and the <code>backgroundColor</code> for the bar.</p>\n<p>The end result looks nice.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/428zMW7l8S-1008.webp 1008w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/428zMW7l8S-1008.gif 1008w\" /><img alt=\"The end result of my posts per year chart showing horizontal bars representing the number of posts per year\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/428zMW7l8S-1008.png\" width=\"1008\" height=\"802\" /></picture></p>\n<h3>Most Popular Tags</h3>\n<p>The popular tags charts is almost an exact duplicate. The only difference is that I also assign the URL slug of the tag to the data so that clicking on the tag name on the graph would take the user to the appropriate page showing all posts with the given tag.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> availableColors <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token string\">'#ff0000'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#e76000'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#ddb400'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#15931a'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#2659e5'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'#aa00ff'</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> getMaxCount <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> max <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> stats<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> count <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> stats<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>count <span class=\"token operator\">></span> max<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            max <span class=\"token operator\">=</span> count<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> max<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">calculateData</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> maxCount <span class=\"token operator\">=</span> <span class=\"token function\">getMaxCount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> chartData<span class=\"token operator\">:</span> MostPopularTagsGraph<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> colorIdx <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> stats<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> tag<span class=\"token punctuation\">,</span> url<span class=\"token punctuation\">,</span> count <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> stats<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>colorIdx <span class=\"token operator\">>=</span> availableColors<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            colorIdx <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        chartData<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            name<span class=\"token operator\">:</span> tag<span class=\"token punctuation\">,</span>\n            url<span class=\"token punctuation\">,</span>\n            count<span class=\"token punctuation\">,</span>\n            color<span class=\"token operator\">:</span> availableColors<span class=\"token punctuation\">[</span>colorIdx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n            percentage<span class=\"token operator\">:</span> count <span class=\"token operator\">===</span> maxCount <span class=\"token operator\">?</span> <span class=\"token number\">100</span> <span class=\"token operator\">:</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">round</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">/</span> maxCount<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        colorIdx <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">setTagData</span><span class=\"token punctuation\">(</span>chartData<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">calculateData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>mainContainer<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n        <span class=\"token punctuation\">{</span>tagData<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>d<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n            <span class=\"token operator\">&lt;</span>div key<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span> className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>container<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span>p className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>barTitle<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n                    <span class=\"token operator\">&lt;</span>Link href<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">/tag/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>d<span class=\"token punctuation\">.</span>url<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n                        <span class=\"token operator\">&lt;</span>a<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>a<span class=\"token operator\">></span>\n                    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Link<span class=\"token operator\">></span>\n                    <span class=\"token operator\">&lt;</span>span className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>mobileStats<span class=\"token punctuation\">}</span><span class=\"token operator\">></span><span class=\"token operator\">&amp;</span>nbsp<span class=\"token punctuation\">;</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>span<span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>bar<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n                    <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>innerBar<span class=\"token punctuation\">}</span> style<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> backgroundColor<span class=\"token operator\">:</span> d<span class=\"token punctuation\">.</span>color<span class=\"token punctuation\">,</span> width<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>d<span class=\"token punctuation\">.</span>percentage<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">%</span><span class=\"token template-punctuation string\">`</span></span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span>p className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>styles<span class=\"token punctuation\">.</span>barLegend<span class=\"token punctuation\">}</span><span class=\"token operator\">></span><span class=\"token punctuation\">{</span>d<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The end result is very similar.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/XqHxckEqMt-1046.webp 1046w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/XqHxckEqMt-1046.gif 1046w\" /><img alt=\"The end result of my most popular tags chart displaying horizontal bars representing posts per tag\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/XqHxckEqMt-1046.png\" width=\"1046\" height=\"754\" /></picture></p>\n<p>It was a fun little project. You can view the full page <a href=\"https://kpwags.com/stats\">here</a>.</p>\n<p>Also, as a reminder, you can view the code to my blog on <a href=\"https://github.com/kpwags/kpwags.com\">GitHub</a>.</p>\n<p>Feel free to reach out to me through the comments or on <a href=\"https://hachyderm.io/@kpwags\">Mastodon</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-02-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/17/",
      "url": "https://kpwags.com/reading-log/17/",
      "title": "Reading Log - February 3, 2023 (#17)",
      "content_html": "\n\t\t<p>This week we look at the next version of TypeScript, the new version of EntityFramework, a big acquisition at Netlify and more.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://itnext.io/make-your-react-tests-easier-to-write-understand-and-maintain-9fa769381d62\">Make Your React Tests Easier to Write, Understand and Maintain</a> <em>(Andrew Smith)</em></li>\n<li><a href=\"https://www.bekk.christmas/post/2022/20/you-should-write-react-in-fsharp\">You should write React in F#</a> <em>(Bjørn-Ivar Strøm)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/\">Announcing TypeScript 5.0 Beta</a> <em>(Daniel Rosenwasser)</em></li>\n<li><a href=\"https://www.telerik.com/blogs/whats-new-ef-core-7.0\">What's New in EF Core 7.0</a> <em>(Assis Zang)</em></li>\n<li><a href=\"https://www.telerik.com/blogs/making-asynchronous-breakfast-dotnet\">Making an Asynchronous Breakfast in .NET</a> <em>(Assis Zang)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/02/03/colorado-supreme-court-to-hear-challenge-of-reverse-keyword-warrant-served-to-google/\">Colorado Supreme Court To Hear Challenge Of Reverse Keyword Warrant Served To Google</a> <em>(Tim Cushing)</em></li>\n<li><a href=\"https://www.nytimes.com/2023/02/03/health/apple-watch-911-emergency-call.html\">'My Watch Thinks I'm Dead'</a> <em>(Matt Richtel)</em></li>\n<li><a href=\"https://www.techdirt.com/2023/02/03/google-tells-court-that-gop-should-look-at-its-own-email-practices-rather-than-blaming-gmail/\">Google Tells Court That GOP Should Look At Its Own Email Practices Rather Than Blaming Gmail</a> <em>(Mike Masnick)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://kotaku.com/last-of-us-hbo-nick-offerman-bill-banjo-kazooie-n64-1850065488\">Last Of Us Star Was Afraid This N64 Classic Would Ruin His Life</a> <em>(Levi Winslow)</em></li>\n<li><a href=\"https://www.theverge.com/2023/2/3/23583414/myst-mobile-ios-ipad-remastered-3d-cyan\">A remastered version of Myst is coming to iOS</a> <em>(Allison Johnson)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.etoro.com/en-us/news-and-analysis/market-insights/earnings-vs-economic-recession-whats-the-difference/\">Earnings vs. economic recession: What's the difference?</a> <em>(Callie Cox)</em></li>\n<li><a href=\"https://www.netlify.com/press/netlify-acquires-gatsby-inc-to-accelerate-adoption-of-composable-web-architectures/\">Netlify Acquires Gatsby</a> <em>(Netlify)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.science.org/content/article/light-pollution-drowning-starry-night-sky-faster-thought\">Light pollution is drowning the starry night sky faster than thought</a> <em>(Joshua Sokol)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.economist.com/alcohol-pod\">Babbage: How alternatives to alcohol could save lives</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Slipknot vs. Justin Bieber - Psychosocial Baby</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/kspPE9E1yGM\" title=\"Slipknot vs. Justin Bieber - Psychosocial Baby\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-02-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/16/",
      "url": "https://kpwags.com/reading-log/16/",
      "title": "Reading Log - January 27, 2023 (#16)",
      "content_html": "\n\t\t<p>A lot of CSS related posts this week. Also, Astro v2.0 was released this week. I've been toying with building something in it, and it looks like it's added a bunch of good stuff. And one of my favorite games as a kid has been re-launched on the Xbox and the Switch!</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://dev.to/antoinecoulon/dont-target-100-coverage-387o\">Don't target 100% coverage</a></h2>\n\t<div class=\"in-depth-meta\">Antoine Toulon</div>\n\t<div class=\"in-depth-text\">\n<p>I gave a talk to my company about unit testing last year and one thing that stood out to me was the idea that 100% coverage doesn’t always mean “good code”, but low coverage is a sign of potential issues. Antoine echoes that sentiment and is right here pointing out that just because you have 100% coverage, doesn’t mean that the tests are useful.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/\">20 Things I've Learned in my 20 Years as a Software Engineer</a> <em>(Justin Etheredge)</em></li>\n<li><a href=\"https://blog.silverorange.com/efficiency-over-performance\">Efficiency over performance</a> <em>(Steven Garrity)</em></li>\n<li><a href=\"https://anthonyhobday.com/sideprojects/saferules/\">Visual design rules you can safely follow every time</a> <em>(Anthony Hobday)</em></li>\n<li><a href=\"https://www.stefanjudis.com/blog/a-css-based-background-grid-generator/\">A CSS-based background grid generator</a> <em>(Stefan Judis)</em></li>\n<li><a href=\"https://daverupert.com/2023/01/css-wishlist-2023/\">CSS Wishlist 2023</a> <em>(Dave Rupert)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/keyboard-shortcuts-to-master-your-git-flow-in-visual-studio/\">Keyboard Shortcuts to Master Your Git Flow in Visual Studio</a> <em>(Jessie Houghton)</em></li>\n<li><a href=\"https://astro.build/blog/astro-2/\">Astro 2.0</a> <em>(Fred Schott)</em></li>\n<li><a href=\"https://ishadeed.com/article/conditional-css/\">Conditional CSS</a> <em>(Ahmad Shadeed)</em></li>\n<li><a href=\"https://andrewlock.net/series/behind-the-scenes-of-minimal-apis/\">Behind the scenes of minimal APIs</a> <em>(Andrew Lock)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2023/1/20/23563851/google-search-ai-chatbot-demo-chatgpt\">Google is freaking out about ChatGPT</a> <em>(Richard Lawler &amp; James Vincent)</em></li>\n<li><a href=\"http://www.righto.com/2023/01/inside-globus-ink-mechanical-navigation.html\">Inside the Globus INK: a mechanical navigation computer for Soviet spaceflight</a> <em>(Ken Shirriff]</em></li>\n<li><a href=\"https://www.theverge.com/2023/1/24/23568901/microsoft-edge-tab-split-window-feature\">Microsoft Edge will soon let you split two tabs in a single window</a> <em>(Tom Warren)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/23573980/goldeneye-controls-switch-xbox\">GoldenEye controls better on Xbox than on Switch</a> <em>(Old Welsh)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/leaders/2023/01/26/the-humbling-of-goldman-sachs?etear=nl_weekly_1\">The humbling of Goldman Sachs</a> <em>(The Economist)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.planetary.org/articles/a-deep-dive-into-the-neptune-system-with-jwst\">A deep dive into the Neptune system with JWST</a> <em>(Heidi Hammer &amp; Naomi Rowe-Gurney)</em></li>\n<li><a href=\"https://www.scientificamerican.com/article/volcanic-activity-on-mars-upends-red-planet-assumptions/\">Volcanic Activity on Mars Upends Red Planet Assumptions</a> <em>(Phil Plait)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/01/20/1150332566/charles-ponzi-financial-scam\">Planet Money #1608: Charles Ponzi's scheme</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://georgestocker.com/2023/01/22/can-we-kill-the-word-project-please/\">Can we kill the word 'project' please?</a> <em>(George Stocker)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>GoldenEye 007 N64 - Full Soundtrack</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/M1MPVbZ-vTg\" title=\"GoldenEye 007 N64 - Full Soundtrack\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/15/",
      "url": "https://kpwags.com/reading-log/15/",
      "title": "Reading Log - January 20, 2023 (#15)",
      "content_html": "\n\t\t<p>RIP Tweetbot.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://tapbots.com/tweetbot/\">In Memory of Tweetbot</a></h2>\n\t<div class=\"in-depth-meta\">Tapbots</div>\n\t<div class=\"in-depth-text\">\n<p>Tweetbot was how I almost always consumed Twitter. I can’t imagine the service without it. I’ve been using Ivory by Tapbots for Mastodon and it’s amazing.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.fearofoblivion.com/asp-net-core-integration-testing\">Integration Testing ASP.NET Core APIs incl. auth and database</a> <em>(Chris Klug)</em></li>\n<li><a href=\"https://chriscoyier.net/2023/01/12/a-perfect-ci-process/\">A Perfect CI Process</a> <em>(Chris Coyier)</em></li>\n<li><a href=\"https://css-tricks.com/has-is-an-unforgiving-selector/\">:has is an unforgiving selector</a> <em>(Geoff Graham)</em></li>\n<li><a href=\"https://rhythmandbinary.com/post/2023-01-10-writing-custom-hooks-with-react\">Writing Custom Hooks with React</a> <em>(Andrew Evans)</em></li>\n<li><a href=\"https://davidwalsh.name/fetch-with-timeout\">fetch with Timeout</a> <em>(David Walsh)</em></li>\n<li><a href=\"https://developers.redhat.com/articles/2023/01/11/5-new-advanced-features-improving-c-11\">Some more C# 11</a> <em>(Tom Deseyn)</em></li>\n<li><a href=\"https://blog.janestreet.com/the-joy-of-expect-tests/\">What if writing tests was a joyful experience?</a> <em>(James Somers)</em></li>\n<li><a href=\"https://blog.alexewerlof.com/p/tech-debt-day\">We invested 10% to pay back tech debt; Here's what happened</a> <em>(Alex Ewerlöf)</em></li>\n<li><a href=\"https://blog.bitsrc.io/why-is-my-jest-suite-so-slow-2a4859bb9ac0\">Why is my Jest Suite so Slow?</a> <em>(Steven Lemon)</em></li>\n<li><a href=\"https://daverupert.com/2023/01/so-you-want-to-make-a-new-js-framework/\">So you want to make a new JS framework</a> <em>(Dave Rupert)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2023/01/20/twitter-makes-it-official-no-more-3rd-party-clients-allowed/\">Twitter Makes It Official: No More 3rd Party Clients Allowed</a> <em>(Mike Masnick)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.cnbc.com/2023/01/18/tech-layoffs-microsoft-amazon-meta-others-have-cut-more-than-60000.html\">Google, Microsoft, Amazon and other tech companies have laid off more than 70,000 employees in the last year</a> <em>(Ashley Capoot &amp; Sofia Pitt)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2023/01/12/1148626359/nasa-webb-telescope-exoplanet\">NASA's Webb telescope has discovered its first exoplanet</a> <em>(Ayana Archie)</em></li>\n<li><a href=\"https://skyandtelescope.org/astronomy-news/the-james-webb-space-telescope-is-finding-too-many-early-galaxies/\">The James Webb Space Telescope is Finding Too Many Early Galaxies</a> <em>(Monica Young)</em></li>\n<li><a href=\"https://www.axios.com/2023/01/09/archaeology-drought-floods-wildfires-climate-change\">Drought, floods, wildfires: Climate change upends archaeology</a> <em>(Jennifer A. Kingson)</em></li>\n<li><a href=\"https://www.economist.com/science-and-technology/2023/01/11/roman-civil-engineering-has-lessons-for-the-modern-world\">Roman civil engineering has lessons for the modern world</a> <em>(The Economist)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/episodes/on-the-media-its-a-machines-world\">On the Media: It's a Machine's World</a></li>\n<li><a href=\"https://www.vice.com/en/article/m7gyb8/cyber-the-government-isnt-coming-for-your-gas-stoves\">CYBER: The Government Isn't Coming for Your Gas Stoves</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.engadget.com/ntsb-chair-says-evs-too-big-and-heavy-143100532.html\">NTSB chair says EVs are getting too big and heavy</a> <em>(Jon Fingas)</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2023/art-of-knowing-when-to-quit/\">The Art of Knowing When to Quit</a> <em>(Jim Nielsen)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Dave Hause - Hazard Lights</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/sC0viUiFFL4\" title=\"Dave Hause - Hazard Lights\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/14/",
      "url": "https://kpwags.com/reading-log/14/",
      "title": "Reading Log - January 13, 2023 (#14)",
      "content_html": "\n\t\t<p>A little light this week. Identity thieves targeted a credit reporting agency, a look at the podcasting market, and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/23547877/decoder-chokepoint-capitalism-cory-doctorow-rebecca-giblin-spotify-ticketmaster-antitrust\">What is chokepoint capitalism, with authors Cory Doctorow and Rebecca Giblin</a></h2>\n\t<div class=\"in-depth-meta\">Nilay Patel</div>\n\t<div class=\"in-depth-text\">\n<p>I read this <em>Chokepoint Capitalism</em> last year and even wrote <a href=\"https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review\">a post reviewing it</a>. I think in today’s current market, it’s important to keep in mind how corporations are affecting the ability of people to make a living.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.polygon.com/23547617/deep-space-nine-star-trek-ds9-watch-analysis\">Deep Space Nine was ahead of its time for all the reasons it was Star Trek's 'problem child'</a></h2>\n\t<div class=\"in-depth-meta\">Dylan Roth</div>\n\t<div class=\"in-depth-text\">\n<p>Star Trek DS9 is my absolute favorite TV series, it’s the series I very often re-watch. It was the first Star Trek series to have an overarching story across all episodes. With <em>The Original Series</em> and <em>The Next Generation</em>, you could just turn an episode on and generally be fine. DS9 broke that mold which would occasionally make it hard to fully understand what was going on in some episodes. It was also based on a space station rather than a moving starship.</p>\n<p>It dove into some ethical gray areas and didn’t have the same feel of “Utopia” that was often seen in <em>The Next Generation</em>. It didn’t pull punches. It also had two of the best villains in all of Trek. While I’m sure the statute of limitations is over for spoilers given that the series ended over 20 years ago, but I would highly recommend this series.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://johnnyreilly.com/2022/09/20/react-usesearchparamsstate\">React: storing state in URL with URLSearchParams</a> <em>(John Reilly)</em></li>\n<li><a href=\"https://endjin.com/blog/2023/01/dotnet-csharp-lazy-async-initialization\">Lazy and once-only C# async initialization</a> <em>(Ian Griffiths)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gadgets/2023/01/apple-rolls-out-ai-narrated-audiobooks-and-its-probably-the-start-of-trend/\">Apple rolls out AI-narrated audiobooks, and it's probably the start of a trend</a> <em>(Samuel Axon)</em></li>\n<li><a href=\"https://krebsonsecurity.com/2023/01/identity-thieves-bypassed-experian-security-to-view-credit-reports/\">Identity Thieves Bypassed Experian Security to View Credit Reports</a> <em>(KrebsOnSecurity)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.wsj.com/articles/your-coworkers-are-less-ambitious-bosses-adjust-to-the-new-order-11672441067\">Your Coworkers Are Less Ambitious; Bosses Adjust to the New Order</a> <em>(Lindsay Ellis &amp; Ray A. Smith)</em></li>\n<li><a href=\"https://www.bloomberg.com/news/articles/2023-01-04/the-great-podcasting-market-correction\">The Great Podcasting Market Correction</a> <em>(Ashley Carman &amp; Lucas Shaw)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://darknetdiaries.com/episode/119/\">Darknet Diaries #119: Hot Wallets</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/meet-us-by-the-fountain/\">99% Invisible #495: Meet Us by the Fountain</a></li>\n<li><a href=\"https://freakonomics.com/podcast/103-pieces-of-advice-that-may-or-may-not-work/\">Freakonomics #507: 103 Pieces of Advice That May or May Not Work</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://cdevroe.com/2023/01/11/blogging-is-alive\">Blogging is alive and well</a> <em>(Colin Devroe)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Fireworks - Arrows</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HZxk1l3u7OQ\" title=\"Fireworks - Arrows\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/01/07/books-i-read-in-2022/",
      "url": "https://kpwags.com/posts/2023/01/07/books-i-read-in-2022/",
      "title": "Books I Read in 2022",
      "content_html": "\n\t\t<p>While I didn't quite hit my 2022 goal of 30 books, I did manage to read 20 books.</p>\n\n<h2>Books I Loved</h2>\n\n<p>These were my top books I read this year, in no particular order.</p>\n\n<media-box image=\"https://i.postimg.cc/KY9FWxyG/whatif2.jpg\" link=\"https://bookshop.org/p/books/what-if-2-additional-serious-scientific-answers-to-absurd-hypothetical-questions-randall-munroe/18153615\" title=\"What If? 2\" author=\"Randall Munroe\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/KY9FWxyG/whatif2.jpg\" alt=\"What If? 2\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/what-if-2-additional-serious-scientific-answers-to-absurd-hypothetical-questions-randall-munroe/18153615\">What If? 2</a></div>\n\t\t\t\t<div class=\"author\">Randall Munroe</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tRandall Munroe does it again. He brings his scientific curiosity to answer some pretty absurd questions. He does it with a good sense of humor and easy to understand language.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/VLZr4fLG/chokepoint-capitalism.jpg\" link=\"https://bookshop.org/books/chokepoint-capitalism-how-big-tech-and-big-content-captured-creative-labor-markets-and-how-we-ll-win-them-back/9780807007068\" title=\"Chokepoint Capitalism\" author=\"Rebecca Giblin &amp; Cory Doctorow\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/VLZr4fLG/chokepoint-capitalism.jpg\" alt=\"Chokepoint Capitalism\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/chokepoint-capitalism-how-big-tech-and-big-content-captured-creative-labor-markets-and-how-we-ll-win-them-back/9780807007068\">Chokepoint Capitalism</a></div>\n\t\t\t\t<div class=\"author\">Rebecca Giblin & Cory Doctorow</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a fantastic read looking at how some of the tech and media giants have used the lack of competition\n\tto squeeze musicians, writers, developers and the rest of the creative industry. While this book only\n\tfocuses on the creative industries, there are a lot of similarities all over. Cory and Rebecca do a good job\n\texplaining the problems, how we arrived at them, and what we can potentially do to even the playing field. I\n\teven wrote a <a href=\"https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review\">post about it</a>.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/FRnqyKXS/unittesting.jpg\" link=\"https://www.manning.com/books/unit-testing\" title=\"Unit Testing Principles, Practices, and Patterns\" author=\"Vladimir Khorikov\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/FRnqyKXS/unittesting.jpg\" alt=\"Unit Testing Principles, Practices, and Patterns\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://www.manning.com/books/unit-testing\">Unit Testing Principles, Practices, and Patterns</a></div>\n\t\t\t\t<div class=\"author\">Vladimir Khorikov</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI've been doing a lot more unit tests over the last year or two. This book did a good job going over how to\n\twrite better tests and ways to improve the code to make tests better and easier to write. A good read for\n\tdevelopers. The code examples are in C#, but the principals could be applied to other languages.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/NF2SZZHy/endofeverything.jpg\" link=\"https://bookshop.org/books/the-end-of-everything-astrophysically-speaking/9781982103552\" title=\"The End of Everything (Astrophysically Speaking)\" author=\"Katie Mack\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/NF2SZZHy/endofeverything.jpg\" alt=\"The End of Everything (Astrophysically Speaking)\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-end-of-everything-astrophysically-speaking/9781982103552\">The End of Everything (Astrophysically Speaking)</a></div>\n\t\t\t\t<div class=\"author\">Katie Mack</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tBeing a space nut, this was a fun read learning about the various different ways the universe might end. Katie Mack did a fantastic job describing it with a good mix of humor and not-too-complicated language.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<h2>Books I Would Recommend</h2>\n\n<p>While not my top books, these were all good and I enjoyed them.</p>\n\n<media-box image=\"https://i.postimg.cc/RCfzsnQg/fourlostcities.jpg\" link=\"https://bookshop.org/p/books/four-lost-cities-a-secret-history-of-the-urban-age-annalee-newitz/16712885\" title=\"Four Lost Cities: A Secret History of the Urban Age\" author=\"Annalee Newitz\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/RCfzsnQg/fourlostcities.jpg\" alt=\"Four Lost Cities: A Secret History of the Urban Age\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/four-lost-cities-a-secret-history-of-the-urban-age-annalee-newitz/16712885\">Four Lost Cities: A Secret History of the Urban Age</a></div>\n\t\t\t\t<div class=\"author\">Annalee Newitz</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was an interesting read on ancient cities. I had never even heard of two of the cities prior to reading\n\tthis. It was an interesting look into the history of urban living, how it began and developed, and how these\n\tcities faded into history.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/XvN4xXm1/weapons-of-math-destruction.jpg\" link=\"https://bookshop.org/p/books/weapons-of-math-destruction-how-big-data-increases-inequality-and-threatens-democracy-cathy-o-neil/11438502\" title=\"Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy\" author=\"Cathy O'Neil\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/XvN4xXm1/weapons-of-math-destruction.jpg\" alt=\"Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/p/books/weapons-of-math-destruction-how-big-data-increases-inequality-and-threatens-democracy-cathy-o-neil/11438502\">Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy</a></div>\n\t\t\t\t<div class=\"author\">Cathy O'Neil</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tMost of what I read I was already aware of. Still, Cathy did a good job talking about what the issues with algorithms are, and why they can be problematic.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/T3nGK5hy/datadetective.jpg\" link=\"https://bookshop.org/books/the-data-detective-ten-easy-rules-to-make-sense-of-statistics/9780593084663\" title=\"The Data Detective: Ten Easy Rules to Make Sense of Statistics\" author=\"Tim Harford\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/T3nGK5hy/datadetective.jpg\" alt=\"The Data Detective: Ten Easy Rules to Make Sense of Statistics\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-data-detective-ten-easy-rules-to-make-sense-of-statistics/9780593084663\">The Data Detective: Ten Easy Rules to Make Sense of Statistics</a></div>\n\t\t\t\t<div class=\"author\">Tim Harford</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI've been a fan of Tim's writing. This book is no different. It's an interesting read helping give you some\n\trules of thumb when reading about statistics and data. I know I've been guilty from time to time of some of\n\tthe things one should avoid when being presented with data.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/x86dyMTR/responsible-javascript.jpg\" link=\"https://abookapart.com/products/responsible-javascript\" title=\"Responsible Javascript\" author=\"Jeremy Wagner\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/x86dyMTR/responsible-javascript.jpg\" alt=\"Responsible Javascript\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://abookapart.com/products/responsible-javascript\">Responsible Javascript</a></div>\n\t\t\t\t<div class=\"author\">Jeremy Wagner</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI know that I'm a little weak on making my websites more performant. This book did a good job talking about\n\thow to improve both JavaScript performance and examples of some things you can do to make your sites more user-friendly.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/brPdgmR1/nightthelightswentout.jpg\" link=\"https://bookshop.org/books/the-night-the-lights-went-out-a-memoir-of-life-after-brain-damage/9780593232712\" title=\"The Night the Lights Went Out\" author=\"Drew Magary\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/brPdgmR1/nightthelightswentout.jpg\" alt=\"The Night the Lights Went Out\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-night-the-lights-went-out-a-memoir-of-life-after-brain-damage/9780593232712\">The Night the Lights Went Out</a></div>\n\t\t\t\t<div class=\"author\">Drew Magary</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI've always enjoyed Drew Magary's writing on Defector and heard about his brush with death. This was an interesting memoir talking about his road back. Would recommend.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/kgmn6Tcm/walkaway.jpg\" link=\"https://bookshop.org/books/walkaway/9780765392770\" title=\"Walkaway\" author=\"Cory Doctorow\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/kgmn6Tcm/walkaway.jpg\" alt=\"Walkaway\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/walkaway/9780765392770\">Walkaway</a></div>\n\t\t\t\t<div class=\"author\">Cory Doctorow</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI've generally enjoyed Cory Doctorow's writing style. The story had an interesting premise even going so far\n\tas to touch on some of today's economic issues. Without giving too much away, some of the jumps in time were\n\ta little rough, but easy enough to follow. I enjoyed it, but it was not my favorite Doctorow novel.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/nLDDCyxd/bornacrime.jpg\" link=\"https://bookshop.org/books/born-a-crime-stories-from-a-south-african-childhood/9780399588198\" title=\"Born a Crime\" author=\"Trevor Noah\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/nLDDCyxd/bornacrime.jpg\" alt=\"Born a Crime\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/born-a-crime-stories-from-a-south-african-childhood/9780399588198\">Born a Crime</a></div>\n\t\t\t\t<div class=\"author\">Trevor Noah</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n&gt;\n\tI appreciate Trevor's comedy and the way he hosts The Daily Show. It was interesting reading about all he and his family had to deal with growing up in South Africa.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/HsZs8YFw/projecthailmary.jpg\" link=\"https://bookshop.org/books/project-hail-mary/9780593135204\" title=\"Project Hail Mary\" author=\"Andy Weir\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/HsZs8YFw/projecthailmary.jpg\" alt=\"Project Hail Mary\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/project-hail-mary/9780593135204\">Project Hail Mary</a></div>\n\t\t\t\t<div class=\"author\">Andy Weir</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI enjoyed this. It definitely had the same style as The Martian. The story had a good pace and was interesting.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/XvyJ0RHw/passioneconomy.jpg\" link=\"https://bookshop.org/books/the-passion-economy-the-new-rules-for-thriving-in-the-twenty-first-century/9780804172776\" title=\"The Passion Economy: The New Rules for Thriving in the Twenty-First Century\" author=\"Adam Davidson\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/XvyJ0RHw/passioneconomy.jpg\" alt=\"The Passion Economy: The New Rules for Thriving in the Twenty-First Century\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-passion-economy-the-new-rules-for-thriving-in-the-twenty-first-century/9780804172776\">The Passion Economy: The New Rules for Thriving in the Twenty-First Century</a></div>\n\t\t\t\t<div class=\"author\">Adam Davidson</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis book wasn't quite what I expected it to be, though looking back at it, I'm not entirely sure what I was \n\texpecting. It was still an interesting take on succeeding as a smaller business in the present day economy.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/Kv6xcDcS/darkpools.jpg\" link=\"https://bookshop.org/books/dark-pools-the-rise-of-the-machine-traders-and-the-rigging-of-the-u-s-stock-market/9780307887184\" title=\"Dark Pools: The Rise of the Machine Traders and the Rigging of the U.S. Stock Market\" author=\"Scott Patterson\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/Kv6xcDcS/darkpools.jpg\" alt=\"Dark Pools: The Rise of the Machine Traders and the Rigging of the U.S. Stock Market\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/dark-pools-the-rise-of-the-machine-traders-and-the-rigging-of-the-u-s-stock-market/9780307887184\">Dark Pools: The Rise of the Machine Traders and the Rigging of the U.S. Stock Market</a></div>\n\t\t\t\t<div class=\"author\">Scott Patterson</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThe stock market &amp; computerized trading has become a fascination to me. This book does a great job talking\n\tabout the rise of high-frequency trading and how it has caused some of the problems we see in the stock market today.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/fWjY7Q9p/bettertobefeared.jpg\" link=\"https://bookshop.org/books/it-s-better-to-be-feared-the-new-england-patriots-dynasty-and-the-pursuit-of-greatness/9781631498237\" title=\"It's Better to Be Feared: The New England Patriots Dynasty and the Pursuit of Greatness\" author=\"Seth Wickersham\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/fWjY7Q9p/bettertobefeared.jpg\" alt=\"It's Better to Be Feared: The New England Patriots Dynasty and the Pursuit of Greatness\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/it-s-better-to-be-feared-the-new-england-patriots-dynasty-and-the-pursuit-of-greatness/9781631498237\">It's Better to Be Feared: The New England Patriots Dynasty and the Pursuit of Greatness</a></div>\n\t\t\t\t<div class=\"author\">Seth Wickersham</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI'm by no means a Patriots fan, but I found this to be an interesting look into the 2 decades long dynasty of Brady-Belichick and the Patriots.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/L55SS72t/storyteller.jpg\" link=\"https://bookshop.org/books/the-storyteller-tales-of-life-and-music/9780063076099\" title=\"The Storyteller: Tales of Life and Music\" author=\"Dave Grohl\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/L55SS72t/storyteller.jpg\" alt=\"The Storyteller: Tales of Life and Music\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-storyteller-tales-of-life-and-music/9780063076099\">The Storyteller: Tales of Life and Music</a></div>\n\t\t\t\t<div class=\"author\">Dave Grohl</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tDave Grohl has always seemed to be an interesting and unique person. This was an interesting memoir talking\n\tabout his growth from High School punk musician, through Nirvana and eventually Foo Fighters. If you're a\n\tfan of any of his work, I'd highly recommend this.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/1XKXjDW2/nudge.jpg\" link=\"https://bookshop.org/books/nudge-the-final-edition/9780143137009\" title=\"Nudge: The Final Edition\" author=\"Richard Thaler &amp; Cass Sunstein\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/1XKXjDW2/nudge.jpg\" alt=\"Nudge: The Final Edition\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/nudge-the-final-edition/9780143137009\">Nudge: The Final Edition</a></div>\n\t\t\t\t<div class=\"author\">Richard Thaler & Cass Sunstein</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was a fantastic read into how we as humans can be persuaded into doing things in ways we don't always recognize. The authors do a good job going into the good and bad of it.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/mgr32phq/apollomurders.jpg\" link=\"https://bookshop.org/books/the-apollo-murders-9781668601075/9780316264532\" title=\"The Apollo Murders\" author=\"Chris Hadfield\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/mgr32phq/apollomurders.jpg\" alt=\"The Apollo Murders\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-apollo-murders-9781668601075/9780316264532\">The Apollo Murders</a></div>\n\t\t\t\t<div class=\"author\">Chris Hadfield</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI enjoyed this book. It had a good story that pulled you in. As a space fan, I definitely enjoyed the tie-ins\n\twith the Apollo program. The ending wasn't my favorite part, but it did tidy up the story arcs. Would still\n\trecommend it to anyone.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/3wwXCxw3/leviathanfalls.jpg\" link=\"https://bookshop.org/books/leviathan-falls-9781705024997/9780316332910\" title=\"Leviathan Falls\" author=\"James S. A. Corey\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/3wwXCxw3/leviathanfalls.jpg\" alt=\"Leviathan Falls\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/leviathan-falls-9781705024997/9780316332910\">Leviathan Falls</a></div>\n\t\t\t\t<div class=\"author\">James S. A. Corey</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI did enjoy this as the final book in the series. Given that this is the end of a long series, I still haven't come to a complete decision on how I feel about how the story was ended.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<h2>Books I Was More \"Meh\" On</h2>\n\n<p>This doesn't mean that you won't like them, I just was only luke-warm on them.</p>\n\n<media-box image=\"https://i.postimg.cc/QNcT7Tqp/moonshot.jpg\" link=\"https://bookshop.org/books/moonshot-inside-pfizer-s-nine-month-race-to-make-the-impossible-possible-9798200746163/9780063210790\" title=\"Moonshot: Inside Pfizer's Nine-Month Race to Make the Impossible Possible\" author=\"Albert Bourla\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/QNcT7Tqp/moonshot.jpg\" alt=\"Moonshot: Inside Pfizer's Nine-Month Race to Make the Impossible Possible\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/moonshot-inside-pfizer-s-nine-month-race-to-make-the-impossible-possible-9798200746163/9780063210790\">Moonshot: Inside Pfizer's Nine-Month Race to Make the Impossible Possible</a></div>\n\t\t\t\t<div class=\"author\">Albert Bourla</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThe book had a little too much of a “Rah Rah” feel to me which I guess isn't surprising since it was written by Pfizer's CEO. When I picked it up at the library I was hoping there'd be a little more meat to it.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/13/",
      "url": "https://kpwags.com/reading-log/13/",
      "title": "Reading Log - January 6, 2023 (#13)",
      "content_html": "\n\t\t<p>A scary moment in the NFL Monday night. Also lots of podcasts this week.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://matthiasott.com/notes/transient-frameworks\">Transient Frameworks</a> <em>(Matthias Ott)</em></li>\n<li><a href=\"https://www.jamesmichaelhickey.com/how-to-structure-your-dot-net-solutions-design-and-trade-offs/?utm_source=csharpdigest&amp;utm_medium&amp;utm_campaign=1462\">How To Structure Your .NET Solutions: Architecture And Trade-Offs</a> <em>(James Hickey)</em></li>\n<li><a href=\"https://chriscoyier.net/2023/01/04/what-does-it-look-like-for-the-web-to-lose/\">What does it look like for the web to lose?</a> <em>(Chris Coyier)</em></li>\n<li><a href=\"https://stackdiary.com/css-media-queries/\">A Practical Guide to CSS Media Queries</a> <em>(Alex Ivanovs)</em></li>\n<li><a href=\"https://davidwalsh.name/get-promise-status\">How to Determine a JavaScript Promise's Status</a> <em>(David Walsh)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2022/12/21/anker-highlights-what-not-to-do-when-your-crappy-security-standards-are-exposed/\">Anker Highlights What Not To Do When Your Crappy Security Standards Are Exposed</a> <em>(Karl Bode)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/28/lastpass-tries-to-bury-the-full-scope-of-its-disastrous-privacy-breach-behind-the-christmas-holiday/\">LastPass Tries To Bury The Full Scope Of Its Disastrous Privacy Breach Behind The Christmas Holiday</a> <em>(Karl Bode)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://nymag.com/intelligencer/2022/12/remote-work-is-poised-to-devastate-americas-cities.html\">Remote Work Is Poised to Devastate America's Cities</a> <em>(Eric Levitz)</em></li>\n<li><a href=\"https://www.theatlantic.com/newsletters/archive/2022/12/homeownership-real-estate-investment-renting/672511/\">The Homeownership Society Was a Mistake</a> <em>(Jerusalem Demsas)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2023/01/headed-to-space-today-test-hardware-for-a-solar-power-plant/\">Space-based solar power hardware ready for actual testing in space</a> <em>(John Timmer)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4055531/2023/01/04/damar-hamlin-nfl-emergency-plan/\">For Damar Hamlin, NFL activated Emergency Action Plan. How does it work?</a> <em>(Jourdan Rodrigue)</em></li>\n<li><a href=\"https://theathletic.com/4062586/2023/01/06/damar-hamlin-nfl-contracts-benefits/\">Damar Hamlin situation rekindles questions over NFL player contracts</a> <em>(Daniel Kaplan)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://changelog.com/podcast/489\">The Changelog #489: Run your home on a Raspberry Pi</a></li>\n<li><a href=\"https://changelog.com/podcast/491\">The Changelog #491: Stacked diffs for fast-moving code review</a></li>\n<li><a href=\"https://changelog.com/jsparty/227\">JS Party #227: JS logging &amp; error handling</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1793\">.NET Rocks #1793: Secure Open Source Practices with Jillian Ratliff</a></li>\n<li><a href=\"https://softwareengineeringdaily.com/2022/05/18/technical-debt-with-lee-atchison/\">Software Engineering Daily: Technical Debt With Lee Atchison</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1794\">.NET Rocks #1794: Using Web Components with Jemima Abu</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/finance-portrayed-in-arts-and-culture\">The New Bazaar S1 Ep 39: Finance portrayed in arts and culture</a></li>\n<li><a href=\"https://timharford.com/2023/01/cautionary-tales-double-header-when-a-plague-struck-world-of-warcraft-and-blood-on-the-tracks/\">Cautionary Tales: When a Plague Struck World of Warcraft, and Blood on the Tracks</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://brooker.co.za/blog/2022/11/08/writing.html\">Writing Is Magic</a> <em>(Marc Brooker)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - America (You're Freaking Me Out) - From Exile</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Xn8p_18vN9g\" title=\"The Menzingers - America (You're Freaking Me Out) - From Exile\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/01/02/2022-retrospective/",
      "url": "https://kpwags.com/posts/2023/01/02/2022-retrospective/",
      "title": "2022 Retrospective",
      "content_html": "\n\t\t<p>Well, 2022 is now over and done with, and I don't feel like much has changed.</p>\n<h2>Looking Back at 2022</h2>\n<p>Not much of anything of note really happened in 2022. It's not a bad thing, boring can be good. It's just that there's really not all that much to say about it.</p>\n<p>Since Lauren and I were both vaccinated and boosted, we cautiously re-entered the world a little more. We ended up spending a week at the end of March in Cape May for Lauren's birthday. Spent a long weekend in New York City in June for my birthday, and then our week-long vacation in Cape May again in September.</p>\n<h3>Side Projects</h3>\n<p><strong>Digital Family Cookbook</strong> - Brought this to near completion. I have a few loose ends to tie up, and I'm probably going to really clean up the UI design. I only spent so much time during the creation on its rough edges. It was also the first project I got real, working integration tests going. Since it uses Entity Framework, I was able to use an In-Memory database to handle the tests. I even caught a bug or two I would've introduced to the code from running the tests.</p>\n<p>I have the domain for it and I'm considering trying out <a href=\"https://www.11ty.dev/\">Eleventy</a> to build the homepage.</p>\n<p><strong>Fitness Tracker (Name TBD)</strong> - I ended up restarting this from scratch after working through some of the challenges I had building Digital Family Cookbook. I had chosen <a href=\"https://mui.com/\">MUI</a> for my first version and while it was fine, I decided to switch over to <a href=\"https://ant.design/\">Ant Design</a> like I've been using at work and for Digital Family Cookbook. I've become more familiar with it and figure it would help improve my ability to meet the challenges I face at work.</p>\n<h3>Fitness</h3>\n<p><strong>Hockey</strong> - I played a lot of hockey in 2022. I'm currently on 3 teams. Goalie in the lower league, and a skater in the more competitive leagues. I'm hoping that as I play more in net, I can start to become a decent option between the pipes in the upper leagues.</p>\n<p><strong>Running</strong> - I unfortunately was unable to run the marathon this year as my legs weren't cooperating. I deferred my registration for 2023, so I'm hoping to get some long(ish) runs in during the spring and early summer months to get myself ready to start training again. I did end up running 375 miles in 2022, so not shabby.</p>\n<p><strong>Biking</strong> - I never ended up doing much biking. Stationary setup I have can get boring and when I wanted to do something outside, I just ended up going for a run.</p>\n<p><strong>Lifting</strong> - I got soooo close to the 1,000 lbs. club this year. I maxed out at 985 lbs. (235 on bench, 365 on squats, &amp; 385 on deadlifts). Either way, I felt like I was able to get stronger. My marathon training sort of reset my progress, but I started working my way back up.</p>\n<h3>PC Gaming</h3>\n<p>In July I ended up rebuilding my PC. The old desktop just wasn't cutting it anymore for gaming so I ended up building a new one. I still had a semi-decent graphics card (GTX 1060) in it, so I kept that. But I now have a brand new PC with an AMD Ryzen 7 5800X 8-Core 3.8GHz CPU with 32GB of RAM. I've ended up playing a lot of World of Warcraft Classic on it, but am planning on hitting up my massive backlog of games over the next year.</p>\n<h2>Visiting my 2022 Goals</h2>\n<p>I didn't do a fantastic job of reaching <a href=\"https://kpwags.com/progress/2022\">my goals</a> this past year. And while I wish I had hit all of them, I'm actually not that upset about missing them as I got pretty close to a lot of them.</p>\n<h3>Goal #1: Run More &amp; Start Biking More</h3>\n<p>My goal to start biking more never got off the ground. I have the stationary bike converter kit for my actual road bike, but it's kind of annoying to set up and it's boring to ride. I often just ended up skipping it in favor of either a run or lifting.</p>\n<p>In terms of running, didn't quite hit my goal of 400 miles. I topped off at 375 miles so I missed it by 25. Did increase my yearly miles from 2021 by 50.</p>\n<h3>Goal #2: Bench Press, Squat &amp; Deadlift PRs</h3>\n<p>I managed to surpass my squats goal by 15 lbs. maxing out at 365. Deadlifts and bench press I missed by 15 lbs. Still a new PR for deadlifts. Getting COVID at the end of May messed my rhythm up and then having to lessen my strength training in favor of marathon training was the final nail in the coffin.</p>\n<h3>Goal #3: Max Out My Retirement Accounts</h3>\n<p>I got so darned close to this one. I had my IRA maxed out in June, but was just under $1,000 left on my 401k.</p>\n<h3>Goal #4: Read 30 Books</h3>\n<p>I got 2/3 of the way through my reading goal having read 20 books, 16 of them being non-fiction. For the last few months of the year I've been spending late nights after hockey reading. My adrenaline levels after hockey games are too high to go to sleep, so I've been sitting out on the couch for 30 minutes to an hour reading to be in a better place for sleep. It's allowed me to read more and solves the tossing and turning problem after hockey games.</p>\n<h3>Goal #5: Write 10 Technical Blog Posts</h3>\n<p>I'm always worried about sounding stupid with my writing as I don't want to say something that ends up being completely wrong. I was able to put the fear aside a little bit more this year and managed to write 7 posts of a technical nature. Not quite the 10 I was aiming for though.</p>\n<h2>2023 Goals</h2>\n<h3>Goal #1 - Learn (Re-Learn?) Guitar</h3>\n<p>Back in high school I got an electric guitar and took some lessons but didn't have the fortitude to stick with it. I'm hoping to find some YouTube videos or lessons from somewhere else to get back into playing. I'm not quite sure how to quantify this as a goal, but would love to start playing more.</p>\n<h3>Goal #2 - Read 30 Books</h3>\n<p>Same as last year. I'm hoping to use the post-hockey-pre-sleep time to read more of my reading list. My reading list is currently sitting at 74 and is always growing.</p>\n<h3>Goal #3 - Write 12 Technical Posts</h3>\n<p>I know I didn't hit my goal of 10 last year, but I'm hoping to increase this as I do more work with my fitness tracker app and any tutorials I do to learn other languages and frameworks.</p>\n<h3>Goal #4 - Hit the 1,000 lbs. Club</h3>\n<p>The 1,000 lbs. club is for those who can lift a total of 1,000 lbs. across bench press, squats, &amp; deadlifts. It doesn't matter what weights each of them are at so long as the total equals 1,000 lbs. I was 15 lbs. shy last year and am hoping to finally surpass it.</p>\n<h3>Goal #5 - Bike &amp; Run 400 Miles Each</h3>\n<p>Running shouldn't be an issue here given how close I was last year and that I'm going to attempt a marathon again. With biking, I just need to kill the excuses and see if I can't find a better way to make stationary biking a little more tolerable. I do have a large podcast episode backlog that could help.</p>\n<h3>Goal #6 - Take More Photos</h3>\n<p>I haven't taken my 60D out in a long while. In 2023, I would like to do more photography. My goal is to get in 5 good photo shoots. I'm not sure where. Maybe Cape May, Valley Forge, or anywhere else that might be interesting. Maybe it will help me find a good workflow for my photograph processing as well.</p>\n<hr />\n<p>Here's hoping that I can make some good progress on them. You can view my progress <a href=\"https://kpwags.com/progress/2023\">here</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2023/01/01/december-check-in/",
      "url": "https://kpwags.com/posts/2023/01/01/december-check-in/",
      "title": "December Check-In",
      "content_html": "\n\t\t<p>December was a quiet month, but I feel like I spent the better part of it dealing with colds.</p>\n<h2>Cold Season is Back</h2>\n<p>After generally avoiding being sick over the last 2 years, I ended up with back to back colds. The first and last week of the month I was knocked on my ass with a cough and a nose running more than a faucet. Tested negative for COVID thankfully, so just annoying bugs I had to deal with...twice.</p>\n<h2>Christmas with Family</h2>\n<p>Thankfully the colds sort of surrounded Christmas and didn’t occur on the actual holiday. Lauren and I were able to spend time with both of our families over the holidays. I even saw my one brother who I haven’t seen since before the pandemic. I also met his son for the first time, my nephew who was born during the pandemic.</p>\n<p>Other than that, it was a relatively quiet month.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I only ended up running 7.4 miles in December thanks to the weather and being sick.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Haven’t been too active lifting due to being sick</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/four-lost-cities-a-secret-history-of-the-urban-age-annalee-newitz/16712885?ean=9780393882452\">Four Lost Cities: A Secret History of the Urban Age</a> by Annalee Newitz</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/snow-crash-neal-stephenson/7327954?ean=9780553380958\">Snow Crash</a> by Neal Stephenson</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/posts/2022/12/02/reading-log-december-2-8\">December 2 (#8)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/12/09/reading-log-december-9-9\">December 9 (#9)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/12/16/reading-log-december-16-10\">December 16 (#10)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/12/23/reading-log-december-23-11\">December 23 (#11)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/12/30/reading-log-december-30-12\">December 30 (#12)</a></li>\n</ul>\n</li>\n<li>Wrote about my <a href=\"https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review\">thoughts on the book, Chokepoint Capitalism</a></li>\n<li>Wrote about how <a href=\"https://kpwags.com/posts/2022/12/08/developing-with-dev-tools-open\">having the dev tools open during development can be helpful</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/12/26/the-importance-of-compatibility\">compatibility</a></li>\n<li>Wrote about how <a href=\"https://kpwags.com/posts/2022/12/27/star-trek-generations-is-underrated\">Star Trek: Generations is underrated</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Completed <a href=\"https://www.ea.com/games/starwars/jedi/jedi-fallen-order\">Jedi: Fallen Order</a></li>\n<li>Started <a href=\"https://www.playstation.com/en-us/games/horizon-zero-dawn/\">Horizon Zero Dawn</a></li>\n<li>Continued <a href=\"https://scarletviolet.pokemon.com/en-us/\">Pokemon Violet</a>, but have been losing speed</li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">Yellowstone</a>, now up to date</li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0112178/\">Star Trek: Voyager</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt1464335/\">Uncharted</a></li>\n<li><a href=\"https://www.imdb.com/title/tt10731256/\">Don't Worry, Darling</a></li>\n<li><a href=\"https://www.imdb.com/title/tt6264654/\">Free Guy</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0085334/\">A Christmas Story</a></li>\n<li><a href=\"https://www.imdb.com/title/tt3553442/\">Whiskey Tango Foxtrot</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0097958/\">National Lampoon's Christmas Vacation</a></li>\n<li><a href=\"https://www.imdb.com/title/tt0111280/\">Star Trek: Generations</a></li>\n<li><a href=\"https://www.imdb.com/title/tt1535108/\">Elysium</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2023-01-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/12/",
      "url": "https://kpwags.com/reading-log/12/",
      "title": "Reading Log - December 30, 2022 (#12)",
      "content_html": "\n\t\t<p>Mastodon is making some in-roads, Apple is considering opening up a bit on iOS and LastPass is in some trouble.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.macrumors.com/2022/12/14/apple-considering-non-webkit-iphone-browsers/\">Apple Considering Dropping Requirement for iPhone Web Browsers to Use WebKit</a></h2>\n\t<div class=\"in-depth-meta\">Joe Rossignol</div>\n\t<div class=\"in-depth-text\">\n<p>If Apple does indeed do this, it will make things very interesting. It’ll be nice to have better browser diversity on iOS.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/does-www-still-belong-in-urls/\">Does WWW still belong in URLs?</a> <em>(Pieter De Decker)</em></li>\n<li><a href=\"https://raygun.com/blog/what-are-microservices/\">What are microservices? The pros, cons, and how they work</a> <em>(Anna Monus)</em></li>\n<li><a href=\"https://www.joshwcomeau.com/css/interactive-guide-to-flexbox/\">An Interactive Guide to Flexbox</a> <em>(Josh W. Comeau)</em></li>\n<li><a href=\"https://www.johansmarius.dev/2022/12/better-assertions-for-your-unit-tests.html\">Better Assertions for your Unit Tests</a> <em>(Johan Smarius)</em></li>\n<li><a href=\"https://medium.com/microsoft-design/designing-a-new-outlook-experience-a3d93a925509\">Designing a New Outlook Experience</a> <em>(Tasha Lutfi)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/information-technology/2022/12/lastpass-says-hackers-have-obtained-vault-data-and-a-wealth-of-customer-info/\">LastPass users: Your info and password vault data are now in hackers’ hands</a> <em>(Dan Goodin)</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2022/12/twitter-rival-mastodon-rejects-funding-to-preserve-nonprofit-status/\">Twitter rival Mastodon rejects funding to preserve nonprofit status</a> <em>(Ian Johnston)</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2022/12/mastodon-highlights-pros-and-cons-of-moving-beyond-big-tech-gatekeepers/\">Mastodon—and the pros and cons of moving beyond Big Tech gatekeepers</a> <em>(Ben Clemens)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/finance-and-economics/2022/12/21/five-financial-trends-that-2022-killed?etear=nl_today_1\">Five financial trends that 2022 killed</a> <em>(The Economist)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/12/2022s-us-climate-disasters-from-storms-and-floods-to-heat-waves-and-droughts/\">2022's US climate disasters, from storms and floods to heat waves and droughts</a> <em>(Shuang-Ye Wu)</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://humbledollar.com/2022/12/same-old-same-old/\">Same Old, Same Old</a> <em>(Adam M. Grossman)</em></li>\n<li><a href=\"https://brandur.org/fragments/unpursuit-of-clout\">The unpursuit of clout</a> <em>(Brandur Leach)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Will Farley - Send My Love to the System</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/q2y-huO1RlA\" title=\"Will Farley - Send My Love to the System\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/12/27/star-trek-generations-is-underrated/",
      "url": "https://kpwags.com/posts/2022/12/27/star-trek-generations-is-underrated/",
      "title": "Star Trek Generations is Underrated",
      "content_html": "\n\t\t<p>I recently re-watched Star Trek Generations and I really feel like it's an underrated Star Trek film. Beware, there are spoilers ahead, so don't say I didn't warn you.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/_TEKwVh0iF-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/_TEKwVh0iF-1200.gif 1200w\" /><img alt=\"A poster for Star Trek Generations featuring the images of Kirk and Picard with the Enterprise D\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/_TEKwVh0iF-1200.jpeg\" width=\"1200\" height=\"779\" /></picture></p>\n<p><a href=\"https://www.imdb.com/title/tt0111280/\">Star Trek Generations</a> came out in 1994 and is the first of the Star Trek movies to feature the Next Generation crew. As a Star Trek fan, I've noticed it doesn't get a lot of love. There's a lot of fans who seem to dislike the movie. Some of their reasons aren't unreasonable, but I still feel like it get's overlooked a little too much.</p>\n<p>The main plot of the movie is that there's a scientist, Dr. Tolian Soran (Malcolm McDowell) is trying to enter <em>The Nexus</em>, another dimension that is described as “being inside joy”. Soran went so far as to destroy a star to accomplish this goal and that is what Picard and the crew of the Enterprise are trying to stop. In the process, Picard meets up with Captain Kirk from the Original Series and the two of them work to save the day.</p>\n<p>There are a few reasons I've heard that people don't like the movie.</p>\n<h2>The Destruction of the Enterprise</h2>\n<p>The first is that it features the destruction, and end of the USS Enterprise D as it crashes into the planet at the end of the movie. Now part of this is apparently Rick Herman and others wanted an Enterprise that fit better on the big screen and the proportions of the Enterprise D didn't fit that mold. Whatever the reason, it didn't bother me all that much. Yes, it was a beautiful and iconic ship, but Kirk destroyed the original Enterprise back in Star Trek III, albeit in way that moved the story forward a little more. Either way, I'm not bothered by it's destruction.</p>\n<h2>Kirk's Death</h2>\n<p>There's no easy way to put this, Kirk dies at the end of the movie. While his death doesn't feel quite as “Saves the day” as Spock's death in <em>The Wrath of Khan</em>, it wasn't a meaningless death. He died fighting to save the lives of the crew of the Enterprise as well as the millions of lives of the species who lived in the Veridian system. It might have been better if he were on a ship rather than some random planet, but dying in the line of duty feels right for him.</p>\n<h2>When Picard Chose to Return to Reality</h2>\n<p>This is the one plot hole I don't get and can see the annoyance. In the movie, when Picard is in the Nexus, he finds out that he can return to any point in time. Why did he choose to go to Veridian III shortly before Soran's weapon was slated to shoot off and destroy the Veridian star? If I were Picard, I would've gone back to just after they reached the Amagosa Observatory right after they rescued Soran. I'd march into sickbay with a security team or two, throw him in handcuffs, drag him in the brig, throw up the forcefield and be done with it. Super easy, no muss, no fuss. Soran is imprisoned and the galaxy is saved. Obviously this wouldn't work as a plot point, but it would be so much simpler.</p>\n<p>Either way, I definitely feel the movie is underrated and I always enjoy it when I watch it.</p>\n<p>Besides, any Trek movie is better than Star Trek V.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/12/26/the-importance-of-compatibility/",
      "url": "https://kpwags.com/posts/2022/12/26/the-importance-of-compatibility/",
      "title": "The Importance of Compatibility",
      "content_html": "\n\t\t<p>I was recently listening to the <a href=\"https://nodogmapodcast.bryanhogan.net/\">No Dogma Podcast</a> and they had Jared Parsons, the C# Compiler Lead at Microsoft  on. He said something that got stuck in my head.</p>\n<p>They were talking about potentially deprecating parts of the C# language and Parsons responded with:</p>\n<blockquote>\n<p>People underestimate the value compatibility has to customers</p>\n</blockquote>\n<p>He's right, developers rely on the core functionality of languages remaining the same. It makes updating libraries and language versions much easier to do. Companies rely on being able to maintain and update their software. It gets very difficult to modify, update and maintain software if upgrade paths require massive rewrites.</p>\n<p>It was an interesting interview and you can listen to the <a href=\"https://nodogmapodcast.bryanhogan.net/163-jared-parsons-the-c-compiler-part-1/\">Episode 1</a> and <a href=\"https://nodogmapodcast.bryanhogan.net/164-jared-parsons-the-c-compiler-part-2/\">Episode 2</a> here.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/11/",
      "url": "https://kpwags.com/reading-log/11/",
      "title": "Reading Log - December 23, 2022 (#11)",
      "content_html": "\n\t\t<p>NASA's InSight probe has seemingly sent its last signal back to Earth. Some questionable security from iRobot, and a little bit of Twitter drama makes up some of this week's reading.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://kotaku.com/the-best-star-wars-video-game-1701922268\">The Best Star Wars Video Game</a></h2>\n\t<div class=\"in-depth-meta\">Luke Plunkett</div>\n\t<div class=\"in-depth-text\">\n<p>I loved this game when it came out. I loved all the games that came out after this too. I wish that Disney would get a game developer to make a good sequel to the Dark Forces / Jedi Knight series.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://www.jamesmichaelhickey.com/how-to-structure-your-dot-net-solutions-design-and-trade-offs/\">How To Structure Your .NET Solutions: Architecture And Trade-Offs</a> <em>(James Hickey)</em></li>\n<li><a href=\"https://devclass.com/2022/12/22/microsoft-plans-pre-compiled-queries-for-entity-framework-and-may-replace-old-and-crufty-net-sql-server-provider/\">Microsoft plans pre-compiled queries for Entity Framework, and may replace old and crufty .NET SQL Server provider</a> <em>(Tim Anderson)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://tfos.co/p/rebuild-social-media/\">How to rebuild social media on top of RSS</a> <em>(Jacob O'Bryant)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/20/no-the-fbi-is-not-paying-twitter-to-censor/\">No, The FBI Is NOT 'Paying Twitter To Censor'</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.bleepingcomputer.com/news/security/oktas-source-code-stolen-after-github-repositories-hacked/\">Okta's source code stolen after GitHub repositories hacked</a> <em>(Ax Sharma)</em></li>\n<li><a href=\"https://www.technologyreview.com/2022/12/19/1065306/roomba-irobot-robot-vacuums-artificial-intelligence-training-data-privacy/\">A Roomba recorded a woman on the toilet. How did screenshots end up on Facebook?</a> <em>(Eileen Guo)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.rockpapershotgun.com/classic-fps-star-wars-dark-forces-has-gotten-a-well-deserved-glow-up\">Classic FPS Star Wars: Dark Forces has gotten a well deserved glow-up</a> <em>(CJ Wheeler)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2022/12/22/the-free-market-is-failing-us-on-antibiotics/\">The free market is failing us on antibiotics</a> <em>(Sabri Ben-Achour)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/12/nasas-insight-lander-has-probably-phoned-home-for-the-last-time/\">After a long struggle with Martian dust, NASA's InSight probe has gone quiet</a> <em>(Eric Berger)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/4026971/2022/12/22/mets-steve-cohen-spending/\">Steve Cohen's Mets spending spree and the ramifications for the rest of the league</a> <em>(Evan Drellich)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/chatgpt-can-write-english-essays-quite-well-how-are-teachers-going-to-deal/\">Marketplace Tech: ChatGPT can write English essays...quite well. How are teachers going to deal?</a></li>\n<li><a href=\"https://nodogmapodcast.bryanhogan.net/163-jared-parsons-the-c-compiler-part-1/\">No Dogma #163: Jared Parsons, The C# Compiler, Part 1</a></li>\n<li><a href=\"https://nodogmapodcast.bryanhogan.net/164-jared-parsons-the-c-compiler-part-2/\">No Dogma #164: Jared Parsons, The C# Compiler, Part 2</a></li>\n<li><a href=\"https://hanselminutes.com/838/cross-platform-uis-with-c-and-avalonia-with-dan-walmsley\">Hanselminutes #838: Cross-platform UIs with C# and Avalonia with Dan Walmsley</a></li>\n<li><a href=\"https://www.npr.org/2022/04/28/1095354740/what-leadership-looks-like\">TED Radio Hour: What Leadership Looks Like</a></li>\n<li><a href=\"https://hanselminutes.com/872/hachyderms-kris-nova-on-running-a-mastodon-server\">Hanselminutes #872: Hachyderm's Kris Nova on Running a Mastodon Server</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://timharford.com/2022/12/quitting-is-underrated/\">Quitting is Underrated</a> <em>(Tim Harford)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Brand New - Can't Get It Out</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/_esbL0or930\" title=\"Brand New - Can't Get It Out\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/10/",
      "url": "https://kpwags.com/reading-log/10/",
      "title": "Reading Log - December 16, 2022 (#10)",
      "content_html": "\n\t\t<p>There's no escaping the Twitter drama this week after Elon's petty hypocrisy. But outside that, we look at the celebrating the 75th birthday of the transistor, a big advancement in fusion energy, as well as a big announcement from Apple.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/whats-new-in-visual-studio-productivity/\">What's new in Visual Studio productivity</a> <em>(Dante Gagne)</em></li>\n<li><a href=\"https://www.meziantou.net/prevent-http-requests-to-external-services-in-unit-tests.htm\">Prevent http requests to external services in unit tests</a> <em>(Gérald Barré)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2022/12/12/tsa-quietly-deploying-facial-recognition-scanners-at-major-us-airports/\">TSA Quietly Deploying Facial Recognition Scanners At Major US Airports</a> <em>(Tim Cushing)</em></li>\n<li><a href=\"https://www.marketplace.org/2022/12/12/75-years-ago-the-transistor-ignited-the-fire-of-modern-innovation/\">75 years ago, the transistor ignited the fire of modern innovation</a> <em>(David Brancaccio &amp; Alex Schroeder)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/16/yes-elon-musk-is-fucking-up-twitter-but-no-the-government-has-no-business-getting-involved/\">Yes, Elon Musk Is Fucking Up Twitter; But No, The Government Has No Business Getting Involved</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/14/twitters-big-ad-plan-violate-both-ftc-consent-decree-california-privacy-law-to-force-users-to-hand-over-info-for-ad-targeting/\">Twitter's Big Ad Plan: Violate FTC Consent Decree, California Privacy Law &amp; EU Privacy Laws To Force Users To Hand Over Info For Ad Targeting</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/14/elons-promise-not-to-ban-account-tracking-his-jet-didnt-last-very-long-at-all-also-bans-guys-personal-account/\">Elon's Promise Not To Ban Account Tracking His Jet Didn't Last Very Long At All; Also Bans Guy's Personal Account</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/14/big-news-apple-will-allow-outside-app-stores-in-response-to-eu-law/\">Big News: Apple Will Allow Outside App Stores In Response To EU Law</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/15/despite-warnock-win-gigi-sohns-path-to-the-fcc-remains-mired-in-dumb-corrupt-bullshit/\">Despite Warnock Win, Gigi Sohn's Path To The FCC Remains Mired In Dumb, Corrupt Bullshit</a> <em>(Karl Bode)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://kotaku.com/xbox-playstation-call-of-duty-10-year-offer-plus-game-1849885314\">Report: Microsoft Offered Sony Call Of Duty On PlayStation Plus</a> <em>(Luke Plunkett)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2022/12/8/23498823/coindesk-ftx-dcg-barry-silbert-grayscale-genesis\">How CoinDesk's FTX scoop left a hole in its corporate overlord</a> <em>(Elizabeth Lopatto)</em></li>\n<li><a href=\"https://www.marketplace.org/2022/12/12/how-congress-latest-bid-to-help-americans-save-for-retirement-falls-short/\">How Congress' latest bid to help Americans save for retirement falls short</a> <em>(Meghan McCarty Carino)</em></li>\n<li><a href=\"https://arstechnica.com/cars/2022/12/us-government-lends-gm-and-lg-2-5-billion-for-ev-battery-plants/\">GM and LG get $2.5 billion battery loan from the Department of Energy</a> <em>(Jonathan M. Gillian)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.theatlantic.com/technology/archive/2022/12/department-of-energy-nuclear-fusion-breakthrough-nif-livermore/672439/\">Is This the 'Kitty Hawk Moment' for Fusion Energy?</a> <em>(Charles Seife)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://blogs.fangraphs.com/why-are-teams-issuing-extremely-long-contracts/\">Why Are Teams Issuing Extremely Long Contracts?</a> <em>(Ben Clemens)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2022/12/12/1142307808/revitalizing-american-innovation\">The Indicator #1252: Revitalizing American innovation</a></li>\n<li><a href=\"https://www.marketplace.org/shows/how-we-survive/swampland-for-sale/\">How We Survive Season 2, Episode 7: Swampland for Sale</a></li>\n<li><a href=\"https://www.npr.org/programs/fresh-air/2022/12/08/1141570283/fresh-air-for-dec-8-2022-tech-journalist-casey-newton-on-twitter?showDate=2022-12-08\">Fresh Air: Chaos reigns at Twitter as Musk manages 'by whims'</a></li>\n<li><a href=\"https://www.pushkin.fm/podcasts/against-the-rules/respect-the-polygon\">Against the Rules: Respect the Polygon</a></li>\n<li><a href=\"https://www.economist.com/podcasts/2022/12/14/the-changing-ideology-of-silicon-valley\">Money Talks: The changing ideology of Silicon Valley</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://kotaku.com/escape-rooms-drunk-horror-stories-solutions-popular-1849897414\">When Things Go Wrong With Players Solving Escape Rooms</a> <em>(Kenneth Seward Jr.)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Rocky Votolato - Evergreen</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/YAl90hJ42qo\" title=\"Rocky Votolato - Evergreen\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/9/",
      "url": "https://kpwags.com/reading-log/9/",
      "title": "Reading Log - December 9, 2022 (#9)",
      "content_html": "\n\t\t<p>Ignoring more Twitter drama this week to look at the FTC filing a lawsuit to stop Microsoft and more.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.marketplace.org/2022/12/08/ftc-sues-to-block-microsoft-activision-blizzard-69-billion-merger/\">FTC sues to block Microsoft-Activision Blizzard $69 billion merger</a></h2>\n\t<div class=\"in-depth-meta\">Marketplace</div>\n\t<div class=\"in-depth-text\">\n<p>After having just read <a href=\"https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review\">Chokepoint Capitalism</a>, it’s good to see the FTC step up and sue to stop this. Microsoft is currently saying and doing “the right things”, but who knows how long that will last if the purchase goes through and they corner more of the market.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://wildermuth.com/2022/11/26/csharp-11-strings-in-the-raw/\">C# 11 Strings in the Raw</a> <em>(Shawn Wildermuth)</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2022/the-word-value-in-css/\">The Word “Value” in CSS</a> <em>(Jim Nielsen)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/get-your-developer-news/\">Get your developer news</a> <em>(Mads Kristensen)</em></li>\n<li><a href=\"https://www.joshwcomeau.com/css/css-variables-for-react-devs/\">CSS Variables for React Devs</a> *(Josh Comeau)</li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2022/12/8/23500753/microsoft-windows-11-screen-recorder-snipping-tool\">Windows 11 is finally getting a built-in screen recording tool</a> <em>(Tom Warren)</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2022/12/apple-adds-end-to-end-encryption-to-icloud-device-backups-and-more/\">Apple adds end-to-end encryption to iCloud device backups and more</a> <em>(Samuel Axon)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/12/07/hello-youve-been-referred-here-because-youre-wrong-about-twitter-and-hunter-bidens-laptop/\">Hello! You've Been Referred Here Because You're Wrong About Twitter And Hunter Biden's Laptop</a> <em>(Mike Masnick)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gaming/2022/12/microsoft-promises-call-of-duty-for-nintendo-consoles-in-surprise-10-year-deal/\">Microsoft promises Call of Duty for Nintendo consoles in surprise 10-year deal</a>  <em>(Kyle Orland)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/12/fifty-years-later-remastered-images-reveal-apollo-17-in-stunning-clarity/\">Fifty years later, remastered images reveal Apollo 17 in stunning clarity</a> <em>(Eric Berger)</em></li>\n<li><a href=\"https://www.marketplace.org/2022/12/08/report-greener-fuels-are-best-path-to-cutting-carbon-out-of-air-travel/\">Report: Greener fuels are best path to cutting carbon out of air travel</a> <em>(Samantha Fields)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2022/12/02/1140465961/tax-loophole-internal-revenue-service-avoidance-evasion\">Planet Money #1595: My Favorite Tax Loophole</a></li>\n<li><a href=\"https://play.acast.com/s/cyber/taking-elon-musk-seriously\">Cyber: Taking Elon Musk Seriously</a></li>\n<li><a href=\"https://play.acast.com/s/cyber/railroad-strikes-and-killer-robots\">Cyber: Railroad Strikes and Killer Robots</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2022/12/8/23500305/the-dark-tower-tv-series-mike-flanagan-stephen-king-amazon\">Mike Flanagan is creating a TV series for The Dark Tower</a> <em>(Jess Weatherbed)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Frank Turner - Perfect Score</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/xtkK9izzJGo\" title=\"Frank Turner - Perfect Score\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-09T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/12/08/developing-with-dev-tools-open/",
      "url": "https://kpwags.com/posts/2022/12/08/developing-with-dev-tools-open/",
      "title": "Developing with Dev Tools Open",
      "content_html": "\n\t\t<p>One thing I've started to do when I'm actively developing a website or application is keep the dev tools open docked to the side. I do this for two reasons.</p>\n<h2>Disabling Cache</h2>\n<p>First, dev tools have a nice setting that allows you to disable the cache when the dev tools are open. If you open up your browser dev tools, under <code>Preferences &gt; Network</code> there's an option to disable the cache</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/4ys8AMTe-V-622.webp 622w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/4ys8AMTe-V-622.gif 622w\" /><img alt=\"A screen shot of the preferences screen in Chrome dev tools\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/4ys8AMTe-V-622.png\" width=\"622\" height=\"457\" /></picture></p>\n<p>This just helps make sure I'm not debugging old Javascript or CSS. It doesn't happen too often, but can save some hassle.</p>\n<h2>Catching Errors</h2>\n<p>The second, and probably more important reason is to catch errors and warnings early. While interacting with what I'm working on, any errors, warnings or other messages of note will often pop up in the JavaScript Console in the dev tools. Keeping the console open and docked to the side allows me to easily see what might be happening that I might not notice. It definitely can cut down debugging later.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/eCUuj1QBfC-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/eCUuj1QBfC-1200.gif 1200w\" /><img alt=\"A screen shot of the the developer console open alongside my blog\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/eCUuj1QBfC-1200.jpeg\" width=\"1200\" height=\"765\" /></picture></p>\n<p>And besides, with larger 4k and ultra wide monitors, I have the screen real estate.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review/",
      "url": "https://kpwags.com/posts/2022/12/07/chokepoint-capitalism-a-review/",
      "title": "Chokepoint Capitalism: A Review",
      "content_html": "\n\t\t<p>Earlier this year I backed a Kickstarter campaign by Cory Doctorow &amp; Rebecca Giblin for their new book <em>Chokepoint Capitalism</em>. I had read several of Cory's books and consider him someone who is knowledgeable about the creative industry. So when the Kickstarter campaign popped up in my feeds, I decided it was worth my investment, and a read.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/GThWXQMXks-295.webp 295w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/GThWXQMXks-295.gif 295w\" /><img alt=\"The cover of Chokepoint Capitalism: How Big Tech and Big Content Captured Creative Labor Markets and How We'll Win them Back by Rebecca Giblin &amp; Cory Doctorow\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/GThWXQMXks-295.jpeg\" width=\"295\" height=\"450\" /></picture></p>\n<p><em>Chokepoint Capitalism: How Big Tech and Big Content Captured Creative Labor Markets and How We'll Win them Back</em> is at it's core a book about how companies like Amazon, Google, Apple, TicketMaster, and others are hurting the creative labor industry. We're talking authors, musicians, TV &amp; movie writers, app developers and more, and how they are being squeezed by big tech and other big companies to the point where it can be hard to make a real living.</p>\n<p>I can't begin to do as good of a job explaining all of this as Cory and Rebecca can, so I will encourage you to buy the book at your local bookstore, or check your local library. But I did want to make a few points and share some of my takeaways.</p>\n<h2>My Thoughts</h2>\n<p>First off, copyright law in America, and in many countries for that matter is broken. Amazon dominates the eBook and audiobook market. Part of the reason for that is that they were able to lock people into their systems, myself included. All the audiobooks you get through Audible and the overwhelming majority of eBooks you buy from Amazon have DRM attached to them. This means that you can only read and listen to them through Amazon. If you decide you want to switch to a different service or device, all your purchased content gets left behind. You can't take it with you, at least not without breaking the law and risking fines and possible jail time. That shouldn't be allowed to happen. If you buy an eBook from Amazon, you should be able to transfer it to a Nook if you switch devices, and vice versa. This shouldn't be controversial and the law can fix this. Being able to switch platforms would weaken Amazon's hold and could help authors and publishers get better deals.</p>\n<p>Second, antitrust laws need to be updated and enforced. Too often antitrust is looking at consumer harm in the here and now, and not considering what will happen down the line when the big companies can corner the market. Cory and Rebecca had this apt quote:</p>\n<blockquote>\n<p>However, the Chicago School had a unique remedy for the problem of monopolists being able to pervert their regulators: eliminate regulation altogether! No regulation, no regulators, no regulatory capture, no problem (somehow, preventing monopolies from forming in the first place didn't seem to cross their minds).</p>\n</blockquote>\n<p>There hasn't been much enforcement of it late and companies like Ticketmaster have been able to grow bigger and bigger, swallowing up everyone, and then using that size to corner the market. Looking at Ticketmaster, if you're a small venue, good luck getting any major acts to come if you refuse to do business with them.</p>\n<blockquote>\n<p>US antitrust law is actually pretty great (and new bills in the pipeline as we write this would strengthen it further), but the US political consensus has been that antitrust is mostly a dead letter, a quirk of history that can be ignored the same way we ignore laws that require you to hire a boy to run ahead of your auto-car with a lantern and a bell to warn horse-riders that you're coming.</p>\n</blockquote>\n<p>Stop monopolies from forming and fostering true competition would certainly help  the creative industry get better deals.</p>\n<p>There's a lot more that Rebecca and Cory cover, but you'd do better hearing it from them rather than me.</p>\n<h2>My Takeaways</h2>\n<p>Reading the book has left me thinking about how I consume media.</p>\n<p>I've been on a physical book kick at the moment, but I still do appreciate the portability of being able to use my Kindle. I have no reason to upgrade at the moment, but I will probably give serious consideration to moving to Kobo or another device when the time comes. I'm also going to start branching out with where I buy my eBooks. I've generally just bought them from Amazon...because duh, it's easy! Now, I'm probably going to see where else I can buy them, ideally DRM-free.</p>\n<p>One of the other things mentioned in the book is how much the auto-generated playlists from the likes of Spotify can make or break artists, especially those just starting out. While I certainly enjoy some of the playlists that Spotify generates for me, I think I'm gonna try to look at other websites and services that might help recommend me new artists to listen to. And of course I will continue to purchase the actual records of some of my favorite musicians.</p>\n<h2>One Last Word</h2>\n<p>Again, I would highly recommend everyone go read this book, it's fascinating looking at how these companies have put the squeeze on the creative industry. But while I've focused here on some of the issues, Rebecca and Cory do a much better job diving into them, and more importantly, digging into possible solutions. I'll leave you with this quote from the book:</p>\n<blockquote>\n<p>The increasing financial precarity that has accompanied these forty years of antitrust neglect is one reason why so many people are desperate and angry, and perhaps also helps explain why they are willing to listen to demagogues promising to blow the system up.</p>\n</blockquote>\n<p>Because while this book focuses on the creative industry, you can see parallels across all industries and the general population within in.</p>\n<p><a href=\"https://www.penguinrandomhouse.com/books/710957/chokepoint-capitalism-by-cory-doctorow-and-rebecca-giblin/9780807007068\">Buy <em>Chokepoint Capitalism: How Big Tech and Big Content Captured Creative Labor Markets and How We'll Win them Back</em></a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/12/05/november-check-in/",
      "url": "https://kpwags.com/posts/2022/12/05/november-check-in/",
      "title": "November Check-In",
      "content_html": "\n\t\t<p>Thanksgiving has come and gone, so that means November has also come and gone. It was not a bad month by any means as I got to spend time with my family for both my niece's baptism as well as Thanksgiving.</p>\n<h2>Hockey Injuries are No Fun</h2>\n<p>In mid-November, I ended up getting run into while playing goalie in the upper leagues at the ice rink I play at. Banged up my groin and hip pretty badly which kept me off the ice and away from legs days at the gym for 2 weeks. It could've obviously been way worse, so thankfully it wasn't a long-term thing. Just frustrating because the players are better and should have better control over their skating. I expect this more in the lower leagues where players are still learning how to skate.</p>\n<h2>Thanksgiving</h2>\n<p>I ended up spending Thanksgiving at my Aunt's house. It was nice to see most of my Dad's side of the family. Caught up since it had been a while since I've seen any of them. Turned out to be a nice day too after a seemingly early cold spell.</p>\n<h2>Fitness Tracker</h2>\n<p>I had put this project aside to work on Digital Family Cookbook. I decided to re-start this project from the ground up as I realized the original foundation, while definitely useable, could've been better constructed. Like most of my side projects, I learn more and want to build on what I've learned to build better systems. I have a few more tasks on Digital Family Cookbook, but I should be able to knock them out pretty easily when I'm in the mood. The restart of Fitness Tracker is also giving me the chance to start from scratch with <a href=\"https://vitejs.dev/\">Vite</a> and <a href=\"https://vitest.dev/\">Vitest</a>. I'll probably write up some quick thoughts on them sometime in December.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I only ended up running 9.34 miles in November. That hockey injury ended up curtailing my physical activities.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>I haven't done much lower body, again because of the injury, but have continued to press on with upper body exercises.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/the-data-detective-ten-easy-rules-to-make-sense-of-statistics/9780593084663\">The Data Detective: Ten Easy Rules to Make Sense of Statistics</a> by Tim Harford</li>\n<li><a href=\"https://bookshop.org/books/chokepoint-capitalism-how-big-tech-and-big-content-captured-creative-labor-markets-and-how-we-ll-win-them-back/9780807007068\">Chokepoint Capitalism</a> by Rebecca Giblin &amp; Cory Doctorow</li>\n<li><a href=\"https://bookshop.org/p/books/what-if-2-additional-serious-scientific-answers-to-absurd-hypothetical-questions-randall-munroe/18153615?ean=9780525537113\">What If? 2</a> by Randall Munroe</li>\n<li><a href=\"https://bookshop.org/p/books/weapons-of-math-destruction-how-big-data-increases-inequality-and-threatens-democracy-cathy-o-neil/11438502?ean=9780553418835\">Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy</a> by Cathy O'Neil</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/p/books/four-lost-cities-a-secret-history-of-the-urban-age-annalee-newitz/16712885?ean=9780393882452\">Four Lost Cities: A Secret History of the Urban Age</a> by Annalee Newitz</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued my reading logs\n<ul>\n<li><a href=\"https://kpwags.com/posts/2022/11/04/reading-log-november-4-4\">November 4 (#4)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/11/11/reading-log-november-11-5\">November 11 (#5)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/11/18/reading-log-november-18-6\">November 18 (#6)</a></li>\n<li><a href=\"https://kpwags.com/posts/2022/11/25/reading-log-november-25-7\">November 25 (#7)</a></li>\n</ul>\n</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/11/08/adding-themes\">adding themes to my site</a></li>\n<li>Wrote about my <a href=\"https://kpwags.com/posts/2022/11/18/on-ftx-and-crypto-in-general\">thoughts on FTX &amp; Crypto</a></li>\n<li>Wrote about my <a href=\"https://kpwags.com/posts/2022/11/23/artemis-i\">excitement and mixed thoughts on Artemis I</a></li>\n<li>Shared my new <a href=\"https://kpwags.com/posts/2022/11/27/apollo-remastered\">coffee table book</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Haven't played much <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">World of Warcraft</a>, might end up cancelling my subscription</li>\n<li>Continued <a href=\"https://www.ea.com/games/starwars/jedi/jedi-fallen-order\">Jedi: Fallen Order</a></li>\n<li>Picked up and started <a href=\"https://scarletviolet.pokemon.com/en-us/\">Pokemon Violet</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">Yellowstone</a>, now up to date and on Season 5</li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n</ul>\n<p><strong>🎬 Movies</strong></p>\n<p>My wife and I have started back up watching movies on the weekend.</p>\n<ul>\n<li><a href=\"https://www.imdb.com/title/tt0109444/\">Clear and Present Danger</a></li>\n<li><a href=\"https://www.imdb.com/title/tt14813212/\">The Munsters (2022)</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/8/",
      "url": "https://kpwags.com/reading-log/8/",
      "title": "Reading Log - December 2, 2022 (#8)",
      "content_html": "\n\t\t<p>Another quiet week. Artemis I is continuing to send back amazing pictures. LastPass had a bad week. And there's some cool CSS stuff.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://web.dev/viewport-units/\">The large, small, and dynamic viewport units</a> <em>(Bramus)</em></li>\n<li><a href=\"https://jakelazaroff.com/words/tailwind-is-a-leaky-abstraction/\">Tailwind is a Leaky Abstraction</a> <em>Jake Lazaroff</em></li>\n<li><a href=\"https://css-tricks.com/digging-deeper-into-container-style-queries/\">Digging Deeper Into Container Style Queries</a> <em>(Geoff Graham)</em></li>\n<li><a href=\"https://css-tricks.com/css-only-infinite-and-circular-image-slider/\">CSS Infinite and Circular Rotating Image Slider</a> <em>(Temani Afif)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2022/12/01/1140076375/major-password-manager-lastpass-suffered-a-breach-again\">Major password manager LastPass suffered a breach — again</a> <em>(Ashley Ahn)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://kotaku.com/halo-infinite-forge-classic-maps-blood-gulch-1849838429\">24 Halo Infinite Forge Maps Inspired By The Classic Games</a> <em>(Claire Jackson)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2022/11/25/1139180002/twitter-loses-50-top-advertisers-elon-musk\">Twitter has lost 50 of its top 100 advertisers since Elon Musk took over, report says</a> <em>(Halisia Hubbard)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/11/orion-flies-far-beyond-the-moon-returns-an-instantly-iconic-photo/\">Orion flies far beyond the Moon, returns an instantly iconic photo</a> <em>(Eric Berger)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2022/11/23/techdirt-podcast-episode-337-will-elon-kill-twitter/\">Techdirt Podcast #337: Will Elon Kill Twitter</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Lucero - One Last F.U.</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/0TwVOs8erh0\" title=\"Lucero - One Last F.U.\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-12-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/11/27/apollo-remastered/",
      "url": "https://kpwags.com/posts/2022/11/27/apollo-remastered/",
      "title": "Apollo Remastered",
      "content_html": "\n\t\t<p>At the recommendation of <a href=\"https://mastodon.world/@kairyssdal\">Kai Ryssdal</a> from <a href=\"https://www.marketplace.org/\">Marketplace</a>, I ended up purchasing a new coffee table book called <em>Apollo Remastered</em>. And oh man was it worth the purchase.</p>\n<p>All the film taken during NASA's Apollo Program has been placed in cold storage to protect and preserve them. Andy Saunders has been taking the film and digitizing it and then enhancing the photos taken by the Apollo astronauts for this book. Needless to say, the photos are amazing. I haven't gotten through a quarter of them and I'm blown away.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/uyHzaYGsaC-1080.webp 1080w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/uyHzaYGsaC-1080.gif 1080w\" /><img alt=\"A view of the cover of Andy Saunder's book Apollo Remastered\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/uyHzaYGsaC-1080.jpeg\" width=\"1080\" height=\"1366\" /></picture></p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/cC0kP6F5FO-1080.webp 1080w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/cC0kP6F5FO-1080.gif 1080w\" /><img alt=\"A side view of Andy Saunder's book Apollo Remastered showing how thick it is\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/cC0kP6F5FO-1080.jpeg\" width=\"1080\" height=\"663\" /></picture></p>\n<p>If you're a fan of NASA, space, or are interested in the history of the moon landings, I would highly recommend buying this book.</p>\n<p><a href=\"https://bookshop.org/p/books/apollo-remastered-the-ultimate-photographic-record-andy-saunders/17299956?ean=9780762480241\">Buy on Bookshop.org</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/7/",
      "url": "https://kpwags.com/reading-log/7/",
      "title": "Reading Log - November 25, 2022 (#7)",
      "content_html": "\n\t\t<p>It was a relatively light week with American Thanksgiving.</p>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://github.com/eslint/eslint/discussions/16557\">Complete rewrite of ESLint</a> <em>(Nicholas Zakas)</em></li>\n<li><a href=\"https://jrsinclair.com/articles/2022/whats-so-great-about-functional-programming-anyway/\">What's So Great About Functional Programming?</a> <em>(James Sinclair)</em></li>\n<li><a href=\"https://maxrozen.com/beginners-guide-to-react-testing\">The Beginner's Guide to React Testing</a> <em>(Max Rozen)</em></li>\n<li><a href=\"https://www.stefanjudis.com/today-i-learned/elements-can-be-visible-even-though-their-parent-has-set-visibility-hidden/\">Elements can be visible even though their parent has set &quot;visibility: hidden”</a> <em>(Stefan Judis)</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/480539f1-98ab-45bc-ba24-9ccec65b459a\">&quot;Use always a StringBuilder&quot; - Internet myths</a> <em>(Steven Giesel)</em></li>\n<li><a href=\"https://dev.to/bytehide/senior-c-developer-shows-how-to-master-your-c-level-1a0p\">Senior C# Developer Shows 5 Tips To Master Your C# Level</a> <em>(Stefan Djokic)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://9to5mac.com/2022/11/24/brazil-seizes-iphones-retail-stores-charger-requirement/\">Brazilian regulator seizes iPhones from retail stores as Apple fails to comply with charger requirement</a> <em>(Filipe Espósito)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/11/nasas-new-rocket-blows-the-doors-off-its-mobile-launch-tower/\">NASA's new rocket blows the doors off its mobile launch tower</a> <em>(Eric Berger)</em></li>\n<li><a href=\"https://www.theguardian.com/society/2022/nov/25/universal-flu-vaccine-may-be-available-within-two-years-says-scientist\">Universal flu vaccine may be available within two years, says scientist</a> <em>(Guardian)</em></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://stackoverflow.blog/2022/11/23/why-writing-by-hand-is-still-the-best-way-to-retain-information/\">Why writing by hand is still the best way to retain information</a> <em>(Corissa E Haury)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Billy the Kid - This Sure as Hell Ain't My Life</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/NforjFwQpOQ\" title=\"Billy the Kid - This Sure as Hell Ain't My Life\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/11/23/artemis-i/",
      "url": "https://kpwags.com/posts/2022/11/23/artemis-i/",
      "title": "Artemis I",
      "content_html": "\n\t\t<p>Almost a week ago, NASA finally launched the <em>Artemis I</em> mission. This is the first launch of the Space Launch System (SLS). It launched an unmanned Orion capsule around the moon. While I'm excited about the prospect of us going back to the moon, I have mixed feelings on the current program.</p>\n<h2>The Excitement</h2>\n<p>I'm not going to lie, I love the thought of humans touching down on the lunar soil once again. I wasn't alive at the time of Apollo, but I've watched plenty of documentaries about the early days of human space exploration. I remember watching shuttle launches as a kid in awe of them. I was excited to watch the final launches and the completion of the International Space Station. I was excited to see SpaceX launch their first Falcon 9 rockets and eventually launch men up to the space station again from U.S. soil.</p>\n<p>The pictures the Orion capsule is sending back from its mission are absolutely breathtaking.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/yX7uS59VmS-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/yX7uS59VmS-1200.gif 1200w\" /><img alt=\"NASA's Orion capsule floating in space with Earth in the background\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/yX7uS59VmS-1200.jpeg\" width=\"1200\" height=\"900\" /></picture></p>\n<div class=\"image-credit\">Image Credit NASA</div>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/ykiw9Wkj3i-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/ykiw9Wkj3i-1024.gif 1024w\" /><img alt=\"NASA's Orion capsule floating in space with the Moon in the background\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/ykiw9Wkj3i-1024.jpeg\" width=\"1024\" height=\"768\" /></picture></p>\n<div class=\"image-credit\">Image Credit NASA</div>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/OyGUxkzYwo-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/OyGUxkzYwo-1024.gif 1024w\" /><img alt=\"NASA's Orion capsule floating in space with Earth rising up above the Moon\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/OyGUxkzYwo-1024.jpeg\" width=\"1024\" height=\"630\" /></picture></p>\n<div class=\"image-credit\">Image Credit NASA</div>\n<h2>The “Hmmmm...”</h2>\n<p>Launching into space is expensive, there are no ifs ands or buts about it. SpaceX has been able to bring the cost of launches to Low Earth Orbit (LEO) down with its reusability, but it's still super expensive. The Falcon 9 doesn't have the lift capacity to launch outside of LOE though. The Falcon Heavy has more, but still not the level the SLS has. And later SLS models will have even more lift than the Block 1 model being used for the first 3 Artemis missions.</p>\n<p>The SLS has a nickname of the <em>Senate Launch System</em>. It's got the nickname because it seems more like a jobs program than a launch system. The SLS rocket is going to cost well over $2.1 billion dollars per launch. In other words, really expensive. For reference in today's dollars, the Apollo Saturn V launches cost around $1.25b per launch, and the Space Shuttle clocked in around $1.5b per launch. It's hard to wrap your head around some of those numbers, but they're huge.</p>\n<p>The Falcon Heavy by comparison costs anywhere from $100-150 million per launch. Quite the difference.</p>\n<p>I'm not a rocket scientist by any means, but I have to wonder if there isn't a cheaper way to bridge the gap between the Falcon Heavy and the SLS to allow for man to walk on the moon and to potentially build a permanent base on it.</p>\n<p>SpaceX's <em>Starship</em> is also around the corner promising another heavy lift rocket.</p>\n<h2>Making Sure Science isn't Missed</h2>\n<p>I'm someone who wants to keep the science part of space exploration at the forefront. I'd be concerned if we relied on SpaceX for all of our human exploration.</p>\n<p>SpaceX is a business out to make money. There is absolutely nothing wrong with that. If they can help NASA by ferrying astronauts back and forth to the space station, launching satellites, or even getting astronauts to the moon, and make money by doing it, that's great. Good for them. I'm not knocking the profit motive at all. My concern is that profit, resource extraction and everything else will take center stage and the science will be put on the back burner.</p>\n<p>I firmly believe that both science and the business of space can successfully coexist. It's not an either-or proposition. I think that's the one thing Artemis and the SLS have going for them. It's NASA's rocket and NASA determines what it's used for.</p>\n<p>I just hope we have the drive as a country to ensure that the the science of space exploration continues to be alive and well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/11/18/on-ftx-and-crypto-in-general/",
      "url": "https://kpwags.com/posts/2022/11/18/on-ftx-and-crypto-in-general/",
      "title": "On FTX and Crypto in General",
      "content_html": "\n\t\t<p>Over the last 2 weeks, we've seen one of the most popular and biggest crypto exchanges go from top of the world to declaring bankruptcy. I try not to dump on stuff I don't fully understand, but at this point, I'm kind of glad I haven't gotten into the whole crypto craze.</p>\n<p>I remember seeing all this hype over FTX. It was supposed to be respectable. Major League Baseball umpires wore their logo on their uniforms. The Miami Heat played in an arena where FTX had naming rights. FTX was supposed to be trustworthy and not riddled with the scams crypto is so often associated with.</p>\n<p>I've been reading articles and listening to podcasts talking about what's been going on and...just wow. John Ray III, FTX's new CEO, who was also responsible for handling the aftermath at Enron had the following quote while <a href=\"https://apnews.com/article/ftx-trading-former-ceo-d2c2b881dc0eb0ec37b454674f446b52\">going through the mess at FTX</a>.</p>\n<blockquote>\n<p>Never in my career have I seen such a complete failure of corporate controls and such a complete absence of trustworthy financial information as occurred here. From compromised systems integrity and faulty regulatory oversight abroad, to the concentration of control in the hands of a very small group of inexperienced, unsophisticated and potentially compromised individuals, this situation is unprecedented.</p>\n</blockquote>\n<p>A lot of people are obviously going to lose money over this. I'm not gonna be too broken up about the VC firms or the institutional investors. But still, I'm wondering how many people who decided to dabble in cryptocurrency used the exchange. People who might not have all this money to lose. Obviously, people should have a diversified portfolio, but too many people have seen Bitcoin rise to incredible highs and they want in. If they decided to use FTX, they will likely not even have the chance to sell low, they'll be lucky to get anything.</p>\n<p><em>The Economist</em> had a good quote from their article <a href=\"https://www.economist.com/leaders/2022/11/17/is-this-the-end-of-crypto\"><em>Is This the End of Crypto?</em></a>:</p>\n<blockquote>\n<p>Whether crypto survives, or becomes a financial curiosity like the tulip bulb, will not ultimately depend on regulation. The more scandals ensue, the more the whole enterprise and its aspirations become tainted. The lure of innovation means nothing if investors and users fear their money will disappear into thin air. For crypto to rise again, it must find a valid use that leaves the dodginess behind.</p>\n</blockquote>\n<p>All too often, crypto seems to be tied to scams and other schemes that leave people hung out to dry. The technology as I understand it is certainly interesting, but the Wild West nature of it all is only strengthening my “just stay away” position.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/6/",
      "url": "https://kpwags.com/reading-log/6/",
      "title": "Reading Log - November 18, 2022 (#6)",
      "content_html": "\n\t\t<p>CSS has come a long way, and NASA has finally launched <em>Artemis I</em> to the moon.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://frontendmastery.com/posts/the-evolution-of-scalable-css/\">The Evolution of Scalable CSS</a></h2>\n\t<div class=\"in-depth-meta\">Frontend Mastery</div>\n\t<div class=\"in-depth-text\">\n<p>It still amazes me sometimes with how far we’ve come in web development. I remember back around 2000(ish) playing around with building websites in Geocities and Front Page. Going from the clunky, old-school direct properties on the DOM elements to now using CSS stylesheets is such an improvement.</p>\n<p>There are now so many new CSS properties, functions and selectors that I’m still trying to wrap my head around all of them. Making them scale in a large web application is no easy task.</p>\n<blockquote><p>No tool is perfect, and every project and team is different. Whatever approach is taken, establishing foundations that bridge the design gap is a key element to scaling CSS.</p></blockquote>\n<p>The article gives a good overview of some of the things you can try to do to make your CSS more manageable, but the conclusion makes sense. We all do things differently, and teams need to figure out what is best and most sustainable for themselves. Take examples from others, but make sure to do what works.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development &amp; Design</h2>\n<ul>\n<li><a href=\"https://newdevsguide.com/2022/11/13/the-best-csharp-11-feature/\">The Best C# 11 Feature You Don't Need</a> <em>(Matt Eland)</em></li>\n<li><a href=\"https://www.tabsoverspaces.com/233907-my-csharp-array-tuple-delegate-declaration-dilemma\">My C# array, tuple, delegate declaration dilemma</a> <em>(Jiří Činčura)</em></li>\n<li><a href=\"https://timdeschryver.dev/blog/assertion-scopes-the-one-fluentassertions-feature-you-didnt-know-you-needed\">Assertion Scopes, the one FluentAssertions feature you didn't know you needed</a> <em>(Tim Deschryver)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/multi-repository-support-released/\">Multi-repository Support Released!</a> <em>(Jessie Houghton)</em></li>\n<li><a href=\"https://michaelscodingspot.com/asp-net-over-node-js/\">7 Reasons for Startups to Choose ASP.NET Over Node.js</a> <em>(Michael Shpilt)</em></li>\n<li><a href=\"https://paulstamatiou.com/craft/\">Craft</a> <em>(Paul Stamatiou)</em></li>\n<li><a href=\"https://web.dev/web-platform-10-2022/\">New to the web platform in October</a> <em>(Rachel Andrew)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/\">Announcing TypeScript 4.9</a> <em>(Daniel Rosenwasser)</em></li>\n<li><a href=\"https://dateo-software.de/blog/improve-your-asp-net-core-controllers\">Learn how to improve your ASP.NET Core controllers with these principles</a> <em>(Dennis Frühauff)</em></li>\n<li><a href=\"https://vived.io/new-hook-is-coming-to-react-frontend-weekly-vol-109/\">Make use of 'use' in React – a new hook is coming</a> <em>(Tomasz Borowicz)</em></li>\n<li><a href=\"https://css-tricks.com/early-days-of-container-style-queries\">Early Days of Container Style Queries</a> <em>(Geoff Graham)</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2022/remix-alternate-timeline-of-web-dev/\">Remix and the Alternate Timeline of Web Development</a> <em>(Jim Nielsen)</em></li>\n<li><a href=\"https://www.stefanjudis.com/blog/how-to-find-all-render-blocking-resources-with-javascript/\">How to find all render-blocking resources with JavaScript</a> <em>(Stefan Judis)</em></li>\n<li><a href=\"https://webkit.org/blog/13096/css-has-pseudo-class/\">Using :has() as a CSS Parent Selector and much more</a> <em>(Jen Simmons)</em></li>\n</ul>\n<hr />\n<h2>Technology &amp; the Internet</h2>\n<ul>\n<li><a href=\"https://mxb.dev/blog/the-indieweb-for-everyone/\">The IndieWeb for Everyone</a> <em>(Max Böck)</em></li>\n<li><a href=\"https://stratechery.com/2022/narratives/\">Narratives</a> <em>(Ben Thompson)</em></li>\n<li><a href=\"https://github.blog/2022-11-10-whats-new-with-codespaces-from-github-universe-2022/\">What's new with Codespaces from GitHub Universe 2022</a> <em>(Nik Molnar)</em></li>\n<li><a href=\"https://blog.developer.adobe.com/transforming-a-huge-monolith-to-micro-frontends-5fdd4179c44f\">Transforming a Huge Monolith into Micro Frontends</a> <em>(Gaurav Makkar)</em></li>\n<li><a href=\"https://stratechery.com/2022/microsoft-full-circle/\">Microsoft Full Circle</a> <em>(Ben Thompson)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/reviews/23462736/pokemon-scarlet-and-violet-review-release-date-nintendo-switch\">Scarlet and Violet are a step back for Pokémon's open-world era</a> <em>(Kenneth Shepard)</em></li>\n</ul>\n<hr />\n<h2>Business &amp; Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/business/2022/10/31/what-went-wrong-with-snap-netflix-and-uber\">What went wrong with Snap, Netflix and Uber?</a> <em>(The Economist)</em></li>\n<li><a href=\"https://www.economist.com/leaders/2022/11/17/is-this-the-end-of-crypto\">Is this the end of crypto?</a> <em>(The Economist)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/11/nasa-gets-its-mojo-back-with-a-stunning-nighttime-launch-of-the-sls-rocket/\">NASA gets its mojo back with a stunning nighttime launch of the SLS rocket</a> <em>(Eric Berger)</em></li>\n<li><a href=\"https://arstechnica.com/science/2022/11/a-cosmic-hourglass-webb-captures-image-of-protostar-swathed-in-dark-clouds/\">A cosmic hourglass: Webb captures image of protostar swathed in dark clouds</a> <em>(Jennifer Ouellette)</em></li>\n<li><a href=\"https://arstechnica.com/science/2022/11/strange-black-hole-merger-may-have-been-a-rare-random-encounter/\">Strange black hole merger may have been a rare random encounter</a> <em>(John Timmer)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2022/11/09/1135639385/libraries-publishers-ebooks-e-books-macmillan-protest-amazon-bezos\">Planet Money #1590: The E-Book Wars</a></li>\n<li><a href=\"https://www.wnycstudios.org/podcasts/otm/episodes/on-the-media-infinite-scroll\">On The Media - Infinite Scroll</a></li>\n<li><a href=\"https://changelog.com/podcast/484\">The Changeling #484: Wisdom from 50+ years in software</a></li>\n<li><a href=\"https://www.economist.com/cryptopod\">The Economist - Money Talks: What happened at FTX?</a></li>\n<li><a href=\"https://www.theringer.com/2022/11/15/23461279/crypto-crash-ftx-sam-bankman-fried\">Plain English: A Crypto Catastrophe: The Stunning Fall of FTX—and What Comes Next</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://matthiasott.com/notes/converting-your-twitter-archive-to-markdown\">Converting Your Twitter Archive to Markdown</a> <em>(Matthias Ott)</em></li>\n<li><a href=\"https://www.loudersound.com/features/rage-against-the-machine-debut-album-story\">“It was like holding a f**king live wire”: how Rage Against The Machine's explosive debut album changed everything</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Rage Against the Machine - Killing in the Name</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/bWXazVhlyxQ\" title=\"Rage Against the Machine - Killing in the Name\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/5/",
      "url": "https://kpwags.com/reading-log/5/",
      "title": "Reading Log - November 11, 2022 (#5)",
      "content_html": "\n\t\t<p>The Twitter drama is never ending. Microsoft has also released .NET 7 and C# 11!</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/2022/11/9/23450289/twitter-impersonators-official-mario-musk-jesus-valve\">Mario flipped off Twitter for nearly two hours with the blessing of Musk's 'verification'</a></h2>\n\t<div class=\"in-depth-meta\">Sean Hollister</div>\n\t<div class=\"in-depth-text\">\n<p>All this Twitter drama is like a train wreck in slow motion. I just can’t look away. So many of the mistakes Elon as made since he took over were predicted by just about everyone. This feels so much like them shooting themselves in the foot. It’s definitely only solidified my decision to leave Twitter. I’m keeping my Twitter account active to keep my username. I’m also not going to say that I’ll never go back, but it would have to change ownership and have a competent CEO for me re-consider.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development</h2>\n<ul>\n<li><a href=\"https://newdevsguide.com/2022/11/06/exception-anti-patterns-in-csharp/\">Top 10 Dotnet Exception Anti-Patterns in C#</a> <em>(Matt Eland)</em></li>\n<li><a href=\"https://stackoverflow.blog/2022/11/03/multiple-assertions-per-test-are-fine/\">Stop requiring only one assertion per unit test: Multiple assertions are fine</a> <em>(Mark Seeman)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-7/\">.NET 7 Is Available Today</a> <em>(.NET Blog)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/\">Welcome to C# 11</a> <em>(Mads Torgersen)</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2022/browsers-json-formdata/\">Browsers, JSON, and FormData</a> <em>(Jim Nielsen)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/visualstudio/introducing-visual-studio-rollback/\">Introducing Visual Studio Rollback!</a> <em>(Sayyeda Mussa)</em></li>\n<li><a href=\"https://blog.okyrylchuk.dev/twelve-csharp-11-features\">Twelve C# 11 Features</a> <em>(Oleg Kyrylchuk)</em></li>\n</ul>\n<hr />\n<h2>Technology and the Internet</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2022/11/11/23451931/elon-musk-twitter-bankrupt-verification-ftc\">Elon Musk learns the hard way that being a Twitter troll is way more fun than being a mod</a> <em>(Elizabeth Lopatto)</em></li>\n</ul>\n<hr />\n<h2>Business and Finance</h2>\n<ul>\n<li><a href=\"https://techcrunch.com/2022/11/08/binance-signs-letter-of-intent-to-acquire-ftx/\">Crypto giant Binance agrees to buy rival FTX amid 'liquidity crunch'</a> <em>(Manish Singh)</em></li>\n</ul>\n<p><em>and then...</em></p>\n<ul>\n<li><a href=\"https://newsletter.mollywhite.net/p/ftx-explainer\">The Sam Bankman-Fried empire crumbled. What happened? (part one)</a> <em>(Molly White)</em></li>\n<li><a href=\"https://newsletter.mollywhite.net/p/ftx-analysis\">The Sam Bankman-Fried empire crumbled. What happened? (part two)</a> <em>(Molly White)</em></li>\n</ul>\n<p><em>and then...</em></p>\n<ul>\n<li><a href=\"https://www.reuters.com/technology/ftx-says-will-file-us-bankruptcy-latest-blow-crypto-2022-11-11/\">FTX to file for U.S. bankruptcy protection, CEO Bankman-Fried resigns</a> <em>(Reuters)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.bbc.com/news/health-63513330\">Lab-grown blood given to people in world-first clinical trial</a> <em>(James Gallagher)</em></li>\n<li><a href=\"https://arstechnica.com/science/2022/11/nasas-artemis-i-rocket-just-endured-hours-of-hurricane-like-wind-gusts/\">NASA leaves its Artemis I rocket exposed to winds above design limits</a> <em>(Eric Berger)</em></li>\n<li><a href=\"https://www.cbc.ca/news/world/debris-space-shuttle-challenger-atlantic-1.6648027\">Debris from destroyed Space Shuttle Challenger found on ocean floor 36 years on</a> <em>(AP)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.economist.com/podcasts/2022/11/09/is-pay-transparency-good\">The Economist - Money Talks: Is pay transparency good?</a></li>\n<li><a href=\"https://freakonomics.com/podcast/in-the-1890s-the-best-selling-car-was-electric/\">Freakonomics #498: In the 1890s, the Best-Selling Car Was...Electric</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.musicradar.com/news/how-aphex-twin-made-saw-85-92\">How Aphex Twin made Selected Ambient Works 85-92</a> <em>(Dan Carr)</em></li>\n<li><a href=\"https://www.swyx.io/no-smarter\">The World Is Run By People No Smarter Than You</a> <em>(swyx)</em></li>\n<li><a href=\"https://www.theatlantic.com/ideas/archive/2022/11/veterans-day-us-military-iraq/672081/\">My Decision to Serve</a> <em>(David French)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>Margot and the Nuclear So &amp; So's - Broadripple is Burning</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/WXTVDUYIZs8\" title=\"Margot and the Nuclear So & So's - Broadripple is Burning\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n<hr />\n<p><em>Edited 11/11/22: Typo &amp; Removed Empty Gaming Section</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/11/08/adding-themes/",
      "url": "https://kpwags.com/posts/2022/11/08/adding-themes/",
      "title": "Adding Themes",
      "content_html": "\n\t\t<p>In case you haven't noticed, I decided to add some color and font themes to my blog.</p>\n<p>If you click the little gear icon in the header, a bar will drop down where you'll be given the choice to choose the accent color and the font to use. I decided to add this to be a little whimsical as well as to play around with my site because it's my site and I can.</p>\n<p>To accomplish this, I take advantage of CSS variables and local storage. By default when you first come to my site it sets the light/dark theme based on your system/browser light dark preference. I think it's important for the user to be able to decide whether they want light or dark outside just their system settings, so I also offer the ability to override it by saving the value in local storage to retrieve the next time they visit. Local storage will always override system settings. I did the same thing for colors and fonts except I default them to green and a sans-serif font.</p>\n<p>I have 2 helper functions to help me to do this.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> saveToLocalStorage <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>key<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span> value<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">typeof</span> window <span class=\"token operator\">!==</span> <span class=\"token string\">'undefined'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        window<span class=\"token punctuation\">.</span>localStorage<span class=\"token punctuation\">.</span><span class=\"token function\">setItem</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">,</span> value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> retrieveFromLocalStorage <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>key<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span> isJson <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token operator\">|</span><span class=\"token builtin\">unknown</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">typeof</span> window <span class=\"token operator\">!==</span> <span class=\"token string\">'undefined'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> value <span class=\"token operator\">=</span> window<span class=\"token punctuation\">.</span>localStorage<span class=\"token punctuation\">.</span><span class=\"token function\">getItem</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> isJson <span class=\"token operator\">?</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> value<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Since my blog runs on Next.js, server side rendering does not contain the <code>window</code> object so I have to first check to make sure the <code>window</code> object exists. Other than that, the functions are simply wrappers for the localStorage object. The only slight enhancement is the ability to tell the retriever to parse the return as JSON if the expected value is JSON.</p>\n<p>When you click one of the color or font buttons, the code will save the value chosen to local storage for retrieval the next time you visit the site.</p>\n<p>In terms of the CSS, I take advantage of CSS variables</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">:root</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">--primary-color-1</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>144<span class=\"token punctuation\">,</span> 100%<span class=\"token punctuation\">,</span> 15%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-2</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>142<span class=\"token punctuation\">,</span> 68%<span class=\"token punctuation\">,</span> 29%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-3</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>124<span class=\"token punctuation\">,</span> 95%<span class=\"token punctuation\">,</span> 32%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--sans-serif</span><span class=\"token punctuation\">:</span> WorkSans<span class=\"token punctuation\">,</span> Helvetica<span class=\"token punctuation\">,</span> Arial<span class=\"token punctuation\">,</span> sans-serif<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--serif</span><span class=\"token punctuation\">:</span> Petrona<span class=\"token punctuation\">,</span> Georgia<span class=\"token punctuation\">,</span> <span class=\"token string\">'Times New Roman'</span><span class=\"token punctuation\">,</span> serif<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--monospaced</span><span class=\"token punctuation\">:</span> SourceCodePro<span class=\"token punctuation\">,</span> <span class=\"token string\">'Courier New'</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--font</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--sans-serif<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This sets the 3 primary colors to the greens for the default view as well as the default font. To go along with saving to local storage, I also add a custom data attribute <code>data-color-theme</code> and <code>data-font-theme</code> to the <code>html</code> element on the page. That allows me to override the root CSS variables based on what the attributes are</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">[data-color-theme*='purple']</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">--primary-color-1</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>301<span class=\"token punctuation\">,</span> 91%<span class=\"token punctuation\">,</span> 40%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-2</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>301<span class=\"token punctuation\">,</span> 77%<span class=\"token punctuation\">,</span> 46%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-3</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>298<span class=\"token punctuation\">,</span> 100%<span class=\"token punctuation\">,</span> 36%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">[data-font-theme*='serif']</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">--font</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--serif<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The above CSS sets the primary colors to purple when the <code>data-color-theme</code> attribute is set to purple and sets the font to use the serif font if the <code>data-font-theme</code> attribute is set to serif.</p>\n<p>Now the one thing I ran into with the colors is contrast. Colors that contrast well on a light background don't always look good on a dark background. So I also take into account the color theme attribute as well.</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">[data-color-theme*='purple']</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">--primary-color-1</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>301<span class=\"token punctuation\">,</span> 91%<span class=\"token punctuation\">,</span> 40%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-2</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>301<span class=\"token punctuation\">,</span> 77%<span class=\"token punctuation\">,</span> 46%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-3</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>298<span class=\"token punctuation\">,</span> 100%<span class=\"token punctuation\">,</span> 36%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">[data-theme*='dark'][data-color-theme*='purple']</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">--primary-color-1</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>301<span class=\"token punctuation\">,</span> 99%<span class=\"token punctuation\">,</span> 65%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-2</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>301 72% 61%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--primary-color-3</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>298 100% 79%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The top block is exactly the same as the previous CSS block, but the bottom is different. The bottom will also look to see if the <code>data-theme</code> attribute is set to <code>dark</code>, then it should override the top block in favor of the colors that will contrast better on a black background. Accessibility is important!</p>\n<p>You can view the full CSS file <a href=\"https://github.com/kpwags/kpwags.com/blob/main/styles/kpwags.css\">here</a>.</p>\n<p>The final piece tying it all together is my <code>useTheme</code> hook.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">UseThemeReturn</span> <span class=\"token punctuation\">{</span>\n    theme<span class=\"token operator\">:</span> Theme<span class=\"token punctuation\">;</span>\n    color<span class=\"token operator\">:</span> ColorTheme<span class=\"token punctuation\">;</span>\n    font<span class=\"token operator\">:</span> FontTheme<span class=\"token punctuation\">;</span>\n    themeLoaded<span class=\"token operator\">:</span> <span class=\"token builtin\">boolean</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function-variable function\">getCurrentTheme</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> Theme<span class=\"token punctuation\">;</span>\n    <span class=\"token function-variable function\">getCurrentColor</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> ColorTheme<span class=\"token punctuation\">;</span>\n    <span class=\"token function-variable function\">getCurrentFont</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> FontTheme<span class=\"token punctuation\">;</span>\n    <span class=\"token function-variable function\">changeTheme</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>t<span class=\"token operator\">:</span> Theme<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function-variable function\">changeColor</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>c<span class=\"token operator\">:</span> ColorTheme<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function-variable function\">changeFont</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>f<span class=\"token operator\">:</span> FontTheme<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> useTheme <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> UseThemeReturn <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>theme<span class=\"token punctuation\">,</span> setTheme<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token generic-function\"><span class=\"token function\">useState</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span>Theme<span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">'light'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>color<span class=\"token punctuation\">,</span> setColor<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token generic-function\"><span class=\"token function\">useState</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span>ColorTheme<span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">'green'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>font<span class=\"token punctuation\">,</span> setFont<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token generic-function\"><span class=\"token function\">useState</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span>FontTheme<span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">'sans'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>themeLoaded<span class=\"token punctuation\">,</span> setThemeLoaded<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> getPreferredColorMode <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> Theme <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">typeof</span> window <span class=\"token operator\">!==</span> <span class=\"token string\">'undefined'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">const</span> prefferredMode <span class=\"token operator\">=</span> window<span class=\"token punctuation\">.</span><span class=\"token function\">matchMedia</span><span class=\"token punctuation\">(</span><span class=\"token string\">'(prefers-color-scheme: dark)'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>prefferredMode<span class=\"token punctuation\">.</span>matches<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">return</span> <span class=\"token string\">'dark'</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token string\">'light'</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">changeTheme</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>t<span class=\"token operator\">:</span> Theme<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">saveToLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'theme'</span><span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-theme'</span><span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">setTheme</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">changeColor</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>c<span class=\"token operator\">:</span> ColorTheme<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">saveToLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'color'</span><span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-color-theme'</span><span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">setColor</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">changeFont</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>f<span class=\"token operator\">:</span> FontTheme<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">saveToLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'font'</span><span class=\"token punctuation\">,</span> f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-font-theme'</span><span class=\"token punctuation\">,</span> f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">setFont</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> getCurrentTheme <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> Theme <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> localTheme <span class=\"token operator\">=</span> <span class=\"token function\">retrieveFromLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'theme'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> Theme<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>localTheme<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> localTheme<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token function\">getPreferredColorMode</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> getCurrentColor <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> ColorTheme <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> localStorageColor <span class=\"token operator\">=</span> <span class=\"token function\">retrieveFromLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'color'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> ColorTheme<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>localStorageColor<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> localStorageColor<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> color<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> getCurrentFont <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> FontTheme <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> localStorageFont <span class=\"token operator\">=</span> <span class=\"token function\">retrieveFromLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'font'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> FontTheme<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>localStorageFont<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> localStorageFont<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> font<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> localTheme <span class=\"token operator\">=</span> <span class=\"token function\">retrieveFromLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'theme'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> Theme<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">const</span> selectedColor <span class=\"token operator\">=</span> <span class=\"token function\">retrieveFromLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'color'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> ColorTheme<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">const</span> selectedFont <span class=\"token operator\">=</span> <span class=\"token function\">retrieveFromLocalStorage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'font'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> FontTheme<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>localTheme<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setTheme</span><span class=\"token punctuation\">(</span>localTheme<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-theme'</span><span class=\"token punctuation\">,</span> localTheme<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setTheme</span><span class=\"token punctuation\">(</span><span class=\"token function\">getPreferredColorMode</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-theme'</span><span class=\"token punctuation\">,</span> <span class=\"token function\">getPreferredColorMode</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>selectedColor<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setColor</span><span class=\"token punctuation\">(</span>selectedColor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-color-theme'</span><span class=\"token punctuation\">,</span> selectedColor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setColor</span><span class=\"token punctuation\">(</span><span class=\"token string\">'green'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-color-theme'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'green'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>selectedFont<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setFont</span><span class=\"token punctuation\">(</span>selectedFont<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-font-theme'</span><span class=\"token punctuation\">,</span> selectedFont<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setFont</span><span class=\"token punctuation\">(</span><span class=\"token string\">'sans'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>documentElement<span class=\"token punctuation\">.</span><span class=\"token function\">setAttribute</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data-font-theme'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'sans'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token function\">setThemeLoaded</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        theme<span class=\"token punctuation\">,</span>\n        color<span class=\"token punctuation\">,</span>\n        font<span class=\"token punctuation\">,</span>\n        themeLoaded<span class=\"token punctuation\">,</span>\n        getCurrentTheme<span class=\"token punctuation\">,</span>\n        getCurrentColor<span class=\"token punctuation\">,</span>\n        getCurrentFont<span class=\"token punctuation\">,</span>\n        changeTheme<span class=\"token punctuation\">,</span>\n        changeColor<span class=\"token punctuation\">,</span>\n        changeFont<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Don't let all the code scare you. This code is run when the site is loaded and will look at local storage for light and dark, color, and font and then apply the appropriate themes. You can view the full source code for the <code>useTheme</code> Hook <a href=\"https://github.com/kpwags/kpwags.com/blob/main/hooks/useTheme.ts\">here</a></p>\n<p>So that's basically how I went about adding themes. It wasn't super difficult and I'm happy with the results.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/11/06/october-check-in/",
      "url": "https://kpwags.com/posts/2022/11/06/october-check-in/",
      "title": "October Check-In",
      "content_html": "\n\t\t<p>The biggest thing to happen in the month of October was probably celebrating Lauren's and my 9 year anniversary. Other than that, it was mostly a quiet month.</p>\n<h2>The Gaslight Anthem</h2>\n<p>The month started out well, I ended up going down to Washington D.C. to see <em>The Gaslight Anthem</em> with my best friend who lives just outside of D.C. in Maryland. They had gone on an indefinite hiatus years ago so when they announced they were getting back together earlier in the year, recording new music and going on tour, I jumped at the opportunity. The show in D.C. was fantastic, and I ended up seeing them a second time two days later in Philly. If you haven't listened to them, I would highly recommend them. They put on amazing shows.</p>\n<h2>9 Year Anniversary</h2>\n<p>In the middle of the month Lauren and I celebrated our 9 year wedding anniversary. We've normally gone to Congress Hall in Cape May for it, but we decided to save some vacation time and some money and kept it low-key. I ended up cooking Filet Mignon and Scallops for dinner and we had a nice romantic evening in.</p>\n<p>The next day we ended up going out to a restaurant the next day to have a dinner pairing with a local distillery. We had some good gin and bourbon drinks paired with some delicious food. We both had pig's head for the first time. It was a little on the fatty side, but fantastic. Their homemade barbecue sauce went really well with it.</p>\n<p>We finished our anniversary celebration with a trip to the Lehigh Valley Phantoms home opener. We both love hockey and it was a fun evening. Starting with a trip to Fegley's Brewery for dinner and drinks, and then an evening cheering the Phantoms. They sadly lost in overtime, but it was a good night.</p>\n<h2>Phillies World Series Run</h2>\n<p>I've been a huge Phillies fan since I was a kid. Despite thinking they'd end up collapsing (again) in September, they managed to make their way into the playoffs. All October I've been following along as they swept the St. Louis Cardinals, knocked out the Atlanta Braves in 4 games in the NLDS, and then won the NL Pennant by beating the San Diego Padres in 5 in the NLCS. They're currently in the World Series constantly making me both anxious and excited at the same time. They ended up losing 4 games to 2, but the unexpected playoff run has been fun and hopefully they can build off the success next season.</p>\n<h2>Digital Family Cookbook</h2>\n<p>My initial version of the .NET version of my little side project is nearing completion. I was able to get a lot done with it over the course of October. I still have some little things to finish up, but I'm hoping I'll get around to them over the next several weeks. I'm gonna have to figure out where and how to host it though.</p>\n<h2>Twitter Drama</h2>\n<p>At the end of the month Elon Musk's purchase of Twitter was finalized and he is now in charge of the bird site. I've enjoyed Twitter, but for the forseeable future, I'm not going to be using it. I have re-discovered my <a href=\"https://mastodon.social/@kpwags\">Mastodon</a> account, so please follow me there...it's awesome.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> I ran a measly 3.78 miles in October...I should get back on the road more even without the marathon</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>No new PRs or even really close to a new PR in any of the major lifts, but I've gotten back into some consistency lifting.</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Continuing</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/the-data-detective-ten-easy-rules-to-make-sense-of-statistics/9780593084663\">The Data Detective: Ten Easy Rules to Make Sense of Statistics</a> by Tim Harford</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/chokepoint-capitalism-how-big-tech-and-big-content-captured-creative-labor-markets-and-how-we-ll-win-them-back/9780807007068\">Chokepoint Capitalism</a> by Rebecca Giblin &amp; Cory Doctorow</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Started back with my <a href=\"https://kpwags.com/posts/2022/10/14/reading-log-october-14-1\">weekly</a> <a href=\"https://kpwags.com/posts/2022/10/21/reading-log-october-21-2\">reading</a> <a href=\"https://kpwags.com/posts/2022/10/28/reading-log-october-28-3\">logs</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued to play <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">World of Warcraft</a></li>\n<li>Continuing <a href=\"https://www.ea.com/games/starwars/jedi/jedi-fallen-order\">Jedi: Fallen Order</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Finished watching <a href=\"https://www.imdb.com/title/tt0386676/\">The Office</a></li>\n<li>Finished the current season of <a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n<li>Continuing <a href=\"https://www.imdb.com/title/tt0472954/\">Yellowstone</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0118298/\">Daria</a></li>\n<li>Started <a href=\"https://www.imdb.com/title/tt0472954/\">It's Always Sunny in Philadelphia</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/4/",
      "url": "https://kpwags.com/reading-log/4/",
      "title": "Reading Log - November 4, 2022 (#4)",
      "content_html": "\n\t\t<p>Elon Musk's takeover of Twitter has made for an interesting news week.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://devblogs.microsoft.com/typescript/ten-years-of-typescript/\">Ten Years of TypeScript</a></h2>\n\t<div class=\"in-depth-meta\">Daniel Rosenwasser</div>\n\t<div class=\"in-depth-text\">\n<p>I was late to the TypeScript train, but now that I’ve been using it both at work and on my side projects, I miss it when I don’t have it.</p>\n<blockquote><p>TypeScript had to be free and open source, and done in a truly out-in-the-open manner. It also had to interoperate seamlessly with existing JavaScript, co-evolve with JavaScript, and <em>feel</em> like JavaScript.</p></blockquote>\n<p>Given my experience working with TypeScript, I’d say they’ve done a good job allowing developers to integrate TypeScript into the development process with minimal impact.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.marketplace.org/shows/how-we-survive/\">How We Survive</a></h2>\n\t<div class=\"in-depth-meta\">Amy Scott</div>\n\t<div class=\"in-depth-text\">\n<p>This podcast has been doing a great job talking about the struggles Miami is having to deal with given the changing climate. I’d highly recommend a listen as climate change is a real threat and is something that will extend well beyond just Miami.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Development and Design</h2>\n<ul>\n<li><a href=\"https://css-tricks.com/is-there-too-much-css-now\">Is There Too Much CSS Now?</a> <em>(Sacha Greif)</em></li>\n<li><a href=\"https://simonwillison.net/2022/Oct/29/the-perfect-commit/\">The Perfect Commit</a> <em>(Simon Willison)</em></li>\n<li><a href=\"https://stackoverflow.blog/2022/07/04/how-stack-overflow-is-leveling-up-its-unit-testing-game/\">How Stack Overflow is leveling up its unit testing game</a> <em>(Wouter de Kort)</em></li>\n<li><a href=\"https://bradfrost.com/blog/post/the-many-faces-of-themeable-design-systems/\">The many faces of themeable design systems</a> <em>(Brad Frost)</em></li>\n<li><a href=\"https://wapplegate.com/asynchronous-programming/\">Asynchronous Programming in .NET - Introduction, Misconceptions, and Problems</a> <em>(William Applegate)</em></li>\n<li><a href=\"https://www.abeautifulsite.net/posts/a-web-component-story/\">A Web Component Story</a> <em>(Cory LaViska)</em></li>\n<li><a href=\"https://benfrain.com/a-css-class-naming-convention-might-still-be-your-best-choice/\">A CSS class-naming convention might still be your best choice</a> <em>(Ben Frain)</em></li>\n<li><a href=\"https://www.smashingmagazine.com/2022/07/look-remix-differences-next/\">A Look At Remix And The Differences With Next.js</a> <em>(Facundo Giuliani)</em></li>\n<li><a href=\"https://www.robinwieruch.de/typescript-type-guard/\">TypeScript: Type Guards</a> <em>(Robin Wieruch)</em></li>\n<li><a href=\"https://khalidabuhakmeh.com/more-efficient-deletes-with-entity-framework-core\">More Efficient Deletes With Entity Framework Core</a> <em>(Khalid Abuhakmeh)</em></li>\n<li><a href=\"https://dateo-software.de/blog/improve-your-asp-net-core-controllers\">Learn how to improve your ASP.NET Core controllers with these principles</a> <em>(Dennis Frühauff)</em></li>\n<li><a href=\"https://css-tricks.com/the-new-css-media-query-range-syntax/\">The New CSS Media Query Range Syntax</a> <em>(Preethi Selvam)</em></li>\n</ul>\n<hr />\n<h2>Technology and the Internet</h2>\n<ul>\n<li><a href=\"https://www.techdirt.com/2022/10/25/if-github-copilot-is-a-copyright-problem-perhaps-the-problem-is-copyright\">If GitHub Copilot Is A Copyright Problem, Perhaps The Problem Is Copyright</a> <em>(Michael Weinberg)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/10/28/elon-musks-first-move-is-to-fire-the-person-most-responsible-for-twitters-strong-free-speech-stance/\">Elon Musk's First Move Is To Fire The Person Most Responsible For Twitter's Strong Free Speech Stance</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/10/28/yes-chances-are-elon-musk-will-make-twitter-way-worse-but-he-could-make-it-better/\">Yes, Chances Are Elon Musk Will Make Twitter Way Worse, But He Could Make It Better</a> <em>(Mike Masnick)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/11/02/hey-elon-let-me-help-you-speed-run-the-content-moderation-learning-curve/\">Hey Elon: Let Me Help You Speed Run The Content Moderation Learning Curve </a> <em>(Mike Masnick)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/23433295/call-of-duty-playstation-phil-spencer-xbox-interview\">Call of Duty for PlayStation isn't going anywhere, Phil Spencer says</a> <em>(Ana Diaz)</em></li>\n</ul>\n<hr />\n<h2>Business and Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/finance-and-economics/2022/10/26/can-gary-gensler-solve-every-problem-in-american-finance\">Can Gary Gensler solve every problem in American finance?</a> <em>(💰 The Economist)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://theathletic.com/3744061/2022/10/31/mlb-abs-pitch-challenge-system/\">'My eye over yours': Ball-and-strike challenges, possibly coming to an MLB game near you</a> <em>(💰 Zach Buchanan)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.nytimes.com/interactive/2022/podcasts/trojan-horse-affair.html\">The Trojan Horse Affair</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/grid-locked/\">99% Invisible #483: Grid Locked</a></li>\n<li><a href=\"https://www.bazaaraudio.com/the-new-bazaar/moneys-strange-past-and-unsettled-future\">The New Bazaar: Money's strange past and unsettled future</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://nolanlawson.com/2022/02/02/five-years-of-quitting-twitter/\">Five years of quitting Twitter</a> <em>(Nolan Lawson)</em></li>\n<li><a href=\"https://2ality.com/2022/10/mastodon-getting-started.html\">Getting started with Mastodon</a> <em>(Axel Rauschmayer)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - Have Mercy</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/monCFQJNBWI\" title=\"The Gaslight Anthem - Have Mercy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/11/03/building-a-social-image-generator-console-application/",
      "url": "https://kpwags.com/posts/2022/11/03/building-a-social-image-generator-console-application/",
      "title": "Building a Social Image Generator Console Application",
      "content_html": "\n\t\t<p>For a while now I've been adding an image for when my posts get shared on Twitter and the like. It's been a manual process where I open up Photoshop and manually update the text. I wanted to change that to make it faster for me to create, so I wrote up a quick .NET console app to go about doing that and will share with you how to build your own.</p>\n<p>The first thing I had to do was build the template. I used Photoshop to build it, but you can use whatever graphics tool you would like such as <a href=\"https://www.gimp.org/\">Gimp</a> or <a href=\"https://www.getpaint.net/\">Paint.net</a>.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/wFuHk5_KNc-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/wFuHk5_KNc-1200.gif 1200w\" /><img alt=\"The template image I'm using for my social media image\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/wFuHk5_KNc-1200.jpeg\" width=\"1200\" height=\"675\" /></picture></p>\n<p>The console application is reliant upon the <a href=\"https://sixlabors.com/\">SixLabors Image and Font Libraries</a> as I wanted this to work on both Windows &amp; MacOS. Unforunately Microsoft's <code>System.Drawing.Common</code> library is dependent upon Windows libraries so MacOS would be a no-go.</p>\n<h2>Setup your project</h2>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$<span class=\"token operator\">></span> dotnet new console <span class=\"token parameter variable\">--name</span> SocialImageGenerator\n$<span class=\"token operator\">></span> <span class=\"token builtin class-name\">cd</span> SocialImageGenerator</code></pre>\n<h2>Install the dependencies</h2>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$<span class=\"token operator\">></span> dotnet <span class=\"token function\">add</span> package SixLabors.Fonts\n$<span class=\"token operator\">></span> dotnet <span class=\"token function\">add</span> package SixLabors.ImageSharp\n$<span class=\"token operator\">></span> dotnet <span class=\"token function\">add</span> package SixLabors.ImageSharp.Drawing</code></pre>\n<p>I still prefer the old program style so I reset the <code>Program.cs</code> file to use the .NET 5 template and added all the usings. I replaced the generated code with the following.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>Fonts</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp<span class=\"token punctuation\">.</span>Processing</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp<span class=\"token punctuation\">.</span>Drawing<span class=\"token punctuation\">.</span>Processing</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp<span class=\"token punctuation\">.</span>Formats<span class=\"token punctuation\">.</span>Jpeg</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SocialImageGenerator<span class=\"token punctuation\">.</span>Models</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>IO</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>Runtime<span class=\"token punctuation\">.</span>InteropServices</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>Threading<span class=\"token punctuation\">.</span>Tasks</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">SocialImageGenerator</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">internal</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Program</span>\n<span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></code></pre>\n<h3>Get the data for image generation</h3>\n<p>In order for the image to be generated I need 3 pieces of information.</p>\n<ul>\n<li>The date posted</li>\n<li>The title of the post</li>\n<li>The URL slug of the post</li>\n</ul>\n<p>I might eventually see if I can automatically generate some of them, but for the moment, the app will prompt me to enter the data into the console. If you feel you need less, by all means, trim the inputs down.</p>\n<p>The code to do this is pretty simple. I prompt the user to enter the data, and use the <code>Console.ReadLine()</code> function to assign the entered value to a variable. The only slight complication is to handle the date. To save some time, I added the ability to &quot;skip&quot; the date entry and default it to the current date. The <code>GetPostDate</code> function will then try to parse the entry and assign it to the current date if it fails for whatever reason.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">DateTime</span> <span class=\"token function\">GetPostDate</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span></span> enteredDate<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">DateTime</span> postDate<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>DateTime<span class=\"token punctuation\">.</span><span class=\"token function\">TryParse</span><span class=\"token punctuation\">(</span>enteredDate<span class=\"token punctuation\">,</span> <span class=\"token keyword\">out</span> postDate<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        postDate <span class=\"token operator\">=</span> DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> postDate<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">PostData</span> <span class=\"token function\">GetPostData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"Enter the post's date (defaults to </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yyyy-MM-dd\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">): \"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> date <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> postDate <span class=\"token operator\">=</span> <span class=\"token function\">GetPostDate</span><span class=\"token punctuation\">(</span>date <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"Enter the post's Title: \"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> postTitle <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"Enter the post's slug: \"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> postSlug <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">PostData</span>\n    <span class=\"token punctuation\">{</span>\n        Title <span class=\"token operator\">=</span> postTitle <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n        Slug <span class=\"token operator\">=</span> postSlug <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n        PostDate <span class=\"token operator\">=</span> postDate<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>You'll notice that I created a <code>PostData</code> class to store the data. I take advantage of properties to make things simpler for me. You'll see where Url and Directory get used later.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">System</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">SocialImageGenerator<span class=\"token punctuation\">.</span>Models</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">PostData</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Title <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Slug <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\">DateTime</span> PostDate <span class=\"token punctuation\">{</span> <span class=\"token keyword\">get</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">set</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Url <span class=\"token operator\">=></span> <span class=\"token interpolation-string\"><span class=\"token string\">$\"kpwags.com/posts/</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">PostDate<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yyyy\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">PostDate<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"MM\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">PostDate<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dd\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">Slug</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">\"</span></span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> Directory <span class=\"token operator\">=></span> <span class=\"token interpolation-string\"><span class=\"token string\">$\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">PostDate<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yyyy\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">-</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">PostDate<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"MM\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">-</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">PostDate<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dd\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">-</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">Slug</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">\"</span></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>So now let's have the main program actually prompt the user for the data. In <code>Program.cs</code>, let's add this to the <code>Main</code> function.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">internal</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Program</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">static</span> <span class=\"token class-name\">PostData<span class=\"token punctuation\">?</span></span> data<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> args<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        data <span class=\"token operator\">=</span> <span class=\"token function\">GetPostData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            Console<span class=\"token punctuation\">.</span><span class=\"token function\">WriteLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to generate post data\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>I create a global variable <code>data</code> to hold the post data and then assign it the value the <code>GetPostData()</code> function returns. If for whatever reason it fails, it should still be <code>null</code> so I error out and exit.</p>\n<h2>Writing the text on the image</h2>\n<p>The next step is to actually go about adding the text to the image. To keep <code>Main</code> clean, I'm going to create a function called <code>BuildImage</code> to do the image and text manipulation.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">BuildImage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></code></pre>\n<p>The first thing we're going to want to do is load the template image. To do that, we'll use SixLabor Image library to do that. My template image is called <code>Template.jpg</code> and it is in the project's root directory.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> image <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span><span class=\"token function\">Load</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Template.jpg\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This will load the image into memory so that we can overlay the text on it.</p>\n<p>The next step is to load our fonts. I use the <a href=\"https://fonts.google.com/specimen/Work+Sans\">Work Sans font</a> and have the variable font file <code>worksans.ttf</code> stored in my root directory as well.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> fontCollection <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">FontCollection</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nfontCollection<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"worksans.ttf\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>fontCollection<span class=\"token punctuation\">.</span><span class=\"token function\">TryGet</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Work Sans\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">out</span> <span class=\"token class-name\">FontFamily</span> family<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This code looks to grab the font file and create the font family object the image library can use to write to the image.</p>\n<p>The next step is to write the title of the post to the image.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> font <span class=\"token operator\">=</span> family<span class=\"token punctuation\">.</span><span class=\"token function\">CreateFont</span><span class=\"token punctuation\">(</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span> FontStyle<span class=\"token punctuation\">.</span>Bold<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> options <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">TextOptions</span><span class=\"token punctuation\">(</span>font<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    Origin <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">PointF</span><span class=\"token punctuation\">(</span><span class=\"token number\">40</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    WrappingLength <span class=\"token operator\">=</span> <span class=\"token number\">600</span><span class=\"token punctuation\">,</span>\n    HorizontalAlignment <span class=\"token operator\">=</span> HorizontalAlignment<span class=\"token punctuation\">.</span>Left<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> rect <span class=\"token operator\">=</span> TextMeasurer<span class=\"token punctuation\">.</span><span class=\"token function\">Measure</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">.</span>Title<span class=\"token punctuation\">,</span> options<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nimage<span class=\"token punctuation\">.</span><span class=\"token function\">Mutate</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">=></span> x<span class=\"token punctuation\">.</span><span class=\"token function\">DrawText</span><span class=\"token punctuation\">(</span>options<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">.</span>Title<span class=\"token punctuation\">,</span> Color<span class=\"token punctuation\">.</span>White<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The first step is to create the font I want to use. In this case I want to use the Work Sans font I defined above with the size 60pt and bolded.</p>\n<p>The second step here is to define the font styling. The origin is the <code>(x, y)</code> coordinate of the template image you want to start drawing to. For me, I had to open up Photoshop to determine this point. The wrapping length is the number of pixels you want the text to go before it wraps to the next line. In my case, I want it to span 600 pixels before wrapping. The horizontal alignment should be pretty self-explanitory. I want the text to align to the left.</p>\n<p>The next step is where I draw the rectangle where the text is written. It takes two arguments. The first is the text I'm writing, in this case the title of the post. The second argument is the options for the font. This way it can calculate what size the rectangle is that is holding the title of the post on the image. You'll see where I use this later.</p>\n<p>The final step here is to apply the mutation to the image. In this case, I'm telling ImageSharp to draw the title of the post on the image with the text options I defined in the color white.</p>\n<p>For my social image, I also want the URL of the post displayed in the image, so I repeat this for the URL.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token class-name\"><span class=\"token keyword\">var</span></span> urlFont <span class=\"token operator\">=</span> family<span class=\"token punctuation\">.</span><span class=\"token function\">CreateFont</span><span class=\"token punctuation\">(</span><span class=\"token number\">24</span><span class=\"token punctuation\">,</span> FontStyle<span class=\"token punctuation\">.</span>Regular<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> urlOptions <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">TextOptions</span><span class=\"token punctuation\">(</span>urlFont<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    Origin <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">PointF</span><span class=\"token punctuation\">(</span><span class=\"token number\">40</span><span class=\"token punctuation\">,</span> <span class=\"token number\">80</span> <span class=\"token operator\">+</span> rect<span class=\"token punctuation\">.</span>Height<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    WrappingLength <span class=\"token operator\">=</span> <span class=\"token number\">600</span><span class=\"token punctuation\">,</span>\n    HorizontalAlignment <span class=\"token operator\">=</span> HorizontalAlignment<span class=\"token punctuation\">.</span>Left<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\nimage<span class=\"token punctuation\">.</span><span class=\"token function\">Mutate</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">=></span> x<span class=\"token punctuation\">.</span><span class=\"token function\">DrawText</span><span class=\"token punctuation\">(</span>urlOptions<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">.</span>Url<span class=\"token punctuation\">,</span> Color<span class=\"token punctuation\">.</span>White<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Again, I create the font, this time with size 24pt and not bolded.</p>\n<p>I also create the Text options, only this time I specify the Y coordinate as the <code>height of the title box</code> + <code>80</code> to give it some padding. This is why I created the <code>rect</code> object above. I'm not always going to be sure how much space the title is going to take up as my blog post titles vary. The <code>rect</code> object will tell me how much height the title will take up, then I add an additional 80 pixels to give it some space.</p>\n<p>This is the final piece of text I'm writing, so I don't need to bother creating another rectangle. The final part is writing this bit to the image.</p>\n<p>You'll also notice here is where I use the <code>Url</code> property of the <code>PostData</code> class.</p>\n<h2>Saving the image to disk</h2>\n<p>The final step of the process is to save the image to disk so it can be used.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> ms <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">MemoryStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">await</span> image<span class=\"token punctuation\">.</span><span class=\"token function\">SaveAsync</span><span class=\"token punctuation\">(</span>ms<span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">JpegEncoder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\"><span class=\"token keyword\">var</span></span> imageData <span class=\"token operator\">=</span> ms<span class=\"token punctuation\">.</span><span class=\"token function\">ToArray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">await</span> image<span class=\"token punctuation\">.</span><span class=\"token function\">SaveAsJpegAsync</span><span class=\"token punctuation\">(</span><span class=\"token function\">BuildFilePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>I create a <code>MemoryStream</code>, and then save the image with the 2 mutations to the <code>MemoryStream</code> using the JPEG encoder. The next step is to then save it to disk using the <code>image.SaveAsJpegAsync()</code> function. To save myself so time, I created a function called <code>BuildFilePath()</code> that creates the directory and returns the path.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">static</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> <span class=\"token function\">BuildFilePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Post Data is null\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> rootDirectory <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>RuntimeInformation<span class=\"token punctuation\">.</span><span class=\"token function\">IsOSPlatform</span><span class=\"token punctuation\">(</span>OSPlatform<span class=\"token punctuation\">.</span>OSX<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        rootDirectory <span class=\"token operator\">=</span> <span class=\"token string\">\"/Users/keith/Developer/kpwags.com/public/images/posts\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>RuntimeInformation<span class=\"token punctuation\">.</span><span class=\"token function\">IsOSPlatform</span><span class=\"token punctuation\">(</span>OSPlatform<span class=\"token punctuation\">.</span>Windows<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        rootDirectory <span class=\"token operator\">=</span> <span class=\"token string\">@\"C:\\Users\\keith\\Developer\\kpwags.com\\public\\images\\posts\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Invalid Operating System\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> directory <span class=\"token operator\">=</span> Path<span class=\"token punctuation\">.</span><span class=\"token function\">Join</span><span class=\"token punctuation\">(</span>rootDirectory<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">.</span>Directory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>Directory<span class=\"token punctuation\">.</span><span class=\"token function\">Exists</span><span class=\"token punctuation\">(</span>directory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        Directory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDirectory</span><span class=\"token punctuation\">(</span>directory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> Path<span class=\"token punctuation\">.</span><span class=\"token function\">Join</span><span class=\"token punctuation\">(</span>directory<span class=\"token punctuation\">,</span> <span class=\"token string\">\"social-image.jpg\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>This has a little bit of hard-coding as it's specific to my enviroments and it might be useful to put some of this in an <code>appsettings.json</code> file, but for now, It's just spelled out.</p>\n<p>Since I will sometimes be on Windows when I work, I wanted to make sure this works on either. I use the <code>System.Runtime.InteropServices</code> library to check the operating system I'm using and assign the root directory based on that. I want this to go to where my blog is hosted so there's no additional steps I need to take to publish. This is the hardcoding that could be moved to a config file.</p>\n<p>Now that the directory is defined, I check to see if it exists, and if it doesn't, I create it. Then I return it with the image filename <code>social-image.jpg</code> appended to it.</p>\n<p>Note that this is where I use the <code>Directory</code> property on the <code>PostData</code> object.</p>\n<p>All that's left to do is have the <code>Main</code> function calll the <code>BuildImage()</code> function.</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">internal</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Program</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">static</span> <span class=\"token class-name\">PostData<span class=\"token punctuation\">?</span></span> data<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> args<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        data <span class=\"token operator\">=</span> <span class=\"token function\">GetPostData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            Console<span class=\"token punctuation\">.</span><span class=\"token function\">WriteLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to generate post data\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">await</span> <span class=\"token function\">BuildImage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>After this, it's all done. The image is saved and the app exits. The final product of this little app is:</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/BsWGIgZddh-1200.webp 1200w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/BsWGIgZddh-1200.gif 1200w\" /><img alt=\"The example output of my social image\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/BsWGIgZddh-1200.jpeg\" width=\"1200\" height=\"675\" /></picture></p>\n<p>Here is the final <code>Program.cs</code> file</p>\n<pre class=\"language-csharp\" tabindex=\"0\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>Fonts</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp<span class=\"token punctuation\">.</span>Processing</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp<span class=\"token punctuation\">.</span>Drawing<span class=\"token punctuation\">.</span>Processing</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SixLabors<span class=\"token punctuation\">.</span>ImageSharp<span class=\"token punctuation\">.</span>Formats<span class=\"token punctuation\">.</span>Jpeg</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">SocialImageGenerator<span class=\"token punctuation\">.</span>Models</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>IO</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>Runtime<span class=\"token punctuation\">.</span>InteropServices</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">System<span class=\"token punctuation\">.</span>Threading<span class=\"token punctuation\">.</span>Tasks</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">SocialImageGenerator</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">internal</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Program</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">static</span> <span class=\"token class-name\">PostData<span class=\"token punctuation\">?</span></span> data<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">Main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> args<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        data <span class=\"token operator\">=</span> <span class=\"token function\">GetPostData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            Console<span class=\"token punctuation\">.</span><span class=\"token function\">WriteLine</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unable to generate post data\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">await</span> <span class=\"token function\">BuildImage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">DateTime</span> <span class=\"token function\">GetPostDate</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span></span> enteredDate<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">DateTime</span> postDate<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>DateTime<span class=\"token punctuation\">.</span><span class=\"token function\">TryParse</span><span class=\"token punctuation\">(</span>enteredDate<span class=\"token punctuation\">,</span> <span class=\"token keyword\">out</span> postDate<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            postDate <span class=\"token operator\">=</span> DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> postDate<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">PostData</span> <span class=\"token function\">GetPostData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"Enter the post's date (defaults to </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span><span class=\"token expression language-csharp\">DateTime<span class=\"token punctuation\">.</span>Now<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yyyy-MM-dd\"</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">}</span></span><span class=\"token string\">): \"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> date <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> postDate <span class=\"token operator\">=</span> <span class=\"token function\">GetPostDate</span><span class=\"token punctuation\">(</span>date <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"Enter the post's Title: \"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> postTitle <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        Console<span class=\"token punctuation\">.</span><span class=\"token function\">Write</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">$\"Enter the post's slug: \"</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> postSlug <span class=\"token operator\">=</span> Console<span class=\"token punctuation\">.</span><span class=\"token function\">ReadLine</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">PostData</span>\n        <span class=\"token punctuation\">{</span>\n            Title <span class=\"token operator\">=</span> postTitle <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n            Slug <span class=\"token operator\">=</span> postSlug <span class=\"token operator\">??</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n            PostDate <span class=\"token operator\">=</span> postDate<span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">async</span> <span class=\"token return-type class-name\">Task</span> <span class=\"token function\">BuildImage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Post Data is null\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">using</span> <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> image <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span><span class=\"token function\">Load</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Template.jpg\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> fontCollection <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">FontCollection</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        fontCollection<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"worksans.ttf\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>fontCollection<span class=\"token punctuation\">.</span><span class=\"token function\">TryGet</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Work Sans\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">out</span> <span class=\"token class-name\">FontFamily</span> family<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> font <span class=\"token operator\">=</span> family<span class=\"token punctuation\">.</span><span class=\"token function\">CreateFont</span><span class=\"token punctuation\">(</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span> FontStyle<span class=\"token punctuation\">.</span>Bold<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> options <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">TextOptions</span><span class=\"token punctuation\">(</span>font<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">{</span>\n                Origin <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">PointF</span><span class=\"token punctuation\">(</span><span class=\"token number\">40</span><span class=\"token punctuation\">,</span> <span class=\"token number\">60</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                WrappingLength <span class=\"token operator\">=</span> <span class=\"token number\">600</span><span class=\"token punctuation\">,</span>\n                HorizontalAlignment <span class=\"token operator\">=</span> HorizontalAlignment<span class=\"token punctuation\">.</span>Left<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> rect <span class=\"token operator\">=</span> TextMeasurer<span class=\"token punctuation\">.</span><span class=\"token function\">Measure</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">.</span>Title<span class=\"token punctuation\">,</span> options<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            image<span class=\"token punctuation\">.</span><span class=\"token function\">Mutate</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">=></span> x<span class=\"token punctuation\">.</span><span class=\"token function\">DrawText</span><span class=\"token punctuation\">(</span>options<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">.</span>Title<span class=\"token punctuation\">,</span> Color<span class=\"token punctuation\">.</span>White<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> urlFont <span class=\"token operator\">=</span> family<span class=\"token punctuation\">.</span><span class=\"token function\">CreateFont</span><span class=\"token punctuation\">(</span><span class=\"token number\">24</span><span class=\"token punctuation\">,</span> FontStyle<span class=\"token punctuation\">.</span>Regular<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> urlOptions <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">TextOptions</span><span class=\"token punctuation\">(</span>urlFont<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">{</span>\n                Origin <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">PointF</span><span class=\"token punctuation\">(</span><span class=\"token number\">40</span><span class=\"token punctuation\">,</span> <span class=\"token number\">80</span> <span class=\"token operator\">+</span> rect<span class=\"token punctuation\">.</span>Height<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                WrappingLength <span class=\"token operator\">=</span> <span class=\"token number\">600</span><span class=\"token punctuation\">,</span>\n                HorizontalAlignment <span class=\"token operator\">=</span> HorizontalAlignment<span class=\"token punctuation\">.</span>Left<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n            image<span class=\"token punctuation\">.</span><span class=\"token function\">Mutate</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">=></span> x<span class=\"token punctuation\">.</span><span class=\"token function\">DrawText</span><span class=\"token punctuation\">(</span>urlOptions<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">.</span>Url<span class=\"token punctuation\">,</span> Color<span class=\"token punctuation\">.</span>White<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">using</span> <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> ms <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">MemoryStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">await</span> image<span class=\"token punctuation\">.</span><span class=\"token function\">SaveAsync</span><span class=\"token punctuation\">(</span>ms<span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">JpegEncoder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> imageData <span class=\"token operator\">=</span> ms<span class=\"token punctuation\">.</span><span class=\"token function\">ToArray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">await</span> image<span class=\"token punctuation\">.</span><span class=\"token function\">SaveAsJpegAsync</span><span class=\"token punctuation\">(</span><span class=\"token function\">BuildFilePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">string</span></span> <span class=\"token function\">BuildFilePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>data <span class=\"token keyword\">is</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Post Data is null\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">string</span></span> rootDirectory <span class=\"token operator\">=</span> <span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span>Empty<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>RuntimeInformation<span class=\"token punctuation\">.</span><span class=\"token function\">IsOSPlatform</span><span class=\"token punctuation\">(</span>OSPlatform<span class=\"token punctuation\">.</span>OSX<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            rootDirectory <span class=\"token operator\">=</span> <span class=\"token string\">\"/Users/keith/Developer/kpwags.com/public/images/posts\"</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>RuntimeInformation<span class=\"token punctuation\">.</span><span class=\"token function\">IsOSPlatform</span><span class=\"token punctuation\">(</span>OSPlatform<span class=\"token punctuation\">.</span>Windows<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            rootDirectory <span class=\"token operator\">=</span> <span class=\"token string\">@\"C:\\Users\\keith\\Developer\\kpwags.com\\public\\images\\posts\"</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">else</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Exception</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Invalid Operating System\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> directory <span class=\"token operator\">=</span> Path<span class=\"token punctuation\">.</span><span class=\"token function\">Join</span><span class=\"token punctuation\">(</span>rootDirectory<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">.</span>Directory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>Directory<span class=\"token punctuation\">.</span><span class=\"token function\">Exists</span><span class=\"token punctuation\">(</span>directory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            Directory<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDirectory</span><span class=\"token punctuation\">(</span>directory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> Path<span class=\"token punctuation\">.</span><span class=\"token function\">Join</span><span class=\"token punctuation\">(</span>directory<span class=\"token punctuation\">,</span> <span class=\"token string\">\"social-image.jpg\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>My template works well for me, but hopefully you can use this to build your own.</p>\n<p>You can view the <a href=\"https://github.com/kpwags/social-image-generator\">full source code on my GitHub Repository</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-11-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/3/",
      "url": "https://kpwags.com/reading-log/3/",
      "title": "Reading Log - October 28, 2022 (#3)",
      "content_html": "\n\t\t<p>Too much Musk this week.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.theverge.com/2022/10/28/23428132/elon-musk-twitter-acquisition-problems-speech-moderation\">Welcome to Hell, Elon</a></h2>\n\t<div class=\"in-depth-meta\">Nilay Patel</div>\n\t<div class=\"in-depth-text\">\n<p>Twitter is now in Elon Musk’s hands and I suspect he’s in well over his head. I myself am probably leaving Twitter and am already more active on <a href=\"https://mastodon.social/@kpwags\">Mastodon</a>. Free speech is what makes this country great but time and time again this has proven to turn online platforms into cesspools. Assuming Musk treats Twitter the same way as Gab, Parler and the like, I would imagine that Twitter would probably head down that route too, though probably to a lesser extent.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://nextjs.org/blog/next-13\">Next.js 13</a></h2>\n\t<div class=\"in-depth-meta\">Vercel</div>\n\t<div class=\"in-depth-text\">\n<p>My blog runs on Next.js and I’m curious as to the new improvements, especially with regards to <a href=\"https://nextjs.org/blog/next-13#introducing-turbopack-alpha\">Turbopack</a></p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development</h2>\n<ul>\n<li><a href=\"https://www.stefanjudis.com/snippets/a-centered-css-grid-with-full-width-components/\">A centered CSS grid with full-width components</a> <em>(Stefan Judis)</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/bc82fda9-eb47-47bd-850b-9d115a59a571\">Throwing exceptions - Why is my stack trace lost?</a> <em>(Steven Giesel)</em></li>\n<li><a href=\"https://bradfrost.com/blog/post/lets-talk-about-web-components/\">Let's talk about web components</a> <em>(Brad Frost)</em></li>\n<li><a href=\"https://dev.to/elliot_brenyasarfo_18749/its-ok-to-write-garbage-code-once-in-a-while-3bjp\">It's OK to write garbage code once in a while.</a> <em>(Elliot Brenya sarfo)</em></li>\n<li><a href=\"https://cloudfour.com/thinks/highly-customizable-background-gradients/\">Highly Customizable Background Gradients</a> <em>(Scott Vandehey)</em></li>\n<li><a href=\"https://enterprisecraftsmanship.com/posts/generic-types-arguments-specific-types-return-values/\">Generic types are for arguments, specific types are for return values</a> <em>(Vladimir Khorikov)</em></li>\n<li><a href=\"https://blog.ndepend.com/c-11-file-scoped-types/\">C# 11 File Scoped Types</a> <em>(Patrick Smacchia)</em></li>\n<li><a href=\"https://dev.to/integerman/differences-between-net-collection-interfaces-g3i\">Differences between .NET Collection Interfaces</a> <em>(Matt Eland)</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/gadgets/2022/10/lego-to-discontinue-mindstorms-robot-line-after-a-24-year-run/\">Lego to discontinue Mindstorms robot line after a 24-year run</a> <em>(Benj Edwards)</em></li>\n<li><a href=\"https://arstechnica.com/gadgets/2022/10/linux-kernel-needs-your-help-testing-backlight-drivers-on-old-weird-laptops/\">&quot;Old/weird laptops&quot; sought to help test Linux kernel backlight drivers</a> <em>(Kevin Purdy)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.polygon.com/23423466/age-of-empires-definitive-edition-xbox-console-release-date\">Age of Empires is coming for your Xbox</a> <em>(Ana Diaz)</em></li>\n<li><a href=\"https://www.polygon.com/23423009/call-of-duty-modern-warfare-2-de-escalation-trailer-park-press-f\">Modern Warfare 2 teaches players the worst way to ‘de-escalate’ a risky situation</a> <em>(Owen S. Good)</em></li>\n</ul>\n<hr />\n<h2>Business and Finance</h2>\n<ul>\n<li><a href=\"https://www.economist.com/business/2022/10/24/the-end-of-apples-affair-with-china\">The end of Apple's affair with China</a> <em>(💰 The Economist)</em></li>\n<li><a href=\"https://arstechnica.com/tech-policy/2022/10/elon-musk-completes-twitter-purchase-immediately-fires-ceo-and-other-execs/\">Elon Musk completes Twitter purchase, immediately fires CEO and other execs</a> <em>(Jon Brodkin)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://arstechnica.com/science/2022/10/top-covid-symptoms-shift-from-fever-cough-to-sore-throat-stuffy-nose/\">With shots and infections, the most common COVID symptoms have shifted</a> <em>(Beth Mole)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://blogs.fangraphs.com/bryce-harpers-game-5-home-run-was-a-master-class-in-hitting/\">Bryce Harper's Game 5 Home Run Was a Master Class in Hitting</a> <em>(Esteban Rivera)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.npr.org/2022/10/20/1130379581/the-uks-productivity-problem\">The Indicator: The UK's productivity problem</a></li>\n<li><a href=\"https://radiolab.org/episodes/helen-keller-exorcism\">Radiolab: The Helen Keller Exorcism</a></li>\n<li><a href=\"https://changelog.com/jsparty/216\">JS Party #216: Enabling performance-centric engineering orgs</a></li>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/cryptocurrency-has-a-trust-problem/\">Marketplace Tech: Cryptocurrency has a trust problem</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.gq.com/story/wrexham-fc-ryan-reynolds-rob-mcelhenney\">Inside Ryan Reynolds and Rob McElhenney’s Great Wrexham Gambit</a> <em>(Tom Lamont)</em></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Scandals - Lucky Sevens</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/6eBfX_a9_o4\" title=\"The Scandals - Lucky Sevens\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-10-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/2/",
      "url": "https://kpwags.com/reading-log/2/",
      "title": "Reading Log - October 21, 2022 (#2)",
      "content_html": "\n\t\t<p>After stuffing Pocket with a bunch of articles, I've finally gotten around to going through them.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://blog.jim-nielsen.com/2022/website-fidelity/\">Website Fidelity</a></h2>\n\t<div class=\"in-depth-meta\">Jim Nielsen</div>\n\t<div class=\"in-depth-text\">\n<p>I’ve tossed around the idea of figuring out a good way to deliver my blog in different modes as I have appreciated NPR and CNN’s very basic sites. It’s an interesting idea and challenge to provide better experiences for different users and their needs and/or abilities.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://michaelscodingspot.com/node-js-vs-dotnet/\">8 reasons startups prefer Node.js over .NET, and are they justified?</a></h2>\n\t<div class=\"in-depth-meta\">Michael Shpilt</div>\n\t<div class=\"in-depth-text\">\n<p>Ever since moving over to the new .NET from the .NET Framework, I’ve realized it can be faster than ever to get up and running. .NET has <a href=\"https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-new-sdk-templates\">good templates</a> to get you started. There are also now the <a href=\"https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0\">minimal APIs</a> that can make things super simple.</p>\n<p>At the end of the day though, I feel this is kind of a personal taste thing with no “right” answer. Both Node.js and .NET are fantastic platforms to get up and running with so companies and developers should really go with whichever they’re more comfortable with. Good code can be written for either.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://frontendmastery.com/posts/the-new-wave-of-javascript-web-frameworks/\">The New Wave of JavaScript Web Frameworks</a></h2>\n\t<div class=\"in-depth-meta\">Frontend Mastery</div>\n\t<div class=\"in-depth-text\">\n<p>I remember building my first true interactive web app using PHP close to 15 years ago. Since then, the entire ecosystem has changed. Hell Chrome wasn’t even a thing back then. It’s remarkable to see the new frameworks and technologies continuing to evolve and improve. I’m pretty entrenched in React &amp; TypeScript right now, but who knows what will happen over the next 5-10 years.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Software Development</h2>\n<ul>\n<li><a href=\"https://chriscoyier.net/2022/10/17/the-proprietary-syndication-formats/\">The Proprietary Syndication Formats</a> <em>(Chris Coyier)</em></li>\n<li><a href=\"https://goatreview.com/create-extensions-methods-to-improve-csharp-readability/\">Create extensions methods to improve C# readability</a> <em>(Pierre Belin)</em></li>\n<li><a href=\"https://tdarb.org/blog/avoid-featurism.html\">Avoiding Featurism</a> <em>(Brad Taunt)</em></li>\n<li><a href=\"https://blog.jim-nielsen.com/2022/remix-react-and-state/\">Remix, React, and State</a> <em>(Jim Nielsen)</em></li>\n<li><a href=\"https://devblogs.microsoft.com/dotnet/dotnet-maui-rc2/\">Announcing .NET MAUI support for .NET 7 Release Candidate 2</a> <em>(David Ortinau)</em></li>\n<li><a href=\"https://atmos.style/blog/dark-mode-ui-best-practices\">Dark mode UI design best practices</a> <em>(Ondřej Pešička)</em></li>\n<li><a href=\"https://www.rerun.io/blog/why-rust\">Why Rust?</a> <em>(Emil Ernerfeldt)</em></li>\n<li><a href=\"https://adactio.com/journal/19531\">JavaScript</a> <em>(Jeremy Keith)</em></li>\n<li><a href=\"https://blog.ploeh.dk/2022/10/17/stubs-and-mocks-break-encapsulation/\">Stubs and mocks break encapsulation</a> <em>(Mark Seemann)</em></li>\n<li><a href=\"https://github.com/reactjs/rfcs/pull/229\">React RFC: First class support for promises and async/await</a> <em>(React Team)</em></li>\n<li><a href=\"https://wix-ux.com/when-life-gives-you-lemons-write-better-error-messages-46c5223e1a2f\">When life gives you lemons, write better error messages</a> <em>(Jenni Nadler)</em></li>\n<li><a href=\"https://tdarb.org/blog/use-text-not-icons.html\">Icons Should be Complementary - Text is Always Better</a> <em>(Brad Taunt)</em></li>\n<li><a href=\"https://ardalis.com/introducing-spectre-console/\">Introducing Spectre.Console</a> <em>(Steve Smith)</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/shows/marketplace-tech/doorbell-surveillance-delivery-drivers-privacy/\">What the era of &quot;doorbell surveillance&quot; means for delivery drivers</a> <em>(Marketplace Tech)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2022/10/19/23413518/netflix-cloud-gaming-streaming-games-xbox-game-pass-google-stadia\">Can Netflix reclaim the 'Netflix for games' crown from Xbox Game Pass?</a> <em>(The Verge)</em></li>\n</ul>\n<hr />\n<h2>Business and Finance</h2>\n<ul>\n<li><a href=\"https://mattstoller.substack.com/p/the-smash-and-grab-of-kroger-albertsons\">The Smash and Grab of Kroger-Albertsons</a> <em>(Matt Stoller)</em></li>\n</ul>\n<hr />\n<h2>Science</h2>\n<ul>\n<li><a href=\"https://www.nasa.gov/feature/goddard/2022/nasa-s-webb-takes-star-filled-portrait-of-pillars-of-creation/\">NASA's Webb Takes Star-Filled Portrait of Pillars of Creation</a> <em>(NASA)</em></li>\n</ul>\n<hr />\n<h2>Sports</h2>\n<ul>\n<li><a href=\"https://blogs.fangraphs.com/ousted-dodgers-drive-home-disconnect-between-regular-season-and-playoffs/\">Ousted Dodgers Drive Home Disconnect Between Regular Season and Playoffs</a> <em>(Jay Jaffe)</em></li>\n<li><a href=\"https://theathletic.com/3707104/2022/10/18/nhl-diversity-report\">Lazerus: Hockey is for everyone? NHL diversity report shows how false that is</a> <em>(The Athletic 💰)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.wbur.org/onpoint/2022/10/18/columnist-rana-foroohars-lessons-for-localizing-a-global-economy-in-homecoming\">On Point: Financial columnist Rana Foroohar's lessons for localizing a global economy in 'Homecoming'</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/understanding-crypto\">The New Bazaar: Understanding Crypto</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Menzingers - I Don't Wanna Be An Asshole Anymore</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/TQBG7wAVWAA\" title=\"The Menzingers - I Don't Wanna Be An Asshole Anymore\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-10-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/reading-log/1/",
      "url": "https://kpwags.com/reading-log/1/",
      "title": "Reading Log - October 14, 2022 (#1)",
      "content_html": "\n\t\t<p>It's been a little bit since I've posted one of these. Been busy working on other projects and playing Wrath of the Lich King. Anyway, here's the newest list.</p>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://critter.blog/2022/03/15/my-list-of-my-lists/\">My list of my lists</a></h2>\n\t<div class=\"in-depth-meta\">Mike Crittenden</div>\n\t<div class=\"in-depth-text\">\n<p>I found this in one of the newsletters I subscribe to. I’m going to give it a try as I appreciate some of the ideas.</p>\n<ul>\n<li>\n<p><strong>Gratitude</strong>: It’s important to remember all the people &amp; things you’re thankful for. All too ofthen it’s easy to forget in the hustle and bustle of everyday life.</p>\n</li>\n<li>\n<p><strong>Stress &amp; Suck</strong>: No one likes stress, but I think writing down some of the things that stress you out could help alleviate some of them.</p>\n</li>\n<li>\n<p><strong>Goals</strong>: Keeping track of goals, even long-term can help keep myself accountable.</p>\n  </li></ul></div>\n\n\n</div>\n<hr />\n<h2>Software Development</h2>\n<ul>\n<li><a href=\"https://csswizardry.com/2022/09/critical-css-not-so-fast/\">Critical CSS? Not So Fast!</a> <em>(Harry Roberts)</em></li>\n<li><a href=\"https://www.code4it.dev/cleancodetips/exceptions-instead-of-null\">Clean Code Tip: throw exceptions instead of returning null when there is no fallback</a> <em>(Davide Bellone)</em></li>\n<li><a href=\"https://steven-giesel.com/blogPost/b925c8c1-03ba-4eb6-9b81-f09df56e0158\">ASP.NET Core - Why async await is useful</a> <em>(Steven Giesel)</em></li>\n<li><a href=\"https://raygun.com/blog/javascript-unit-testing-frameworks/\">JavaScript unit testing frameworks in 2022: A comparison</a> <em>(Mohsen Taleb)</em></li>\n<li><a href=\"https://whitep4nth3r.com/blog/write-a-new-javascript-framework/\">I changed my mind about writing new JavaScript frameworks</a> <em>(Salma Alam-Naylor)</em></li>\n</ul>\n<hr />\n<h2>Technology</h2>\n<ul>\n<li><a href=\"https://deadline.com/2022/09/authors-open-letter-publishers-lawsuit-internet-archive-1235129802/\">Neil Gaiman, Cory Doctorow And Other Authors Publish Open Letter Protesting Publishers' Lawsuit Against Internet Archive Library</a> <em>(Deadline)</em></li>\n<li><a href=\"https://www.techdirt.com/2022/10/03/publishers-lose-their-shit-after-authors-push-back-on-their-attack-on-libraries/\">Publishers Lose Their Shit After Authors Push Back On Their Attack On Libraries</a> <em>(Techdirt)</em></li>\n<li><a href=\"https://www.theguardian.com/technology/2022/oct/11/iphones-calling-911-from-owners-pockets-on-rollercoasters\">iPhones calling 911 from owners' pockets on rollercoasters</a> <em>(The Guardian)</em></li>\n</ul>\n<hr />\n<h2>Gaming</h2>\n<ul>\n<li><a href=\"https://www.theverge.com/2022/9/29/23378713/google-stadia-shutting-down-game-streaming-january-2023\">Google is shutting down Stadia</a> <em>(The Verge)</em></li>\n</ul>\n<hr />\n<h2>Business and Finance</h2>\n<ul>\n<li><a href=\"https://www.marketplace.org/2022/09/28/pay-transparency-laws-are-changing-the-rules-for-salary-negotiations/\">Pay transparency laws are changing the rules for salary negotiations</a> <em>(Marketplace)</em></li>\n<li><a href=\"https://www.theverge.com/2022/10/11/23391433/gm-energy-ev-battery-solar-panel-charger-grid-utility\">GM created a new energy business to sell batteries and solar panels in bid to dethrone Tesla</a> <em>(The Verge)</em></li>\n<li><a href=\"https://www.reuters.com/markets/deals/cameco-corp-brookfield-renewable-partners-buy-westinghouse-79-bln-deal-2022-10-11/\">Westinghouse to be sold in $7.9-bln deal as interest in nuclear power grows</a> <em>(Reuters)</em></li>\n</ul>\n<hr />\n<h2>Podcasts</h2>\n<ul>\n<li><a href=\"https://www.smashingsecurity.com/291-deepfake-dangers-ai-image-opt-out-and-controlling-your-urges/\">Smashing Security #291: Deepfake dangers, AI image opt out, and controlling your urges</a></li>\n<li><a href=\"https://www.stitcher.com/show/dan-carlins-hardcore-history-addendum/episode/ep19-asymmetrical-perspectives-90260274\">Hardcore History Addendum #19: Asymmetrical Perspectives</a></li>\n<li><a href=\"https://99percentinvisible.org/episode/reaction-offices-and-the-future-of-work/\">99% Invisible #476: Reaction Offices and the Future of Work</a></li>\n<li><a href=\"https://freakonomics.com/podcast/why-does-the-most-monotonous-job-in-the-world-pay-1-million/\">Freakonomics #493: Why Does the Most Monotonous Job in the World Pay $1 Million?</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1780\">.NET Rocks #1780: Twenty Years of C# with Anders Hejlsberg</a></li>\n<li><a href=\"https://shows.acast.com/the-new-bazaar/episodes/a-wall-street-casino-heist\">The New Bazaar: A Wall Street casino heist</a></li>\n<li><a href=\"https://www.dotnetrocks.com/details/1782\">.NET Rocks #1782: Twenty Years of ASP.NET with Scott Guthrie</a></li>\n</ul>\n<hr />\n<h2>Everything Else</h2>\n<ul>\n<li><a href=\"https://www.economist.com/theprincepod\">The Prince (Economist's Podcast on the rise of Xi Jinping)</a></li>\n</ul>\n<hr />\n<h2>A Song to Leave You With</h2>\n<h3>The Wonder Years - Wyatt's Song (Your Name)</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/GJrEecdSLik\" title=\"The Wonder Years - Wyatt's Song (Your Name)\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-10-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/10/10/september-check-in/",
      "url": "https://kpwags.com/posts/2022/10/10/september-check-in/",
      "title": "September Check-In",
      "content_html": "\n\t\t<p>Of course the month of my vacation is the month that seems to fly by the fastest.</p>\n<h2>Hockey Starting Back Up</h2>\n<p>Since the teams I play on either got knocked out of the playoffs early or missed them entirely, I've had almost a month to a month and a half of no hockey. Mid-September that changed and 2 of the 3 leagues have started back up with the 3rd starting up mid-October.</p>\n<h2>Vacation</h2>\n<p>In the middle of the month, I went on vacation to Cape May, New Jersey. It was a glorious week where I relaxed, checked out the local breweries and wineries, read a bunch, and just re-charged. I was sad to see it end, but super glad to be back in my own bed.</p>\n<h2>Not Running the Marathon</h2>\n<p>I hate quitting and giving up on things, but I've come to the conclusion that the marathon is not going to happen for me this year. My long runs have not been going well and I'm feeling absolutely broken after them. I was doing well on my medium (6-7 miles) runs, but the long 13+ mile runs were becoming too much for me. I was looking forward to trying to beat 5 hours, but at the end of the day, the toll it was putting on my body just wasn't worth it to me. I don't recover like I used to.</p>\n<h2>Boosted</h2>\n<p>At the end of the month I got the new COVID-19 booster. COVID isn't done with us and I wanted to make sure I got myself protected. I'd highly recommend you do so too.</p>\n<h2>Monthly Round-Up</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Despite calling off the marathon, I ran just shy of 76 miles in September.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting</strong></p>\n<ul>\n<li>Getting back into it, since I'm not running the marathon, I'm going back to a 5/3/1 plan</li>\n</ul>\n<p><strong>📚 Reading</strong></p>\n<p><em>Finished</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/walkaway/9780765392770\">Walkaway</a> by Cory Doctorow</li>\n<li><a href=\"https://bookshop.org/books/the-night-the-lights-went-out-a-memoir-of-life-after-brain-damage/9780593232712\">The Night the Lights Went Out</a> by Drew Magary</li>\n<li><a href=\"https://abookapart.com/products/responsible-javascript\">Responsible Javascript</a> by Jeremy Wagner</li>\n</ul>\n<p><em>Started</em></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/the-data-detective-ten-easy-rules-to-make-sense-of-statistics/9780593084663\">The Data Detective: Ten Easy Rules to Make Sense of Statistics</a> by Tim Harford</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Fell behind on my <a href=\"https://kpwags.com/posts/2022/09/02/reading-list\">weekly</a> <a href=\"https://kpwags.com/posts/2022/09/23/reading-list\">reading lists</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li>Continued to play <a href=\"https://worldofwarcraft.com/en-us/wowclassic\">World of Warcraft</a></li>\n<li>Re-started <a href=\"https://www.ea.com/games/starwars/jedi/jedi-fallen-order\">Jedi: Fallen Order</a></li>\n</ul>\n<p><strong>📺 Watched</strong></p>\n<ul>\n<li>Continued watching <a href=\"https://www.imdb.com/title/tt0386676/\">The Office</a></li>\n<li>Started the current season of <a href=\"https://www.imdb.com/title/tt9184820/\">Star Trek: Lower Decks</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-10-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/09/23/reading-list/",
      "url": "https://kpwags.com/posts/2022/09/23/reading-list/",
      "title": "Reading List: September 3 - 23",
      "content_html": "\n\t\t<p>Life's been busy lately and I didn't get around to posting my weekly reading the last 2 weeks. I'ms starting back up with a slightly new format. I'm going to have a few links that I go into more depth with my thoughts on and then follow it up with the normal link list.</p>\n<div class=\"reading-log\"></div>\n<h2>In-Depth</h2>\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://www.techdirt.com/2022/09/06/everyones-mad-at-cloudflare-is-there-room-for-principled-takes-on-moderation-when-everyone-wants-what-feels-right-to-them/\">Everyone's Mad At Cloudflare; Is There Room For Principled Takes On Moderation?</a></h2>\n\t<div class=\"in-depth-meta\">Mike Masnick</div>\n\t<div class=\"in-depth-text\">\n<p>This all came to a head at the beginning of the month when Cloudflare stopped providing services for Kiwi Farms so it’s probably several news cycles behind us at this point. I wanted to share this because it’s important to think about how difficult content moderation actually is.</p>\n<blockquote><p>The biggest issue with targeting infrastructure providers is that — generally speaking — they don’t have any nuance on their side when it comes to remedies. They pull their services, and an entire site breaks. It does not allow for the more narrow targeting of specific content. It’s very much a nuclear option.</p></blockquote>\n<p>I think this is kind of the key point when thinking about content moderation at the infrastructure-level. When looking at services like Twitter and Facebook, if they want to kick someone off their platform, users can just go to a different service, or start their own like Trump did with Truth Social, cesspool it might be. There are even open source solutions like <a href=\"https://joinmastodon.org/\">Mastodon</a> that would allow someone to quickly setup their own Twitter clone.</p>\n<p>When going after the infrastructure-level, it’s a lot harder to start your own infrastructure platform like Cloudflare.</p><p></p>\n<p>I’m not saying this to defend Kiwi Farms. That site was fucking awful and the world is better with it offline. But like Mike Masnick talks about, it get’s messy.</p>\n<blockquote><p>When we’re talking about taking down entire sites because some content on them is objectionable, even to a horrifying level, things get really messy, really fast.</p></blockquote>\n<p>Who determines what is “good” content, and what is “bad” content. It gets complicated and I’m still not convinced there’s a good answer. It’s often very nuanced and there really isn’t a one-size-fits-all answer. It just gets a little more dangerous the farther up the tech stack you go.</p>\n<p>Mike Masnick continues to go over the issues at stake here.</p>\n<blockquote><p>The fire department analogy also got me thinking, because it kind of highlights how much of the anger directed at Cloudflare is similarly misplaced. The anger is basically saying “you need to remove your protection, so that we can burn Kiwi Farms down.” But, the larger question remains unaddressed: why does Kiwi Farms exist in the first place, and why is it left to Cloudflare to determine whether or not the public should be able to burn it down?</p></blockquote>\n<p>And this is the crux of the issue. We in America are blessed with the First Amendment. The government is not allowed to restrict what people can and can’t say. Private companies, however, through the same first amendment are allowed to determine what can and can’t be said on their platforms.</p>\n<p>One final note, I do appreciate the response from Cloudflare. They too recognize how much power they hold at the infrastructure level and don’t take their responsibility lightly. You should read their <a href=\"https://blog.cloudflare.com/cloudflares-abuse-policies-and-approach/\">statement on their policies and their approach</a> to all of this. They talk a great deal about how they handle sites and services that use their platform.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<div class=\"in-depth-notes\">\n\t<h2><a href=\"https://thoughtbot.com/blog/working-iteratively\">Working Iteratively</a></h2>\n\t<div class=\"in-depth-meta\">Joël Quenneville</div>\n\t<div class=\"in-depth-text\">\n<p>I thought this was a good article looking at how we as developers can improve how we write code.</p>\n<blockquote><p>Before even getting into code, try to break your features into smaller chunks. What’s the smallest incremental amount of value you can ship to customers? This allows you to ship and get feedback faster while also giving you more flexibility to pause and shift focus to other priorities.</p></blockquote>\n<p>This is definitely something I’ve done more of as I have grown as a software developer. In my early days I was very much just of the mind to “start writing code” and see where things go. Nowadays, both at work and on side projects, I try to slow things down and break up tasks into smaller chunks.</p>\n<p>Ironically, by slowing things down up front, I’ve found it ends up speeding things up down the line while doing the actual development.</p>\n<p></p></div><p></p>\n</div>\n<hr />\n<h2>Link Blast</h2>\n<h3 className=\"text\">👨🏼‍💻 Software Development</h3>\n<p><a href=\"https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate?\">New in Entity Framework 7: Bulk Operations with ExecuteDelete and ExecuteUpdate</a> <em>(Tim Deschryver)</em></p>\n<p><a href=\"https://code-maze.com/any-vs-count-dotnet/\">Any() vs Count() in .NET: Which One is Better?</a> <em>(Marko Hrnčić)</em></p>\n<p><a href=\"https://textslashplain.com/2022/09/12/edges-super-res-image-enhancement/\">Edge's Super-Res Image Enhancement</a> <em>(Eric Lawrence)</em></p>\n<p><a href=\"https://blog.jetbrains.com/dotnet/2022/09/12/jetbrains-rider-net-watch-run-configuration-plugin/\">JetBrains Rider .NET Watch Run Configuration Plugin</a> <em>(JetBrains)</em></p>\n<p><a href=\"https://blog.ploeh.dk/2022/09/19/when-to-refactor/\">When to refactor</a> <em>(Mark Seemann)</em></p>\n<p><a href=\"https://stackoverflow.blog/2022/09/15/why-the-number-input-is-the-worst-input/\">Why the Number Input is the Worst Input</a> <em>(Jared Toporek)</em></p>\n<p><a href=\"https://buttondown.email/hillelwayne/archive/i-have-complicated-feelings-about-tdd-8403/\">I have complicated feelings about TDD</a> <em>(Hillel Wayne)</em></p>\n<h3 className=\"text\">🖥 Technology</h3>\n<p><a href=\"https://www.theverge.com/2022/9/21/23364696/getty-images-ai-ban-generated-artwork-illustration-copyright\">Getty Images bans AI-generated content over fears of legal challenges</a> <em>(The Verge)</em></p>\n<h3 className=\"text\">🎮 Gaming</h3>\n<p><a href=\"https://www.theverge.com/2022/9/7/23340667/destiny-2-eruption-iron-banner-mode-explained-review\">Destiny 2's new Eruption mode is the best thing to happen to its PvP in years</a> <em>(The Verge)</em></p>\n<h3 className=\"text\">📈 Business and Finance</h3>\n<p>💰 <a href=\"https://www.nytimes.com/2022/09/07/technology/recruiters-tech-layoffs.html\">From Boom to Gloom: Tech Recruiters Struggle to Find Work</a> <em>(New York Times)</em></p>\n<h3 className=\"text\">🔬 Science</h3>\n<p><a href=\"https://arstechnica.com/science/2022/09/webb-telescope-captures-dazzling-views-of-neptune-and-its-moons/\">New JWST image reveals full glory of Neptune, its moons, and rings</a> <em>(Ars Technica)</em></p>\n<h3 className=\"text\">🎧 Podcasts</h3>\n<p><a href=\"https://www.techdirt.com/2022/09/06/techdirt-podcast-episode-328-the-problems-with-the-california-kids-code/\">Techdirt Podcast Episode 328: The Problems With The California Kids' Code</a></p>\n<h3 className=\"text\">🎵 A Song to Leave You With</h3>\n<h4>TIM - High Hopes</h4>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/pw0kJMh9SfM\" title=\"TIM - High Hopes\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-09-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/09/07/vacationing/",
      "url": "https://kpwags.com/posts/2022/09/07/vacationing/",
      "title": "Vacationing",
      "content_html": &lt;p&gt;It’s a secret to everyone! This post is for RSS subscribers only. &lt;a href=&quot;https://kpwags.com/rss-club/&quot;&gt;Read more about RSS Club&lt;/a&gt;.&lt;/p&gt;"\n\t\t<p><em>This post is for the <a href=\"https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club\">Secret RSS Club Readers</a>.</em></p>\n<p>My wife and I are currently enjoying a week down in Cape May, New Jersey and it's exactly what I want it to be. A week of doing basically nothing.</p>\n<p>We've spent some time going to breweries, some time at wineries, but overall, we're spending our time our way, doing whatever we want, sometimes nothing at all.</p>\n<p>I've been spending some of my time reading, working on side projects, and just relaxing to take my mind off of things. It's nice to not have to worry about work and everything else going on in our sometimes crazy life. But hey, I guess that's what vacation is for.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-09-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/09/07/august-2022-check-in/",
      "url": "https://kpwags.com/posts/2022/09/07/august-2022-check-in/",
      "title": "August Check-In",
      "content_html": "\n\t\t<p>I can't believe the summer is basically over. August was spent running. So...much...running.</p>\n<p>At the beginning of August my training for the 2022 Philadelphia Marathon began. I went from running regularly, if not intermittently, to running 4 days a week. My legs were yelling at me all month with having to run longer and longer distances. Thankfully my body is finally catching up and the runs have gotten a bit of easier. The long runs every Saturday are still tough, but this whole thing is a challenge so as far as I'm concerned, it'll be worth it! 5 weeks in, 11 to go!</p>\n<h2>Various Events</h2>\n<p>I started the month going to a Lehigh Valley Iron Pigs (Phillies AAA affiliate) baseball game with my family. It was a fun time, but not for the Iron Pigs as they got smoked. Later in the month I went to a Phillies game that went far better for the home team. I also ended up going to a whiskey tasting dinner later in the month that has gotten me to start trying some new whiskeys and bourbons. That could be dangerous.</p>\n<h2>New Project at Work</h2>\n<p>I ended up getting (temporarily?) put on a new team at work. I'm now working with <a href=\"https://identityserver4.readthedocs.io/en/latest/\">Identity Server</a> and it's a nice change of pace and a new thing to explore which is exciting.</p>\n<h2>Changing How I Journal</h2>\n<p>Over the last 6 months or so, I've been trying to journal what I do every day and whatnot. I started out using a Moleskine notebook and pen, then I moved to Notion, then to my local Dropbox folder full of markdown files, then back to pen and paper...well, needless to say I've had a hard time deciding how I want to do it. I've started using Goodnotes on my iPad with the Apple Pencil and feel like I'm getting the best of both worlds with regards to physically writing with the ease of technology and &quot;undo&quot; the iPad provides. The only thing I don't like, which is no better than paper and pencil, is that there's no real way to journal from my iPhone. I can view the notes, but since there isn't Apple Pencil support (if I even had it), I can't do much more. I definitely enjoy keeping track of what I've done, just need to find a good way to make it easy for myself.</p>\n<h2>New Dining Room Piece</h2>\n<p>When my wife and I bought our house in 2015, our dining room was outdated, but it had an &quot;okay&quot; set of built-ins next to the fireplace. They weren't anything to write home about, but they were functional. When we found the wood paneling under the wallpaper and decided to gut the room, we ended up losing those built-ins. Since then, that area has been kind of useless. We've also needed a pantry and some more storage, so we decided to hire a local woodworking company to build us a new set of built-ins. Only this one came with beautiful black walnut sliding doors. Needless to say, they turned out awesome and am so happy that we have a nice piece that is also functional.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/pevhpMBEpO-1080.webp 1080w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/pevhpMBEpO-1080.gif 1080w\" /><img alt=\"A beautiful black walnut sliding doors next to my fireplace\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/pevhpMBEpO-1080.jpeg\" width=\"1080\" height=\"1440\" /></picture></p>\n<h2>Monthly Roundup</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Marathon training had me hit 86 miles in August.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting:</strong></p>\n<p>Lifting 1-2 times a week, not really going for any PRs at this point, though I am trying to inch my way back towards a 400 lbs. deadlift.</p>\n<p><strong>📚 Reading:</strong></p>\n<ul>\n<li><ExternalLink href=\"https://bookshop.org/books/walkaway/9780765392770\" title=\"Walkway by Cory Doctorow\">Cory Doctorow - Walkaway</ExternalLink></li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued with my <a href=\"https://kpwags.com/posts/2022/08/05/reading-list\">weekly</a> <a href=\"https://kpwags.com/posts/2022/08/12/reading-list\">reading</a> <a href=\"https://kpwags.com/posts/2022/08/19/reading-list\">posts</a> every <a href=\"https://kpwags.com/posts/2022/09/02/reading-list\">Friday</a>.</li>\n<li>Wrote about my <a href=\"https://kpwags.com/posts/2022/08/03/marathon-training\">marathon</a> <a href=\"https://kpwags.com/posts/2022/08/29/marathon-training-update\">training</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/08/18/upping-our-coffee-game\">Coffee</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<p>Been playing WoW a bunch. Trying to get ready for Wrath of the Lich King in September.</p>\n<ul>\n<li><a href=\"https://worldofwarcraft.com/en-us/wowclassic\" target=\"_blank\" rel=\"noreferrer nofollow\">WoW: Burning Crusade Classic</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-09-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/09/02/reading-list/",
      "url": "https://kpwags.com/posts/2022/09/02/reading-list/",
      "title": "Reading List for August 20 - September 2",
      "content_html": "\n\t\t<p>Was a little busy last week so this week is a little longer.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://www.joshwcomeau.com/react/why-react-re-renders\">Why React Re-Renders</a> - <em>joshwcomeau.com</em></p>\n<p><a href=\"https://blog.tomayac.com/2022/08/30/things-not-available-when-someone-blocks-all-cookies/\">Things Not Available When Someone Blocks All Cookies</a> - <em>tomayac.com</em></p>\n<p><a href=\"https://mfcallahan.blog/2022/08/26/the-microsoft-edge-dev-tools-extension-for-vs-code-is-so-awesome-that-im-ditching-chrome-for-web-development/\">The Microsoft Edge Dev Tools extension for VS Code is so awesome that I'm ditching Chrome for web development</a> - <em>mfcallahan.blog</em></p>\n<p><a href=\"https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/\">Performance Improvements in .NET 7</a> - <em>devblogs.microsoft.com</em></p>\n<p><a href=\"https://webkit.org/blog/13140/webkit-on-github/\">WebKit on GitHub</a> - <em>webkit.org</em></p>\n<p><a href=\"https://blog.appsignal.com/2022/08/31/4-ways-to-minimize-your-dependencies-in-nodejs.html\">4 Ways to Minimize Your Dependencies in Node.js</a> - <em>blog.appsignal.com</em></p>\n<p><a href=\"https://beesbuzz.biz/code/439-Falsehoods-programmers-believe-about-email\">Falsehoods Programmers Believe About Email</a> - <em>beesbuzz.biz</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.theverge.com/23312359/apple-iphone-lightning-cable-anniversary-10-years\">Apple's Lightning cable turns 10, but its time is over</a> - <em>theverge.com</em></p>\n<p><a href=\"https://www.techdirt.com/2022/08/31/france-uses-ai-to-find-swimming-pools-for-tax-purposes/\">France Uses AI To Find Swimming Pools For Tax Purposes</a> - <em>techdirt.com</em></p>\n<p><a href=\"https://stratechery.com/2022/rights-laws-and-google/\">Rights, Laws, and Google</a> - <em>stratechery.com</em></p>\n<h2>🎮 Gaming</h2>\n<p><a href=\"https://www.theverge.com/2022/9/1/23332738/halo-infinite-season-3-delay-forge-launch-november\">Halo Infinite’s co-op and Forge modes delayed to November</a> - <em>theverge.com</em></p>\n<p><a href=\"https://www.destructoid.com/halo-infinite-forge-beta-split-screen-campaign-co-op-november-update\">Halo Infinite will get Forge beta in November, but scraps split-screen campaign co-op</a> - <em>destructoid.com</em></p>\n<h2>🔬 Science</h2>\n<p><a href=\"https://www.economist.com/science-and-technology/2022/08/24/the-space-launch-system-is-yesterdays-rocket\">The Space Launch System is Yesterday’s Rocket</a> - 💰- <em>economist.com</em></p>\n<p><a href=\"https://arstechnica.com/science/2022/09/nasa-will-pay-boeing-more-than-twice-as-much-as-spacex-for-crew-seats/\">NASA will pay Boeing more than twice as much as SpaceX for crew seats</a> - <em>arstechnica.com</em></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://neal.fun/design-the-next-iphone/\">Design the Next iPhone</a> - <em>neal.fun</em></p>\n<p><a href=\"https://brainbaking.com/post/2022/04/cool-things-people-do-with-their-blogs/\">Cool Things People Do With Their Blogs</a> - <em>brainbaking.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>The Wonder Years - I Just Want to Sell Out My Funeral</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/rwrsrsauHfI\" title=\"The Wonder Years - I Just Want to Sell Out My Funeral\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-09-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/29/marathon-training-update/",
      "url": "https://kpwags.com/posts/2022/08/29/marathon-training-update/",
      "title": "Marathon Training Update",
      "content_html": "\n\t\t<p>Well, it's been just about a month since I started training for the 2022 Philadelphia Marathon. Overall it's been going well.</p>\n<p>I'm now on my 5th week of training and so far, so good. I've been having to get up at the crack of dawn to get my runs in before the heat gets turned up to eleven, but I've been doing it. It's been a bit of an adjustment doing distance as for the last several years I've been focusing more on just running more and generally sticking to the 3-4 mile range. I'm running 4 days a week now and 3 of the 4 are 5+ miles. The long runs on Saturday are gonna start to be a challenge, but I welcome it.</p>\n<p>The only hiccup I had was 2 weeks ago when I missed a run thanks to aggrivating my groin playing hockey. I was, and am still a little concerned over it, but I've been able to get my miles in without it bothering me so crossing my fingers 🤞🏻 in hopes that I'm not going to aggrivate it further. I'm not going to give up hockey for 3 months, but I'm hoping that the two activities don't end up colliding.</p>\n<p>I'm 81 miles into my training...time to keep it going!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/19/reading-list/",
      "url": "https://kpwags.com/posts/2022/08/19/reading-list/",
      "title": "Reading List: August 13 - 19",
      "content_html": "\n\t\t<p>Quite a lot this week.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://devblogs.microsoft.com/typescript/announcing-typescript-4-8-rc/\">Announcing TypeScript 4.8 RC</a> - <em>devblogs.microsoft.com</em></p>\n<p><a href=\"https://jeremydmiller.com/2022/08/09/what-is-good-code/\">What is Good Code</a> - <em>jeremydmiller.com</em></p>\n<p><a href=\"https://deno.com/blog/changes\">Big Changes Ahead for Deno</a> - <em>deno.com</em></p>\n<p><a href=\"https://coderethinked.com/what-are-guard-clauses-in-net/\">What are Guard Clauses in .NET</a> - <em>coderethinked.com</em></p>\n<p><a href=\"https://medium.com/young-coder/no-c-is-not-dying-but-no-language-lives-forever-3f841aeeaf55\">No, C# Is Not Dying. But No Language Lives Forever</a> - <em>medium.com/young-coder</em></p>\n<p><a href=\"https://devblogs.microsoft.com/dotnet/dotnet-6-is-now-in-ubuntu-2204/\">.NET 6 is now in Ubuntu 22.04</a> - <em>devblogs.microsoft.com</em></p>\n<p><a href=\"https://daverupert.com/2022/08/github-copilot/\">Thoughts on Copilot</a> - <em>daverupert.com</em></p>\n<p><a href=\"https://dateo-software.de/blog/best-practices-async-await/\">10 Best Practices in Async-Await Code in C# in 2022</a> - <em>dateo-software.de</em></p>\n<p><a href=\"https://www.architect.io/blog/2022-08-16/react-environment-variables-developers-guide/\">React environment variables: A developer's guide</a> - <em>architect.io</em></p>\n<p><a href=\"https://daverupert.com/2022/08/web-is-a-harsh-manager/\">The web is a harsh manager</a> - <em>daverupert.com</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.marketplace.org/2022/08/17/will-deprinting-reduce-the-paper-industrys-carbon-footprint/\">Will &quot;deprinting&quot; reduce the paper industry's carbon footprint?</a> - <em>marketplace.org</em></p>\n<h2>🎮 Gaming</h2>\n<p><a href=\"https://arstechnica.com/gaming/2022/08/nfl-blitz-arcade-games-will-relaunch-as-arcade1up-cabinet-exclusive/\">NFL Blitz arcade games will relaunch as Arcade1Up cabinet exclusive</a> - <em>arstechnica.com</em></p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.theverge.com/2022/8/16/23308514/american-airlines-boom-supersonic-jet-order\">American Airlines places order for 20 supersonic jets from Boom Supersonic</a> - <em>theverge.com</em></p>\n<h2>🔬 Science</h2>\n<p><a href=\"https://arstechnica.com/science/2022/08/nasa-declares-that-its-space-launch-system-rocket-is-now-ready-to-fly/\">No, seriously, NASA's Space Launch System is ready to take flight</a> - <em>arstechnica.com</em></p>\n<p><a href=\"https://www.economist.com/science-and-technology/2022/08/11/how-thinking-hard-makes-the-brain-tired\">How thinking hard makes the brain tired</a> - 💰 - <em>economist.com</em></p>\n<h2>🎧 Podcasts</h2>\n<p><a href=\"https://shows.acast.com/the-new-bazaar/episodes/mma-and-the-business-of-america\">The New Bazaar S1 E17 - MMA and the business of America</a></p>\n<p><a href=\"https://podcasts.apple.com/us/podcast/star-trek-first-contact-a-meta-movie-about-star/id1562785021?i=1000543045178\">Galaxy Brains S1 E33 - Star Trek: First Contact | A meta movie about Star Trek's creation with John Hodgman</a></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://ofdollarsanddata.com/when-data-fails/\">When Data Fails</a> - <em>ofdollarsanddata.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>VNV Nation - Testament</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/9kf0BiM6Unc\" title=\"VNV Nation - Testament\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/18/upping-our-coffee-game/",
      "url": "https://kpwags.com/posts/2022/08/18/upping-our-coffee-game/",
      "title": "Upping Our Coffee Game",
      "content_html": "\n\t\t<p>A couple months ago, my wife and I decided to up our coffee game.</p>\n<p>We ended up getting a nice <a href=\"https://www.oxo.com/conical-burr-coffee-grinder.html\">OXO Coffee Grinder</a> with the hopes of trying different coffee beans. We started small getting some local beans, but then I got it into my head to look into a coffee subscription service. We ended up going with <a href=\"https://www.drinktrade.com/\">Trade</a> and for the last several months have been getting a new bag delivered to us every other week from various roasters from across the country.</p>\n<p>I'd like to say it stopped there, but then we decided it would be a good time to get an espresso machine. We ended up getting the <a href=\"https://www.breville.com/us/en/products/espresso/bes500.html\">Breville Bambino Plus</a>. I can't say I have any regrets with that decision. Being able to make a latte at home is convenient. It takes a little more work than simply pressing the brew button on my coffee maker, but they're delicious. Lauren even was able to make a vanilla simple syrup to up the latte game. I'm hoping to be able to get using the machine down to a science enough that I can quickly and easily add some espresso shots to my coffee when I need that extra oomph in the morning.</p>\n<p>Over the last several months, we've gotten some coffee beans we've really liked and it's nice to be able to try some coffee from shops we otherwise wouldn't be able try. If you like coffee and want to give a coffee service a try, I'd highly recommend it. We've been happy with <a href=\"https://www.drinktrade.com/\">Trade</a>, but there are plenty of others out there.</p>\n<p>Also, thanks to the <a href=\"https://www.nytimes.com/wirecutter/\">Wirecutter</a> for helping figure out what gear was best for us.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club/",
      "url": "https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club/",
      "title": "Welcome to the RSS Club",
      "content_html": &lt;p&gt;It’s a secret to everyone! This post is for RSS subscribers only. &lt;a href=&quot;https://kpwags.com/rss-club/&quot;&gt;Read more about RSS Club&lt;/a&gt;.&lt;/p&gt;"\n\t\t<p><em>This post is for the <a href=\"https://kpwags.com/posts/2022/08/15/welcome-to-the-rss-club\">Secret RSS Club Readers</a>.</em></p>\n<p>If you're reading this, you're part of the RSS club!</p>\n<p>This means that you've subscribed to the RSS feed for my blog. Every once in a while I'll write a post that is only available via my RSS feed. Consider it your semi-exclusive content.</p>\n<p>Remember, there are 3 simple rules for the RSS Club</p>\n<ol>\n<li>1st rule of RSS Club is <em>&quot;Don't Talk About RSS Club&quot;</em>.</li>\n<li>2nd rule of RSS Club is <em>&quot;Don't Share on Social Media&quot;</em>.</li>\n<li>3rd rule of RSS Club is <em>&quot;Provide Value&quot;</em>.</li>\n</ol>\n<p>More to come!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/12/reading-list/",
      "url": "https://kpwags.com/posts/2022/08/12/reading-list/",
      "title": "Reading List: August 6 - August 12",
      "content_html": "\n\t\t<p>Looking forward to .NET 7 and a man in Michigan hitting back against Comcast.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://css-tricks.com/designing-for-long-form-articles/\">Designing for Long-Form Articles</a> - <em>css-tricks.com</em></p>\n<p><a href=\"https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-7/\">Announcing .NET 7 Preview 7</a> - <em>devblogs.microsoft.com</em></p>\n<p><a href=\"https://devblogs.microsoft.com/visualstudio/differentiating-visual-studio-instances/\">Differentiating Visual Studio Instances</a> - <em>devblogs.microsoft.com</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.engadget.com/gm-is-doubling-the-size-of-its-super-cruise-network-in-the-us-and-canada-123034974.html\">GM is doubling the size of its Super Cruise network in the US and Canada</a> - <em>engadget.com</em></p>\n<p><a href=\"https://arstechnica.com/tech-policy/2022/08/man-who-built-isp-instead-of-paying-comcast-50k-expands-to-hundreds-of-homes/\">Man who built ISP instead of paying Comcast $50K expands to hundreds of homes</a> - <em>arstechnica.com</em></p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.wsj.com/articles/why-cryptos-market-cap-never-booms-or-busts-as-much-as-you-think-11659691802\">Why Crypto's Market Cap Never Booms, or Busts, as Much as You Think</a> - 💰 - <em>wsj.com</em></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://www.julian.com/blog/craftspeople\">Becoming an expert</a> - <em>julian.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>Tim Barry - Prosser's Gabriel</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/sSuh44wDbmM\" title=\"Tim Barry - Prosser's Gabriel\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/05/reading-list/",
      "url": "https://kpwags.com/posts/2022/08/05/reading-list/",
      "title": "Reading List: July 30 - August 5",
      "content_html": "\n\t\t<p>Amazon now has Alexa on wheels!</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://developers.redhat.com/articles/2022/08/01/containerize-net-applications-without-writing-dockerfiles\">Containerize .NET applications without writing Dockerfiles</a> - <em>developers.redhat.com</em></p>\n<p><a href=\"http://humbletoolsmith.com/2022/08/01/customizing-typescript-string-types-with-template-literal-types-and-utility-types/\">Customizing TypeScript String Types with Template Literal Types and Utility Types</a> - <em>humbletoolsmith.com</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.aboutamazon.com/news/company-news/amazon-and-irobot-sign-an-agreement-for-amazon-to-acquire-irobot\">Amazon Acquires iRobot</a> - <em>aboutamazon.com</em></p>\n<h2>🎧 Podcasts</h2>\n<p><a href=\"https://www.curbed.com/2021/11/nice-try-interior-weights-home-exercise.html\">Nice Try - The Weight</a></p>\n<p><a href=\"https://99percentinvisible.org/episode/cute-little-monstrosities-of-nature/\">99% Invisible - Cute Little Monstrosities of Nature</a></p>\n<p><a href=\"https://www.dotnetrocks.com/?show=1767\">.NET Rocks #1767 - Cross-Platform .NET Testing with Kendra Havens</a></p>\n<p><a href=\"https://www.hanselminutes.com/816/web-assemblys-hidden-talent-with-wasmclouds-kevin-hoffman\">Web Assembly's hidden talent with WasmCloud's Kevin Hoffman</a></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://marcoheine.com/blog/just-hit-publish/\">Just Hit Publish</a> - <em>marcoheine.com</em></p>\n<p><a href=\"https://blog.jim-nielsen.com/2022/other-peoples-websites/\">The OG Social Network: Other People's Websites</a> - <em>blog.jim-nielsen.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HRqSg2PrJpY\" title=\"Rise Against - People Live Here\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/03/marathon-training/",
      "url": "https://kpwags.com/posts/2022/08/03/marathon-training/",
      "title": "Marathon Training",
      "content_html": "\n\t\t<p>Whelp, the Philadelphia Marathon is 16 weeks away and I've started training for it.</p>\n<p>Back in May I decided to run another marathon and signed up for the Philadelphia Marathon in November. I ran the 2015 Philly Marathon in 5 hours 15 minutes. I want to get that time under 5 hours this year.</p>\n<p>Now is when I have to put action to my words and have to start training for it. I'm gonna be running 4 days a week and for the first time in several years run for distance. I'm going to have to run 8 miles on Saturday which will be my longest run since 2017. It's gonna be a challenge but I'm looking forward to it. The worst of it will probably be this month and maybe into September when I have to deal with higher temperatures and high humidity. There will be some early wake-ups to help me beat the heat! Oh boy...</p>\n<p>Wish me (and my legs) luck!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/08/01/july-check-in/",
      "url": "https://kpwags.com/posts/2022/08/01/july-check-in/",
      "title": "July Check-In",
      "content_html": "\n\t\t<p>July was mostly a good month for me. A small medical mishap, but otherwise a good month.</p>\n<h2>A Quick Trip to Urgent Care</h2>\n<p>My attempts to break new PRs for deadlift and squats ended up getting delayed thanks to a mishap with a garden hose. I had to replace the end of a hose since it got damaged and unfortunately sliced my finger open on the metal ring holding the new hose end. I ended up needing stitches so lifting was basically out of the question. I definitely did not want to bust the stitches open by twisting the skin or anything else that might happen when you're lifting hundreds of pounds of weight. I ended up condensing two weeks of lifts into one at the end of the month in an attempt to hit my goals before starting my marathon training. I was able to set a new squats PR at 365 lbs., but ended up failing in my quest to deadlift 400 lbs. I'm disappointed, but will try to hit 400 in the next one to two weeks before lightening my lifts for when the marathon training really ramps up. I don't really want to be going super heavy and setting new PRs while I'm trying to also put in 30 miles of running in a week. My plan is to lift two days a week, but with less volume than I've been doing for the year. Keep my strength up, but focus on running.</p>\n<h2>Hockey Tournament</h2>\n<p>In mid-July, my ice rink hosted their yearly tournament. I formed a team last year and played and it was fun. This year though, I just joined a pre-formed team so I didn't have to worry about gathering enough players which took a bunch of stress away from the event. Our team went 0-3-1, but we played competitively despite never having played together before. For anyone who hasn't played hockey before, it can be challenging sometimes to play with a new team since different players have different tendencies. Learning those tendencies and quirks can make teams and players more effective. Not knowing those same tendencies can make things a little more difficult. At the end of the day though, it was fun. Met some new people, played with people I've played both with and against previously, and got plenty of exercise.</p>\n<h2>Journaling</h2>\n<p>Over the last couple of months, I've been trying to keep a daily journal of what I've done, read, and anything else that might come to mind. I'm just not sure what kind of format I want to use. I've been making a new markdown file every day, but I'm also considering just using my Moleskin notebook and a pen. To make matters more complicated, I've also considered using my iPad Pro and the Apple Pencil. I'm still not sure what format will end up winning out, but I find it relaxing and interesting keeping track of my days. With how crazy things often are and how the days seem to blur together, it's nice to have a little log to write down my activities and thoughts.</p>\n<h2>Monthly Roundup</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Only ran a little under 13 miles this month. The 90-100 degree days did not make running all that appealing. Marathon training starts in August, so might be some early-morning runs in my future.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting:</strong></p>\n<ul>\n<li>Hit a new PR on squats - 365 lbs.</li>\n<li>Failed a 400 lbs. deadlift</li>\n</ul>\n<p><strong>📚 Reading:</strong></p>\n<p>Finished 3 books this month.</p>\n<ul>\n<li><a href=\"https://bookshop.org/books/project-hail-mary/9780593135204\" target=\"_blank\" rel=\"noreferrer nofollow\">Katie Mack - The End of Everything</a></li>\n<li><a href=\"https://bookshop.org/books/project-hail-mary/9780593135204\" target=\"_blank\" rel=\"noreferrer nofollow\">Albert Bourla - Moonshot: Inside Pfizer's Nine-Month Race to Make the Impossible Possible</a></li>\n<li><a href=\"https://www.manning.com/books/unit-testing\" target=\"_blank\" rel=\"noreferrer nofollow\">Unit Testing Principles, Practices, and Patterns</a></li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Continued with my <a href=\"https://kpwags.com/posts/2022/07/08/reading-list\">weekly</a> <a href=\"https://kpwags.com/posts/2022/07/15/reading-list\">reading</a> <a href=\"https://kpwags.com/posts/2022/07/22/reading-list\">posts</a> every <a href=\"https://kpwags.com/posts/2022/07/29/reading-list\">Friday</a>.</li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/07/31/updating-my-likes-page-with-feedbin\">connecting to Feedbin to populate my likes page</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<p>Been playing WoW a bunch. Trying to get ready for Wrath of the Lich King in September.</p>\n<ul>\n<li><a href=\"https://worldofwarcraft.com/en-us/wowclassic\" target=\"_blank\" rel=\"noreferrer nofollow\">WoW: Burning Crusade Classic</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-08-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/31/updating-my-likes-page-with-feedbin/",
      "url": "https://kpwags.com/posts/2022/07/31/updating-my-likes-page-with-feedbin/",
      "title": "Updating My Likes Page with Feedbin",
      "content_html": "\n\t\t<p>I've been tweaking my site here and there and the one thing I recently did was change how I populate my '<a href=\"https://kpwags.com/likes\">likes</a>' page. Previously I had been doing it manually, but recently after having listened to the founder of <a href=\"https://feedbin.com/\">Feedbin</a> on the <a href=\"https://changelog.com/podcast/499\">Changelog Podcast</a>, I decided to try something different. I wanted to use a nice feature Feedbin has to make the page better.</p>\n<p>I'm a subscriber to <a href=\"https://feedbin.com/\">Feedbin</a> and the one feature it provides is the ability to view the items you've starred as a feed in and of itself. That means that for any article on any of my feeds, when I star it, it gets added to its own RSS feed that is public. I decided that I was going to use that to populate my <a href=\"https://kpwags.com/likes\">likes page</a>.</p>\n<p>The first thing I needed to do was to create a TypeScript model for it.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">FeedbinItem</span> <span class=\"token punctuation\">{</span>\n    title<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span>\n    link<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span>\n    domain<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>It's a pretty simple model, I want the title, the URL, and the domain.</p>\n<p>The next thing I needed to do was to find a good way to parse the XML returned from Feedbin. Since I'm using Node, the DOM Parser the browser uses is a no go as the Node backend doesn't support it. Fortunately I found <a href=\"https://github.com/NaturalIntelligence/fast-xml-parser\">fast-xml-parser</a> which does a fantastic job of converting an XML string into a JSON object that would allow me to easily go through the data returned.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> FeedbinItem <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@models/FeedbinItem'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> XMLParser <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'fast-xml-parser'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getFeedbinItems <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span>FeedbinItem<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token operator\">></span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> items<span class=\"token operator\">:</span> FeedbinItem<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> res <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'https://feedbin.com/starred/starred-items.xml'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>res<span class=\"token punctuation\">.</span>ok<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// handle error logic</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">const</span> response <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> res<span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> parser <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">XMLParser</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> parser<span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    data<span class=\"token punctuation\">.</span>rss<span class=\"token punctuation\">.</span>channel<span class=\"token punctuation\">.</span>item<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>i<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> domain <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token constant\">URL</span></span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">.</span>link<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        items<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            title<span class=\"token operator\">:</span> i<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">,</span>\n            link<span class=\"token operator\">:</span> i<span class=\"token punctuation\">.</span>link<span class=\"token punctuation\">,</span>\n            domain<span class=\"token operator\">:</span> domain<span class=\"token punctuation\">.</span>hostname<span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> items<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The first thing I do in the code is to declare the array of items to return. I then make a fetch call to Feedbin to retrieve my starred items.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> res <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'https://feedbin.com/starred/starred-items.xml'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Assuming the call was successful, I create the parser and have it parse the XML into a JSON object.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> parser <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">XMLParser</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> parser<span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>After that, it's simply parsing the returned items and adding them to the items array.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\">data<span class=\"token punctuation\">.</span>rss<span class=\"token punctuation\">.</span>channel<span class=\"token punctuation\">.</span>item<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>i<span class=\"token operator\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> domain <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token constant\">URL</span></span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">.</span>link<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    items<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        title<span class=\"token operator\">:</span> i<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">,</span>\n        link<span class=\"token operator\">:</span> i<span class=\"token punctuation\">.</span>link<span class=\"token punctuation\">,</span>\n        domain<span class=\"token operator\">:</span> domain<span class=\"token punctuation\">.</span>hostname<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>The only slight complication is me getting the domain or hostname from the article's link to add that to the model. For that, I simply create a new <code>URL</code> object and pass the link in and then grab the hostname.</p>\n<p>The next step was to pull the data into the page in Next.js. Originally I was just using a <code>.ts</code> file with an array of my likes. Since it was static data, I just used Next.js' <code>getStaticProps</code> to get the data from the <code>.ts</code> file and load it into the component. Since I need this to now be dynamic, I switched to the <code>getServerSideProps</code> so that the call is made on the server, rendered on the server, and sent down to the client after.</p>\n<p>I wrapped the fetch code above into its own file to make the <code>likes.tsx</code> component a little cleaner.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> getFeedbinItems <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@lib/feedbin'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> FeedbinItem <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@models/FeedbinItem'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> getServerSideProps<span class=\"token operator\">:</span> <span class=\"token function-variable function\">GetStaticProps</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">getFeedbinItems</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        props<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token comment\">// only return most recent 25</span>\n            likedItems<span class=\"token operator\">:</span> data<span class=\"token punctuation\">.</span><span class=\"token function\">slice</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">25</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">type</span> <span class=\"token class-name\">LikeProps</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    likedItems<span class=\"token operator\">:</span> FeedbinItem<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> Likes <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> likedItems <span class=\"token punctuation\">}</span><span class=\"token operator\">:</span> LikeProps<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSX</span><span class=\"token punctuation\">.</span>Element <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// the render code</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<p>It's pretty simple. When the page is to be rendered, it loads the starred items from my custom RSS feed, and passes the items into the React component.</p>\n<p>So there you have it. It's a pretty simple thing to setup, and it provides me a way to keep my likes page a little more up-to-date without having to manually add items. Of course it means that the items I star have to be part of an RSS feed, but that's why everyone should have a blog of their own WITH an RSS feed.</p>\n<p><em>Edited 8/3/2022 - Typo/Grammar Edit</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/29/reading-list/",
      "url": "https://kpwags.com/posts/2022/07/29/reading-list/",
      "title": "Reading List: July 23 - July 29",
      "content_html": "\n\t\t<p>Delved a lot into C# and .NET this week. Also a great discussion on Plain English about the current state of Crypto.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://ayende.com/blog/197793-C/when-debugging-assume-an-unreliable-narrator\">When debugging, assume an unreliable narrator</a> - <em>ayende.com</em></p>\n<p><a href=\"https://www.josephguadagno.net/2022/07/19/how-to-simplify-your-c-sharp-unit-testing-with-a-mocking-framework\">How to simplify your C# unit testing with a mocking framework</a> - <em>josephguadagno.net</em></p>\n<p><a href=\"http://dontcodetired.com/blog/post/Work-with-SQL-Data-with-Fewer-Lines-of-Code-Using-Dynamic-C\">Work with SQL Data with Fewer Lines of Code Using Dynamic C#</a> - <em>dontcodetired.com</em></p>\n<p><a href=\"https://kpwags.com/posts/2022/07/29/reading-list/'https://simpleprogrammer.com/node-js-vs-asp-net/\">Node.js Vs ASP.NET – Battle of Two Server-Side Languages</a> - <em>simpleprogrammer.com</em></p>\n<p><a href=\"https://blog.jim-nielsen.com/2022/html-email-rant/\">HTML Emails: A Rant</a> - <em>blog.jim-nielsen.com</em></p>\n<p><a href=\"https://stackoverflow.blog/2022/07/18/how-observability-is-redefining-the-roles-of-developers/\">How observability is redefining the roles of developers</a> - <em>stackoverflow.blog</em></p>\n<p><a href=\"https://coderethinked.com/what-are-minimal-apis-in-asp-net-core-6/\">What are Minimal APIs in ASP.NET Core 6</a> - <em>coderthinked.com</em></p>\n<p><a href=\"https://event-driven.io/en/union_types_in_csharp/\">Union Types in C#</a> - <em>event-driven.io</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.wired.com/story/digital-divide-widening-cost-of-living/\">The Digital Divide is Coming for You</a> - <em>wired.com</em></p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.wsj.com/articles/volvo-moves-closer-to-all-electric-goal-11658306271\">Volvo Moves Closer to All-Electric Goal</a> - 💰 - <em>wsj.com</em></p>\n<p><a href=\"https://www.economist.com/finance-and-economics/2022/07/24/why-it-is-too-early-to-say-the-world-economy-is-in-recession\">Why it is too early to say the world economy is in recession</a> - 💰 - <em>economist.com</em></p>\n<h2>🔬 Science</h2>\n<p><a href=\"https://www.syfy.com/syfy-wire/bad-astronomy-best-extragalactic-candidate-quiet-black-hole-found\">The first dormant black hole likely found lurking in another galaxy</a> - <em>syfy.com</em></p>\n<h2>🎧 Podcasts</h2>\n<p><a href=\"https://www.theringer.com/2022/7/25/23273614/crypto-crash-part-1-debating-the-case-against-crypto\">Plain English - Crypto Crash Part 1: Debating the Case Against Crypto</a></p>\n<p><a href=\"https://www.theringer.com/2022/7/26/23278361/crypto-crash-part-ii-packy-mccormick-debates-the-future-of-web3\">Plain English - Crypto Crash, Part II: Packy McCormick Debates the Future of Web3</a></p>\n<p><a href=\"https://github.com/readme/podcast/fred-schott\">ReadME S2E3: Giving 110% in the right place at the right time</a></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://joylere.substack.com/p/imposters\">Imposters</a> - <em>joylere.substack.com</em></p>\n<p><a href=\"https://thenextweb.com/news/imposter-syndrome-as-a-developer\">How I dealt with imposter syndrome as a newbie developer</a> - <em>thenextweb.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>The Gaslight Anthem - Handwritten</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Lf-rEslupnY\" title=\"The Gaslight Anthem - Handwritten\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/22/reading-list/",
      "url": "https://kpwags.com/posts/2022/07/22/reading-list/",
      "title": "Reading List: July 16 - July 22",
      "content_html": "\n\t\t<p>Some articles about C#, SQL and looking at local newspapers.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://jeremybytes.blogspot.com/2022/07/nullability-in-c-what-it-is-and-what-it.html\">Nullability in C# - What It Is and What It Is Not</a> - <em>jeremybytes.blogspot.com</em></p>\n<p><a href=\"https://blog.plover.com/prog/git/tips-2.html\">Things I wish everyone knew about Git (Part II)</a> - <em>blog.plover.com</em></p>\n<p><a href=\"https://brandur.org/soft-deletion\">Soft Deletion Probably Isn't Worth It</a> - <em>brandur.org</em></p>\n<p><a href=\"https://steven-giesel.com/blogPost/3992a289-4cc9-460c-b484-0cc137cccafa\">Abstract Class vs Interface</a> - <em>steven-giesel.com</em></p>\n<p><a href=\"https://jvns.ca/blog/2022/07/20/pseudoterminals/\">What happens when you press a key in your terminal?</a> - <em>jvns.ca</em></p>\n<p><a href=\"https://una.im/style-queries/\">Style Queries</a> - <em>una.im</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.ctrl.blog/entry/teamviewer-font-privacy.html\">TeamViewer installs suspicious font only useful for web fingerprinting</a> - <em>ctrl.blog</em></p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.marketplace.org/2022/07/19/supermarket-design-emotions-impulse-buys/\">It's hard to keep costs down at the supermarket, thanks to store design and our emotions</a> - <em>marketplace.org</em></p>\n<h2>🎧 Podcasts</h2>\n<p><a href=\"https://www.dotnetrocks.com/default.aspx?ShowNum=1759\">.NET Rocks #1759: Code That Fits in Your Head</a></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://defector.com/this-is-not-the-way-to-help-local-news/\">This is Not the Way to Help Local News</a> - 💰 - <em>defector.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>Gregor Barnett - Don't Go Throwing Roses in My Grave</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/liHH9TIY-Ik\" title=\"Gregor Barnett - Don't Go Throwing Roses in My Grave\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/18/chats-with-kent/",
      "url": "https://kpwags.com/posts/2022/07/18/chats-with-kent/",
      "title": "Chats with Kent",
      "content_html": "\n\t\t<p>I've been finally catching up on my (all-too-massive) podcast backlog and figured I'd place a shout-out to the podcast Chats with Kent.</p>\n<p>For fellow devs out there, I'd recommend subscribing to and listening to it. I'm currently on the 4th season and he has some great chats with various developers with a wide variety of backgrounds.</p>\n<p>Go <a href=\"https://kentcdodds.com/chats/04\">give it a listen</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/15/reading-list/",
      "url": "https://kpwags.com/posts/2022/07/15/reading-list/",
      "title": "Reading List: July 9 - July 15",
      "content_html": "\n\t\t<p>This week we look at a lot of web dev articles as well as some amazing photos from the JWST.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://blog.jim-nielsen.com/2022/resiliency-in-the-webs-layers/\">The Resiliency in the Web's Layers</a> - <em>blog.jim-nielsen.com</em></p>\n<p><a href=\"https://ishadeed.com/article/figma-css/\">The CSS Behind Figma</a> - <em>ishadeed.com</em></p>\n<p><a href=\"https://brandur.org/fragments/code-database-vs-app\">Code in database vs. code in application</a> - <em>brandur.org</em></p>\n<p><a href=\"https://jakearchibald.com/2022/img-aspect-ratio\">Avoiding &lt;img&gt; layout shifts: aspect-ratio vs width &amp; height attributes</a> - <em>jakearchibald.com</em></p>\n<p><a href=\"https://www.smashingmagazine.com/2022/07/look-remix-differences-next/\">A Look At Remix And The Differences With Next.js</a> - <em>smashingmagazine.com</em></p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.nytimes.com/2022/07/12/business/media/evan-williams-leaving-medium.html\">Evan Williams Is Stepping Down as C.E.O. of Medium</a> - 💰 - <em>nytimes.com</em></p>\n<h2>🔬 Science</h2>\n<p><a href=\"https://www.nasa.gov/webbfirstimages\">First Images from the James Webb Space Telescope</a> - <em>nasa.gov</em></p>\n<h2>🎧 Podcasts</h2>\n<p><a href=\"https://darknetdiaries.com/episode/101/\">Darknet Diaries 101: Lotería</a></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://www.npr.org/sections/money/2022/07/12/1110510488/lean-out-employees-are-accepting-lower-pay-in-order-to-work-remotely\">Lean Out: Employees Are Accepting Lower Pay In Order To Work Remotely</a> - <em>npr.org</em></p>\n<p><a href=\"https://www.curbed.com/2022/07/boy-scouts-open-space-for-sale.html\">The Great Boy Scouts Land Sell-Off</a> - <em>curbed.com</em></p>\n<p><a href=\"https://www.economist.com/international/2022/07/07/covid-learning-loss-has-been-a-global-disaster\">Millions of Wasted Minds</a> - 💰 - <em>economist.com</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>Dave Hause - Sandy Sheets</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/nFTpnWUl_WY\" title=\"Dave Hause - Sandy Sheets\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/08/reading-list/",
      "url": "https://kpwags.com/posts/2022/07/08/reading-list/",
      "title": "Reading List: July 2 - July 8",
      "content_html": "\n\t\t<p>This week we look at a lot of CSS web development and some background on GoldenEye for the Nintendo 64.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://blog.jim-nielsen.com/2022/unlocked-possibilities-of-has-selector/\">The Unlocked Possibilities of the :has() Selector</a> - blog.jim-nielsen.com</p>\n<p><a href=\"https://steven-giesel.com/blogPost/a252f2da-1ae8-4449-9b5f-43657308eabb\">SOLID Principles in C#</a> - steven-giesel.com</p>\n<p><a href=\"https://blog.mayank.co/the-case-for-using-sass-in-2022\">The case for using Sass in 2022</a> - blog.mayank.co</p>\n<p><a href=\"https://yatil.net/blog/text-overflow-ellipsis-harmful\">Text-overflow: ellipsis considered harmful</a> - yatil.net</p>\n<p><a href=\"https://rubikscode.net/2022/06/20/c-11-top-5-features-in-the-new-c-version/\">C# 11 - Top 5 Features in the new C# Version</a> - rubikscode.net</p>\n<p><a href=\"https://daily-dev-tips.com/posts/using-the-native-web-share-javascript-api/\">Using the native web share JavaScript API</a> - daily-dev-tips.com</p>\n<p><a href=\"https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-15-release/\">Windows Terminal Preview 1.15 Release</a> - devblogs.microsoft.com</p>\n<p><a href=\"https://www.miriamsuzanne.com/2022/07/04/body-margin-8px/\">Body Margin 8px</a> - miriamsuzanne.com</p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.economist.com/finance-and-economics/2022/07/05/cryptos-last-man-standing\">Crypto's last man standing</a> - 💰 - economist.com</p>\n<p><a href=\"https://www.nytimes.com/2022/07/07/technology/tech-start-up-funding.html\">Start-Up Funding Falls the Most It Has Since 2019</a> - 💰 - nytimes.com</p>\n<h2>🔬 Science</h2>\n<p><a href=\"https://www.nytimes.com/2022/07/02/science/webb-telescope-exoplanets-atmosphere.html\">Webb Telescope Will Look for Signs of Life Way Out There</a> - 💰 - nytimes.com</p>\n<h2>🎧 Podcasts</h2>\n<p><a href=\"https://www.jordanharbinger.com/dan-carlin-apocalyptic-moments-in-hardcore-history/\">Jordan Harbinger #560: Dan Carlin | Apocalyptic Moments in Hardcore History</a></p>\n<h2>🎒 Everything Else</h2>\n<p><a href=\"https://mattgemmell.com/theres-no-perfect-time/\">There's no perfect time</a> - mattgemmell.com</p>\n<p><a href=\"https://arstechnica.com/gaming/2022/07/book-excerpt-anti-game-design-and-the-making-of-goldeneye-007/\">Excerpt: How the designers of GoldenEye 007 made use of &quot;Anti-Game Design&quot;</a> - arstechnica.com</p>\n<p><a href=\"https://world.hey.com/rjs/21-prototyping-to-learn-726e2d3e\">Prototyping to Learn</a> - world.hey.com</p>\n<p><a href=\"https://annehelen.substack.com/p/so-youve-decided-to-bungle-your-companys\">So You've Decided to Bungle Your Company's Flexible Work Plan</a> - annehelen.substack.com</p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>Orchestral Suite from The Inner Light</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/eujM5uoo-l0\" title=\"Orchestral Suite from The Inner Light\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/05/june-check-in/",
      "url": "https://kpwags.com/posts/2022/07/05/june-check-in/",
      "title": "June Check-In",
      "content_html": "\n\t\t<p>I can't believe the first half of 2022 is already over. Another month has come and gone and I'm not sure what I have to show for it.</p>\n<h2>Recovering from COVID</h2>\n<p>At the end of May, I ended up getting COVID as I mentioned. Thanks to the vaccine and booster, it wasn't too bad, but I've struggled to get back into the swing of fitness. I was in a nice groove, but now I feel a little &quot;off&quot;. Not physically, just mentally. Between work &amp; hockey, I feel like I haven't had the time to get my normal lifting sessions in. I didn't run as much as I would've hoped as I'm still getting my lung capacity back. I'm not rushing into anything as I start training for the marathon next month. Figure ease myself back into it.</p>\n<p>The other downside of COVID throwing me for a loop is that I'm also figuring this will probably be my best chance to hit my deadlift goal and my goal of hitting the 1,000 lbs. club. I'm hoping to go for 365 on squats and 400 on deadlifts. That, combined with my 235 on bench press will give me 1,000 lbs. on the nose. Maybe I'll be able to try to work up bench press to 250 like I wanted in December, but I'm not holding my breath. I already hit my squats goal of 350, so if I can hit 400 on deadlifts, and 1,000 between bench press, squats &amp; deadlifts this year, I'll be quite happy.</p>\n<h2>The Re-Design</h2>\n<p>At the beginning of the month, I released a redesign of the blog. I ended up changing the color and slightly tweaked the layouts. I decided I wanted the home page to have a little more pop. I like the way it turned out. I ended up cleaning up some of the code I used to display what <a href=\"https://kpwags.com/current\">I'm currently up to</a>, the <a href=\"https://kpwags.com/bookshelf\">bookshelf</a> and <a href=\"https://kpwags.com/movies\">movies</a> pages as well. Still got a little bit to clean up here and there, but I like it so far.</p>\n<p>I'm hoping to introduce a few tweaks to make posting a little smoother and easier over the next month.</p>\n<h2>New York City</h2>\n<p>I ended up going to New York City mid-month for my birthday. The weather was nice and it wasn't too hot. Not too much to report, though I was able to go to the Morgan Library and Museum and that was incredible. So many old and classic books, including two Gutenberg Bibles on display.</p>\n<h2>Brand New Desktop</h2>\n<p>After going back and forth for the last few months, I finally ended up deciding to build a brand new PC. I kept my graphics card from my old one as well as the SSD, but got a new CPU, RAM &amp; case. I ended up going with an AMD Ryzen 7 5800X CPU and bumped my RAM up to 32 GB. Took the plunge and went with Windows 11 as well. No complaints so far. Figure I should be good with PC gaming for a while. I can upgrade the graphics card later down the line.</p>\n<h2>Monthly Roundup</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Only ran a little over 17 miles this month. COVID recovery and the heat limited me a bit.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting:</strong> Not much to report, getting back into the swing of it for my last cycle prior to the marathon.</p>\n<p><strong>📚 Reading:</strong></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/born-a-crime-stories-from-a-south-african-childhood/9780399588198\" target=\"_blank\" rel=\"noreferrer nofollow\">Trevor Noah - Born a Crime</a></li>\n<li><a href=\"https://bookshop.org/books/project-hail-mary/9780593135204\" target=\"_blank\" rel=\"noreferrer nofollow\">Andy Weir - Project Hail Mary</a></li>\n<li><a href=\"https://www.manning.com/books/unit-testing\" target=\"_blank\" rel=\"noreferrer nofollow\">Unit Testing Principles, Practices, and Patterns</a> - Continued reading this.</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Started up <a href=\"https://kpwags.com/posts/2022/06/03/reading-list\">my</a> <a href=\"https://kpwags.com/posts/2022/06/10/reading-list\">weekly</a> <a href=\"https://kpwags.com/posts/2022/06/24/reading-list\">reading</a> <a href=\"https://kpwags.com/posts/2022/07/01/reading-list\">posts</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/07/01/mocking-react-router-and-useparams\">mocking useParams when using React Router</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li><a href=\"https://www.bungie.net/7/en/Destiny/WitchQueen\" target=\"_blank\" rel=\"noreferrer nofollow\">Destiny 2</a></li>\n<li><a href=\"https://www.ea.com/games/starwars/battlefront/star-wars-battlefront-2\" target=\"_blank\" rel=\"noreferrer nofollow\">Star Wars Battlefront II</a></li>\n<li><a href=\"https://worldofwarcraft.com/en-us/wowclassic\" target=\"_blank\" rel=\"noreferrer nofollow\">WoW: Burning Crusade Classic</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/01/reading-list/",
      "url": "https://kpwags.com/posts/2022/07/01/reading-list/",
      "title": "Reading List: June 25 - July 1",
      "content_html": "\n\t\t<p>Didn't get to much reading this week, but a little bit on CSS, Apple's issues with WebKit and iOS, and women and grunge.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻Software Development</h2>\n<p><a href=\"https://swyx.io/the-end-of-localhost\">The End of Localhost</a> - Developing on our local machines might not be as common as it is now <span className=\"domain-name\">(swyx.io)</span></p>\n<p><a href=\"https://sprucecss.com/blog/writing-better-css\">Writing Better CSS</a> - There is no &quot;one size fits all&quot; method for dealing with CSS, but any ideas to improve is welcome. <span className=\"domain-name\">(sprucecss.com)</span></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://infrequently.org/2022/06/apple-is-not-defending-browser-engine-choice/\">Apple Is Not Defending Browser Engine Choice</a> - I am an iOS user and even I agree Apple should open up iOS to different browser engines. <span className=\"domain-name\">(infrequently.org)</span></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://longreads.com/2022/06/29/the-women-who-built-grunge/\">The Women Who Built Grunge</a> - They've been sadly long buried beneath men. <span className=\"domain-name\">(longreads.com)</span></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>Deaf Havana - Boston Square</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/vfGZZJnoJ0U\" title=\"Deaf Havana - Boston Square\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/07/01/mocking-react-router-and-useparams/",
      "url": "https://kpwags.com/posts/2022/07/01/mocking-react-router-and-useparams/",
      "title": "Mocking React Router and useParams",
      "content_html": "\n\t\t<p>One of the things I needed to do recently was write unit tests for one of the pages of Digital Family Cookbook where I pull a value from a query parameter in the URL. I ended up having some trouble with it so I figured I'd share what I did to get it working.</p>\n<p>First, let's look at the component. In the component, I'm looking to get the recipe's ID from the URL and then query the API to get the recipe data. The URL is formatted like <code>/recipes/view/:id</code> where <code>:id</code> indicates the recipe's ID. An actual URL would be <code>/recipes/view/25</code>.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> useParams <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-router'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> id <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">useParams</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">fetchRecipe</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>id<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setErrorMessage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Error loading recipe'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">setPageState</span><span class=\"token punctuation\">(</span>PageState<span class=\"token punctuation\">.</span>Error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>data<span class=\"token punctuation\">,</span> error<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Api<span class=\"token punctuation\">.</span><span class=\"token generic-function\"><span class=\"token function\">Get</span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;</span>Recipe<span class=\"token operator\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">recipes/get?id=</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setErrorMessage</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">setPageState</span><span class=\"token punctuation\">(</span>PageState<span class=\"token punctuation\">.</span>Error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">setRecipe</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">setPageState</span><span class=\"token punctuation\">(</span>PageState<span class=\"token punctuation\">.</span>Ready<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>In the code, I use the <code>useParams()</code> hook to get the ID and I use it in the <code>fetchRecipe()</code> function to query the API.</p>\n<p>This worked well, but I also needed to write unit tests for this which means that I need to be able to get the ID when there isn't a URL to pull from. Enter some Jest magic.</p>\n<pre class=\"language-typescript\" tabindex=\"0\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> Router <span class=\"token keyword\">from</span> <span class=\"token string\">'react-router'</span><span class=\"token punctuation\">;</span>\n\njest<span class=\"token punctuation\">.</span><span class=\"token function\">mock</span><span class=\"token punctuation\">(</span><span class=\"token string\">'react-router'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token operator\">...</span>jest<span class=\"token punctuation\">.</span><span class=\"token function\">requireActual</span><span class=\"token punctuation\">(</span><span class=\"token string\">'react-router'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    useParams<span class=\"token operator\">:</span> jest<span class=\"token punctuation\">.</span><span class=\"token function\">fn</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'&lt;ViewRecipe />'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">test</span><span class=\"token punctuation\">(</span><span class=\"token string\">'It renders the recipe'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        jest<span class=\"token punctuation\">.</span><span class=\"token function\">spyOn</span><span class=\"token punctuation\">(</span>Router<span class=\"token punctuation\">,</span> <span class=\"token string\">'useParams'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">mockReturnValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token string\">'1'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">renderWithRouter</span><span class=\"token punctuation\">(</span>\n            <span class=\"token operator\">&lt;</span>MockAppProvider user<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>MockUserAccount<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span>ViewRecipe <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>MockAppProvider<span class=\"token operator\">></span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">await</span> <span class=\"token function\">waitForElementToBeRemoved</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> screen<span class=\"token punctuation\">.</span><span class=\"token function\">queryByText</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Loading...'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>screen<span class=\"token punctuation\">.</span><span class=\"token function\">queryByText</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">Test Recipe 01</span><span class=\"token regex-delimiter\">/</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toBeInTheDocument</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>At the top we setup the mock for <code>react-router</code>. We tell it to use the actual module, but then replace the <code>useParams()</code> hook with a mock function since we need to adjust what it returns.</p>\n<p>In the test, we then tell jest to spy on the router component and watch for <code>useParams()</code> to be called. The spy will then pay attention to if and when it is called, and if it is, return the mocked value of <code>{ id: '1' }</code>.</p>\n<p>Now when the <code>ViewRecipe</code> component is rendered the <code>useParams()</code> hook will return an ID of 1 for the test. The cool part about this is that we can set the spy in every test to return a different value for the test. I use <a href=\"https://kpwags.com/posts/2021/02/03/unit-testing-with-msw\">Mock Service Worker</a> to mock my API calls, so the different ID values can trigger different data returns.</p>\n<p>So there you go, a nice easy way to write tests when your components rely on React Router and the <code>useParams()</code> hook.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-07-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/06/24/reading-list/",
      "url": "https://kpwags.com/posts/2022/06/24/reading-list/",
      "title": "Reading List: June 11 - June 24",
      "content_html": "\n\t\t<p>Due to my trip last week to New York City, this list is a little bit longer.</p>\n<div class=\"reading-log\"></div>\n<h2>👨🏼‍💻 Software Development</h2>\n<p><a href=\"https://alistapart.com/article/mobile-first-css-is-it-time-for-a-rethink/\"><strong>Mobile-First CSS: Is it Time for a Rethink</strong></a> - I've been plenty guilty of thinking desktop first even though I know it is often harder. Maybe it's time for me to rethink how I start my designs and layouts. <em>(alistapart.com)</em></p>\n<p><a href=\"https://www.barbarianmeetscoding.com/notes/css-modules/\"><strong>CSS Modules</strong></a> - I opted for a mix of basic CSS and styled components for my blog. Maybe I'll end up revisiting this. This is a good overview of CSS Modules. <em>(barbarianmwetscoding.com)</em></p>\n<p><a href=\"https://nolanlawson.com/2022/06/09/the-collapse-of-complex-software/\"><strong>The Collapse of Complex Software</strong></a> - Interesting take on how code and legacy systems can grow and grow and then implode <em>(nolanlawson.com)</em></p>\n<p><a href=\"https://stephenroughley.com/2022/06/09/explaining-typescript/\"><strong>Explaining TypeScript</strong></a> - Having started using TypeScript, it's now kind of painful to ever write JS nowadays. <em>(stephenroughley.com)</em></p>\n<p><a href=\"https://timdeschryver.dev/blog/maybe-its-time-to-rethink-our-project-structure-with-dot-net-6\"><strong>Maybe it's time to rethink our project structure with .NET 6</strong></a> - I'll admit I haven't looked deeply at the new minimal API functionality, but this looks interesting. <em>(timdeschryver.dev)</em></p>\n<p><a href=\"https://blog.ploeh.dk/2022/06/13/some-thoughts-on-naming-tests/\"><strong>Some thoughts on naming tests</strong></a> - Test names can make understanding what tests are written to verify much easier. <em>(blog.ploeh.dk)</em></p>\n<p><a href=\"https://devblogs.microsoft.com/typescript/announcing-typescript-4-8-beta\"><strong>Announcing TypeScript 4.8 Beta</strong></a> - Info on what to expect in the next version of TypeScript <em>(devblogs.microsoft.com)</em></p>\n<p><a href=\"https://github.blog/2022-06-10-how-we-think-about-browsers/\"><strong>How we think about browsers</strong></a> - Interesting take on supporting the different browsers and versions at GitHub. <em>(github.blog)</em></p>\n<p><a href=\"https://www.youtube.com/watch?v=860d8usGC0o\"><strong>Have Single-Page Apps Ruined the Web?</strong></a> - Most of the dev work I've been doing has been building SPA using React. Interesting discussion on pros, cons, and what can be done to improve things. <em>(youtube.com)</em></p>\n<h2>🖥 Technology</h2>\n<p><a href=\"https://www.theverge.com/2022/6/10/23131029/mozilla-ad-blocking-firefox-google-chrome-privacy-manifest-v3-web-request\"><strong>Firefox and Chrome are Squaring Off Over Ad-Blocker Extensions</strong></a> - For the moment, I've switched back to Firefox as my default browser. I'm curious as to how other Chromium-based browsers will handle this change. <em>(theverge.com)</em></p>\n<p><a href=\"https://www.techdirt.com/2022/06/10/trumps-free-speech-social-network-truth-social-is-banning-people-for-truthing-the-truth-about-january-6-hearings/\"><strong>Trump's 'Free Speech' Social Network, Truth Social, Is Banning People For Truthing The Truth About January 6 Hearings</strong></a> - Color me shocked <em>(techdirt.com)</em></p>\n<p><a href=\"https://www.economist.com/leaders/2022/06/09/artificial-intelligences-new-frontier\"><strong>Artificial intelligence's new frontier</strong></a> - 💰 - AI is improving. <em>(economist.com)</em></p>\n<p><a href=\"https://blog.thunderbird.net/2022/06/revealed-thunderbird-on-android-plans-k9/\"><strong>Revealed: Our Plans For Thunderbird On Android</strong></a> - I'm not an Android user, but this looks like big news. I love Thunderbird on both Windows &amp; Linux. <em>(thunerbird.net)</em></p>\n<p><a href=\"https://blog.mozilla.org/en/products/firefox/firefox-rolls-out-total-cookie-protection-by-default-to-all-users-worldwide/\"><strong>Firefox rolls out Total Cookie Protection by default to all users worldwide</strong></a> - More privacy protection is always a good thing <em>(blog.mozilla.com)</em></p>\n<p><a href=\"https://www.theverge.com/2022/6/21/23177624/volvo-trucks-tests-hydrogen-fuel-cell-semi\"><strong>Volvo's commercial truck group is testing out hydrogen fuel cell semis</strong></a> - Still looks to be in its infancy and the infrastructure needs to be there, but any steps to get us off fossil fuels is a good thing. <em>(theverge.com)</em></p>\n<h2>📈 Business and Finance</h2>\n<p><a href=\"https://www.wsj.com/articles/how-to-stand-up-to-a-bear-market-11655477101\"><strong>How to Stand Up to a Bear Market</strong></a> - 💰 - Markets today are looking scary. <em>(wsj.com)</em></p>\n<p><a href=\"https://awealthofcommonsense.com/2022/06/how-long-does-it-take-for-stocks-to-bottom-in-a-bear-market/\"><strong>How Long Does it Take For Stocks to Bottom in a Bear Market?</strong></a> - Some thoughts given the current market <em>(awealthofcommonsense.com)</em></p>\n<p><a href=\"https://www.nytimes.com/2022/06/21/business/tesla-online-sales-dealerships.html\"><strong>Why You Might Buy Your Next Car Online</strong></a> - 💰 - There's something to be said for the convenience of online shopping...cars are getting to that point. <em>(nytimes.com)</em></p>\n<p><a href=\"https://www.marketplace.org/2022/06/22/the-minivan-is-kind-of-making-a-comeback-this-summer/\"><strong>The minivan is kind of making a comeback this summer</strong></a> - Not just for toting around kids anymore. Read the WSJ article <a href=\"https://www.wsj.com/articles/minivan-sales-prices-memorial-day-11653423051\">here</a>. <em>(marketplace.org)</em></p>\n<h2>🔬 Science</h2>\n<p><a href=\"https://www.bbc.com/news/science-environment-61744257\"><strong>James Webb Space Telescope hit by tiny meteoroid</strong></a> - Uh oh...looks like the damage was minimal thankfully. <em>(bbc.com)</em></p>\n<p><a href=\"https://www.independent.co.uk/space/nasa-shutting-down-voyager-50-years-b2104956.html\"><strong>Nasa starts shutting down Voyager after 50 years</strong></a> - It was bound to happen, but it's amazing they're still going after almost 50 years! <em>(independent.co.uk)</em></p>\n<h2>🎒 Miscellaneous</h2>\n<p><a href=\"https://matthiasott.com/notes/just-put-stuff-out-there\"><strong>Just Put Stuff Out There</strong></a> - I agree with Matthias here, not everything has to be perfect...just click <em><strong>publish</strong></em>! <em>(matthiasott.com)</em></p>\n<h2>🎵 A Song to Leave You With</h2>\n<h3>Will Varley - Weddings &amp; Wars</h3>\n<fit-vids>\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/jlAm40MvlcA\" title=\"Will Varley - Weddings & Wars\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"></iframe>\n</fit-vids>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-06-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/06/10/reading-list/",
      "url": "https://kpwags.com/posts/2022/06/10/reading-list/",
      "title": "Reading List: June 4 - June 10",
      "content_html": "\n\t\t<p>A little bit of everything this week from new features coming to .NET and Next.js, to working from home, and prediting the future.</p>\n<p>🧑🏼‍💻 <a href=\"https://www.telerik.com/blogs/build-2022-updates-aspnet-core-developers\"><strong>Build 2022 Updates for ASP.NET Core Developers</strong></a> - As a .NET developer, always keeping up with all the awesome features they're adding. <span className=\"domain-name\">(telerik.com)</span></p>\n<p>🧑🏼‍💻 <a href=\"https://nextjs.org/blog/layouts-rfc\"><strong>NEXT.js Layouts RFC</strong></a> - I'm excited to try this out when they release it. This blog is built on Next.js! <span className=\"domain-name\">(nextjs.org)</span></p>\n<p>🕵🏻‍♂️ <a href=\"https://world.hey.com/dhh/employee-surveillance-software-is-managerial-bankruptcy-94e48a08\"><strong>Employee surveillance software is managerial bankruptcy</strong></a> - I'm a firm believer in trusting your employees to do their work. It's pretty obvious when they aren't, you don't need spyware to do it. <span className=\"domain-name\">(hey.com)</span></p>\n<p>🔮 <a href=\"https://www.techdirt.com/2022/04/05/techdirt-podcast-episode-316-predicting-the-future/\"><strong>Techdirt Podcast #316: Predicting the Future</strong></a> - Interesting discussion on making predictions about the future and getting better at it. <span className=\"domain-name\">(techdirt.com)</span></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-06-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/06/03/reading-list/",
      "url": "https://kpwags.com/posts/2022/06/03/reading-list/",
      "title": "Reading List: May 28 - June 3",
      "content_html": "\n\t\t<p>Spent a bit of time this weekend looking at CSS and web development. Pixels, rems, typography &amp; more!</p>\n<p>🧑🏼‍💻 <a href=\"https://www.joshwcomeau.com/css/surprising-truth-about-pixels-and-accessibility/\"><strong>The Surprising Truth About Pixels and Accessibility</strong></a> - Josh does a great job in this article talking about when you should use rems and when you should use pixels, and why. <span className=\"domain-name\">(joshwcomeau.com)</span></p>\n<p>🅰 <a href=\"https://www.smashingmagazine.com/2022/01/modern-fluid-typography-css-clamp/\"><strong>Modern Fluid Typography Using CSS Clamp</strong></a> - I've been wanting to improve the typography on what I design and develop. This can help. <span className=\"domain-name\">(smashingmagazine.com)</span></p>\n<p>🤔 <a href=\"https://benfrain.com/where-the-f-is-native-css-nesting/\"><strong>Where the f*ck is native CSS nesting?</strong></a> - I'd like to know as well. Hopefully soon as it'd be nice to clean up some CSS. <span className=\"domain-name\">(benfrain.com)</span></p>\n<p>💾 <a href=\"https://chriscoyier.net/2022/05/31/whats-in-a-monorepo/\"><strong>What's in a monorepo</strong></a> - A nice bit talking about the benefits of using a monorepo. <span className=\"domain-name\">(chriscoyier.net)</span></p>\n<p>🎚 <a href=\"https://www.bram.us/2022/05/25/dark-mode-toggles-should-be-a-browser-feature/\"><strong>Dark Mode Toggles Should be a Browser Feature</strong></a> - I agree with this. It would be nice as a developer to not have to duplicate code to support both the browser being set to dark mode and the user selecting something different than what the browser is set to. <span className=\"domain-name\">(bram.us)</span></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-06-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/06/01/may-check-in/",
      "url": "https://kpwags.com/posts/2022/06/01/may-check-in/",
      "title": "May Check-In",
      "content_html": "\n\t\t<p>May was an eventful month. I didn't do much because I was exposed to COVID…and then got COVID later in the month. Needless to say, the month could have gone better, but it could have been far worse.</p>\n<h2>COVID</h2>\n<p>Getting the COVID part over with…early in the month, my wife and I ended up getting exposed to COVID. We opted to play it safe and isolated ourselves up in the house for 3-4 days to make sure we didn't have it or spread it to others. We never got it…then later in the month happened. I got it, presumably from hockey, and while I holed myself up in the basement trying to protect my wife from it, failed at that too. While certainly not pleasant, both of us are fine now and thankfully only had to deal with mild symptoms. Being vaccinated and boosted certainly helped keep us out of the hospital and alive.</p>\n<h2>Data &amp; Office Clean-Up</h2>\n<p>Earlier in the month I decided to delve back into Linux by putting the latest version of Fedora on my desktop to dual boot. I was hoping to extend its life a little bit, but even with Fedora, it is seemingly a little on the sluggish side. I'll have to play around with it a little bit to see if I can figure out what's going on. It was beneficial though because it allowed me to pull the data off my old server's hard drives. I used to run a file server on an old desktop computer. Sadly it died and all my data was just sitting around on the hard drives. I recently bought a Synology NAS and spent the better part of a weekend pulling data off the old drives and put them onto my NAS. I have to do some organization, but at least the data is now accessible.</p>\n<h2>Fitness News</h2>\n<p>I also finally made the decision to run the 2022 Philadelphia Marathon. I've been going back and forth on it, and finally decided to run it in an attempt to run a sub-5 hour marathon. I'll have to trim 15 minutes from my 2015 time, but I think it's doable. Official training starts in August, but I'm gonna try to slowly up the distance prior.</p>\n<p>I also ended up hitting new PRs on both deadlifts and squats. Managed 385 lbs. on deadlifts, and hit my 350 lbs. goal on squats. Yay me! I ended up stalling on bench press so hopefully I can get that going again in June. Want to try to hit my goals by the time marathon training kicks in.</p>\n<h2>Stage Fright</h2>\n<p>I volunteered to give a presentation on unit testing to my company's development department. I was nervous as all get-out, but managed to do it. Probably could've done a little better, but it didn't go bad.</p>\n<h2>Monthly Roundup</h2>\n<p><strong>🏃🏼‍♂️ Running &amp; Biking</strong></p>\n<ul>\n<li><strong>Running:</strong> Only ran a little over 23 miles this month.</li>\n<li><strong>Biking:</strong> Nope</li>\n</ul>\n<p><strong>🏋🏼‍♂️ Lifting:</strong> Ended up setting new PRs on both deadlifts (385 lbs.) &amp; squats (350 lbs.)</p>\n<p><strong>📚 Reading:</strong></p>\n<ul>\n<li><a href=\"https://bookshop.org/books/the-passion-economy-the-new-rules-for-thriving-in-the-twenty-first-century/9780804172776\" target=\"_blank\" rel=\"noreferrer nofollow\">The Passion Economy</a> - Finished this one. It was not what I was expecting, but some interesting stories about making it in today's economy.</li>\n<li><a href=\"https://www.manning.com/books/unit-testing\" target=\"_blank\" rel=\"noreferrer nofollow\">Unit Testing Principles, Practices, and Patterns</a> - Continued reading this.</li>\n</ul>\n<p><strong>✍🏻 Writing</strong></p>\n<ul>\n<li>Started up my <a href=\"https://kpwags.com/posts/2022/05/13/reading-list\">weekly</a> <a href=\"https://kpwags.com/posts/2022/05/20/reading-list\">reading</a> <a href=\"https://kpwags.com/posts/2022/05/27/reading-list\">posts</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/05/12/taking-control-of-your-content\">taking control of your content</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/05/29/better-sql-update-stored-procedures\">better SQL update stored procedures</a></li>\n</ul>\n<p><strong>🎮 Gaming</strong></p>\n<ul>\n<li><a href=\"https://www.bungie.net/7/en/Destiny/WitchQueen\" target=\"_blank\" rel=\"noreferrer nofollow\">Destiny 2</a> - Getting back into it</li>\n<li><a href=\"https://www.nintendo.com/store/products/super-mario-odyssey-switch/\" target=\"_blank\" rel=\"noreferrer nofollow\">Super Mario Odyssey</a> - Picked up a new Nintendo Switch and this.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-06-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/29/better-sql-update-stored-procedures/",
      "url": "https://kpwags.com/posts/2022/05/29/better-sql-update-stored-procedures/",
      "title": "Better SQL Update Stored Procedures",
      "content_html": "\n\t\t<p>I'm still surprised it took me so long to figure this out. When I have been creating a SQL update stored procedure, I often ended up creating multiple ones if I was concerned about only updating a subset of the fields of a table. I've finally found a better way to do it.</p>\n<p>Suppose you have a recipe table with the following columns.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/BJV46yWP4M-216.webp 216w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/BJV46yWP4M-216.gif 216w\" /><img alt=\"A table representing a recipe laying out the following columns: RecipeId as INT, Name as VARCHAR, Description as VARCHAR, Source as VARCHAR, Time as INT, Ingredients as VARCHAR, Direction as VARCHAR\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/BJV46yWP4M-216.jpeg\" width=\"216\" height=\"142\" /></picture></p>\n<p>I used to write the update stored procedure like this</p>\n<pre class=\"language-sql\" tabindex=\"0\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">PROCEDURE</span> <span class=\"token punctuation\">[</span>dto<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>UpdateRecipe<span class=\"token punctuation\">]</span>\n    <span class=\"token variable\">@RecipeId</span> <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Name</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Description</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">3000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Source</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Time</span> <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Ingredients</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span>MAX<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Directions</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span>MAX<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">AS</span>\n<span class=\"token keyword\">BEGIN</span>\n    <span class=\"token keyword\">UPDATE</span> <span class=\"token punctuation\">[</span>dto<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span> <span class=\"token keyword\">SET</span>\n            <span class=\"token punctuation\">[</span>Name<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@Name</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Description<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@Description</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Source<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@Source</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span><span class=\"token keyword\">Time</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@Time</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Ingredients<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@Ingredients</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Directions<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@Directions</span>\n    <span class=\"token keyword\">WHERE</span>\n            <span class=\"token punctuation\">[</span>RecipeId<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@RecipeId</span>\n<span class=\"token keyword\">END</span>\nGO</code></pre>\n<p>What made this difficult was that you had to pass in each field and can't call the stored procedure missing any parameters. Sure you could give some default values, but then your parameters' default values might overwrite values you really wanted to keep.</p>\n<p>Now, I found a better way!</p>\n<pre class=\"language-sql\" tabindex=\"0\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">PROCEDURE</span> <span class=\"token punctuation\">[</span>dto<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>UpdateRecipe<span class=\"token punctuation\">]</span>\n    <span class=\"token variable\">@RecipeId</span> <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Name</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">NULL</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Description</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">3000</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">NULL</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Source</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">NULL</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Time</span> <span class=\"token keyword\">INT</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">NULL</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Ingredients</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span>MAX<span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">NULL</span><span class=\"token punctuation\">,</span>\n    <span class=\"token variable\">@Directions</span> <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span>MAX<span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">NULL</span>\n<span class=\"token keyword\">AS</span>\n<span class=\"token keyword\">BEGIN</span>\n    <span class=\"token keyword\">UPDATE</span> <span class=\"token punctuation\">[</span>dto<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span> <span class=\"token keyword\">SET</span>\n            <span class=\"token punctuation\">[</span>Name<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> ISNULL<span class=\"token punctuation\">(</span><span class=\"token variable\">@Name</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Name<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Description<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> ISNULL<span class=\"token punctuation\">(</span><span class=\"token variable\">@Description</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Description<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Source<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> ISNULL<span class=\"token punctuation\">(</span><span class=\"token variable\">@Source</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Source<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span><span class=\"token keyword\">Time</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> ISNULL<span class=\"token punctuation\">(</span><span class=\"token variable\">@Time</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span><span class=\"token keyword\">Time</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Ingredients<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> ISNULL<span class=\"token punctuation\">(</span><span class=\"token variable\">@Ingredients</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Ingredients<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">[</span>Directions<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> ISNULL<span class=\"token punctuation\">(</span><span class=\"token variable\">@Directions</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>Recipe<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>Directions<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">WHERE</span>\n            <span class=\"token punctuation\">[</span>RecipeId<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token variable\">@RecipeId</span>\n<span class=\"token keyword\">END</span>\nGO</code></pre>\n<p>By having each parameter default to <em>null</em>, we can then make use of the <code>ISNULL(value, value_if_null)</code> function. For those unfamiliar, the <code>ISNULL</code> function takes 2 arguments. The first argument is the value you want to use. The function will check to see if it is <em>null</em>. If it is not null, it will return that value. If it is NULL, then it will return the second argument as the value.</p>\n<p>What that means for the procedure is that we can now pass in any subset of parameters we need to, save for <code>RecipeId</code> (the primary key) and it will update the table leaving the values not passed to the stored procedures untouched.</p>\n<p>The downside is that this only works with Microsoft SQL Server, but since that's what I primarily use, it works out for me. For those using MySQL, you can still use the <code>ISNULL</code> function, but it only takes 1 argument and will return 1 (true) or 0 (false) if the value is <em>null</em>. You can add that to an IF statement, but it's not quite as clean.</p>\n<p>The more you write code, the more you learn!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/27/reading-list/",
      "url": "https://kpwags.com/posts/2022/05/27/reading-list/",
      "title": "Reading List: May 21 - May 27",
      "content_html": "\n\t\t<p>I unfortunately was dealing with COVID this week, so I didn't have a lot of energy to read.</p>\n<p>🌾 <a href=\"https://www.economist.com/leaders/2022/05/19/the-coming-food-catastrophe\"><strong>The coming food catastrophe</strong></a> - This is scary. Again, it's more negative results of Russia's invasion of Ukraine. <span className=\"domain-name\">(economist.com)</span></p>\n<p>🎧 <a href=\"https://www.techdirt.com/2022/05/17/techdirt-podcast-episode-320-elon-musk-doesnt-understand-twitter/\"><strong>Techdirt Podcast Episode 320: Elon Musk Doesn't Understand Twitter (Podcast)</strong></a> - A good discussion talking about Elon's purchase of Twitter and talking about how social media works. <span className=\"domain-name\">(techdirt.com)</span></p>\n<div class=\"reading-log\"></div>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/21/reached-my-goal-for-squats/",
      "url": "https://kpwags.com/posts/2022/05/21/reached-my-goal-for-squats/",
      "title": "Reached my Goal for Squats",
      "content_html": "\n\t\t<p>This afternoon I attempted squatting 350 lbs. and I'm happy to say I was able to do 2 reps!</p>\n<div class=\"video-container\">\n    <video controls=\"\" autoplay=\"false\" width=\"320\" height=\"480\">\n        <source src=\"https://kpwags.com/videos/posts/2022-05-21-reached-my-goal-for-squats/350squats.mp4\" type=\"video/mp4\" />\n         Not Supported\n    </video>\n</div>\n<p>Might have set too low of a goal, but since I'm planning on running a marathon in November, it's nice to be done a little sooner since I'll be busy running quite a bit starting in August.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/20/reading-list/",
      "url": "https://kpwags.com/posts/2022/05/20/reading-list/",
      "title": "Reading List: May 14 - May 20",
      "content_html": "\n\t\t<p>This week we're a little heavy reading about freedom of speech and content moderation.</p>\n<p><a href=\"https://meedan.com/blog/how-to-write-longform-git-commits-for-better-software-development\"><strong>How to write longform Git commits for better software development</strong></a> - I've been trying to do a better job of providing more details for my PRs and commits at work. This could be helpful. <span className=\"domain-name\">(meedan.com)</span></p>\n<p><a href=\"https://www.techdirt.com/2022/05/16/did-twitch-violate-texas-social-media-law-by-removing-mass-murderers-live-stream-of-his-killing-spree/\"><strong>Did Twitch Violate Texas' Social Media Law By Removing Mass Murderer's Live Stream Of His Killing Spree?</strong></a> - Content moderation is hard...especially when politicians want to get involved. And in the end, people are hurt. <span className=\"domain-name\">(techdirt.com)</span></p>\n<p><a href=\"https://www.marketplace.org/2022/05/17/industrial-standards-help-explain-russias-economic-motives-invading-ukraine/\"><strong>How industrial standards help explain Russia's economic motives for invading Ukraine</strong></a> - This is an interesting story talking about how a country's standards can help or hurt economies. <span className=\"domain-name\">(marketplace.org)</span></p>\n<p><a href=\"https://chriscoyier.net/2022/05/17/need-a-quick-diff/\"><strong>Need a Quick Diff</strong></a> - 2 Handy tools to quickly diff text or code files <span className=\"domain-name\">(chriscoyier.net)</span></p>\n<p><a href=\"https://www.bbc.com/worklife/article/20220517-the-death-of-mandatory-fun-in-the-office\"><strong>The death of 'mandatory fun' in the office</strong></a> - I'm generally not a fan of forced socialization. Team building activities certainly have their place, but forcing people to stay late on a Friday to avoid being called &quot;not a team player” isn't the way to go about doing it. <span className=\"domain-name\">(bbc.com)</span></p>\n<p><a href=\"https://www.techdirt.com/2022/05/20/if-you-think-free-speech-is-defined-by-your-ability-to-be-an-asshole-without-consequence-you-dont-understand-free-speech-but-you-remain-an-asshole/\"><strong>If You Think Free Speech Is Defined By Your Ability To Be An Asshole Without Consequence, You Don't Understand Free Speech (But You Remain An Asshole)</strong></a> - Too many people thing freedom of speech means freedom from consequences. <span className=\"domain-name\">(techdirt.com)</span></p>\n<p><a href=\"https://www.thebulwark.com/free-speech-ought-to-mean-more-than-mocking-trans-people/\"><strong>&quot;Free Speech&quot; Ought to Mean More than Mocking Trans People</strong></a> - Another good article talking out what free speech really is and why content moderation can be hard. It's always far more nuanced than can be easily described in a tweet. <span className=\"domain-name\">(thebulwark.com)</span></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/13/reading-list/",
      "url": "https://kpwags.com/posts/2022/05/13/reading-list/",
      "title": "Reading List: May 7 - May 13",
      "content_html": "\n\t\t<p>I've been going through my podcast backlog so this week has a lot of podcasts.</p>\n<p><a href=\"https://changelog.com/podcast/455\"><strong>Building Software for Yourself (Podcast)</strong></a> - I build a lot of things that I have no idea if anyone will ever see or use. I find it a great way to learn and improve my chops. <span className=\"domain-name\">(changelog.com)</span></p>\n<p><a href=\"https://www.economist.com/business/2022/05/09/welcome-to-the-era-of-the-hyper-surveilled-office\"><strong>Welcome to the Era of the Hyper-Surveilled Office</strong></a> - I'm glad I work for an employer who trusts us to get our work done and doesn't feel the need to constantly surveil us. I feel like a good manager will know when one of their reports is working and when they're not. I also take the privilege of working remotely seriously. <a href=\"https://kpwags.com/posts/2022/04/28/two-years-of-remote-work\">As I posted earlier</a>, I don't think I would ever want to go into an office again so not abusing the ability to work from home is important to me. <span className=\"domain-name\">(economist.com)</span></p>\n<p><a href=\"https://www.marketplace.org/shows/marketplace-tech/will-the-future-of-ai-repeat-past-injustices/\"><strong>Will the future of AI repeat past injustices (Podcast)?</strong></a> - Interesting podcast talking about how AI is taking advantage of poorer people in countries like Venezuela. <span className=\"domain-name\">(marketplace.org)</span></p>\n<p><a href=\"https://gimletmedia.com/shows/reply-all/emh36dn/178-i-am-not-a-bot\"><strong>I Am Not a Bot (Podcast)</strong></a> - I loved Team Fortress 2 and the bots ruin it. <span className=\"domain-name\">(gimletmedia.com)</span></p>\n<p><a href=\"https://www.techdirt.com/2021/09/07/techdirt-podcast-episode-297-future-libraries/\"><strong>The Future of Libraries (Podcast)</strong></a> - I love libraries and it saddens me that publishers are making it hard and expensive to enter and loan digital books. <span className=\"domain-name\">(techdirt.com)</span></p>\n<p><a href=\"https://freakonomics.com/podcast/all-you-need-is-nudge/\"><strong>All You Need is Nudge (Podcast)</strong></a> - Having just read <em>Nudge</em>, it was nice to hear more thoughts from Dr. Richard Thayler about the background behind it. <span className=\"domain-name\">(freakonomics.com)</span></p>\n<p><a href=\"https://blog.jim-nielsen.com/2022/ordering-css-delcarations/\"><strong>Ordering CSS Declarations</strong></a> - I've always tended to put my CSS declarations in groups based on what they style. This is an interesting take that might make me re-think how I order things. <span className=\"domain-name\">(jim-nielson.com)</span></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/12/taking-control-of-your-content/",
      "url": "https://kpwags.com/posts/2022/05/12/taking-control-of-your-content/",
      "title": "Taking Control of Your Content",
      "content_html": "\n\t\t<p>It's been almost 4 years since I got rid of my Instagram account which my last tie to the Facebook ecosystem. With the news of Elon Musk buying Twitter, I've rethought where my blog fits into my internet presence.</p>\n<p>Given that I suspect Twitter might very well take a turn for the worse with Elon at the helm, it reminds me of all the cases where platforms disappeared out from under users. Some are still around as a shell of themselves, others are gone completely.</p>\n<p>That's one of the many beauties of having your own site. The platform is yours. It will only disappear if you want it to. You have full control over it which means you can tinker with how you display your content. You can add more forms of content, you can change how it's displayed, the web is your oyster.</p>\n<p>I know I'm not the only one who believes this, <a href=\"https://chriscoyier.net/2022/04/29/rss-3/\" target=\"_blank\" rel=\"noreferrer nofollow\">Chris Coyier</a>, <a href=\"https://cagrimmett.com/thoughts/2022/04/26/why-blog/\" target=\"_blank\" rel=\"noreferrer nofollow\">Chuck Grimmet</a> and many others feel the same way. So go out there, build your blog and control your own content.</p>\n<p>Speaking of new content, have you checked out my new <a href=\"https://kpwags.com/photoblog\">photo blog</a>?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/06/reading-list/",
      "url": "https://kpwags.com/posts/2022/05/06/reading-list/",
      "title": "Reading List: April 29 - May 6",
      "content_html": "\n\t\t<p>I think I'm going to start this series of entries again. Trying to continue to share the interesting articles and stories I've read over the course of the week.</p>\n<p><a href=\"https://ofdollarsanddata.com/we-all-knew-this-would-happen/\"><strong>We All Knew This Would Happen</strong></a> - This is basically why I've stayed away from crypto. I feel like it's more speculative than anything else. I have a small brokerage fund where I invest in individual stocks, but 99% of my investments are in various different index funds. <span className=\"domain-name\">(ofdollarsanddata.com)</span></p>\n<p><a href=\"https://www.jackfranklin.co.uk/blog/working-with-react-and-the-web-platform/\"><strong>Why I don't miss React: a story about using the platform</strong></a> - I've been working heavily in React both at work and home. It's an interesting thought about the possibility of moving away from React and more to native browser APIs. <span className=\"domain-name\">(jackfranklin.co.uk)</span></p>\n<p><a href=\"https://www.smashingmagazine.com/2022/05/you-dont-need-ui-framework\"><strong>You Don't Need A UI Framework</strong></a> - Josh Comeau writes about some of the pitfalls of full UI frameworks such as Material UI. While I agree with him in many aspects, I think there's more to it and I believe they have their place. A framework can make it easier to handle re-inventing some the wheels with controls, or trying to unify the look and feel of a bunch of different 3rd party control libraries. While I like to build my own stuff sometimes to learn how to things work, there is something to be said for letting a polished library handle it. You still have to learn how to put it all together. <span className=\"domain-name\">(smashingmagazine.com)</span></p>\n<p><a href=\"https://cagrimmett.com/thoughts/2022/04/26/why-blog/\"><strong>Why Blog?</strong></a> - I'm not sure how many people read this, but Chuck nails a lot of the reasons why I still have my blog and try to continue writing. <span className=\"domain-name\">(cagrimmett.com)</span></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/05/02/april-check-in/",
      "url": "https://kpwags.com/posts/2022/05/02/april-check-in/",
      "title": "April Check-In",
      "content_html": "\n\t\t<p>April wasn't a terribly busy month for me. I spent a lot of it just hanging around the house working on my blog and side projects.</p>\n<p>I started the month by beating the Halo Infinite campaign. Despite the community's lackluster view of it, I mostly enjoyed it. Parts of it reminded me of FarCry 5, others definitely had the classic Halo feel. There were definitely some repetitive parts that probably could've been spiced up some, and maybe made the open world part a little more open, but I still enjoyed it. The story had some holes to it, but lived up to the game's name and left open parts for future expansions or games.</p>\n<p>Towards the end of April, <a href=\"https://kpwags.com/posts/2022/04/26/there-goes-the-neighborhood\">Elon Musk bought Twitter and that began me seriously reconsidering how much of my time I will spend there</a>. I haven't made any firm decision yet, but I did use that as an excuse to clean up some things on my blog. I had noticed some bugs so I spent some time fixing them. The main one was my RSS feed. I had properly built my blog to support MDX, but my RSS feed didn't know what to do with it and rendered custom components as if they were HTML components. You can imagine that didn't turn out the way it should have. I got that squared away for the most part. Styling isn't perfect in the feed, but the content is rendered properly. I might try to play around with it some in the hopes of getting feed readers to preview it better, but I'm also not sure how worth it the venture would be. I also ended up adding a font toggle in the footer to allow for users to switch between sans, serif &amp; monospaced fonts. Why? Because why not?</p>\n<h2>Monthly Roundup</h2>\n<p><strong>Running &amp; Biking</strong>: Still off the bike.</p>\n<ul>\n<li>Ran another 27 miles this month. Not bad given the rain and dealing with a hip injury from hockey.</li>\n<li>Biking...nada</li>\n</ul>\n<p><strong>Lifting</strong>: I ended up setting a new squats PR of 340 lbs. and broke through both my deadlifts and overhead press plateaus.</p>\n<p><strong>Reading</strong>:</p>\n<ul>\n<li><a href=\"https://bookshop.org/books/dark-pools-the-rise-of-the-machine-traders-and-the-rigging-of-the-u-s-stock-market/9780307887184\" target=\"_blank\" rel=\"noreferrer nofollow\">Dark Pools</a> - Finished this book. It was a good history of the rise of high frequency trading.</li>\n<li><a href=\"https://www.manning.com/books/unit-testing\" target=\"_blank\" rel=\"noreferrer nofollow\">Unit Testing Principles, Practices, and Patterns</a> - Started reading this in hopes that it will help me with a presentation I'm doing for work.</li>\n</ul>\n<p><strong>Writing</strong>:</p>\n<ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/04/26/there-goes-the-neighborhood\">Elon's takeover of Twitter</a></li>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/04/28/two-years-of-remote-work\">working from home for 2 years</a></li>\n</ul>\n<p><strong>Gaming:</strong></p>\n<ul>\n<li><a href=\"https://www.xbox.com/en-US/games/halo-infinite\" target=\"_blank\" rel=\"noreferrer nofollow\">Halo Infinite</a> - Beat it as mentioned above</li>\n<li><a href=\"https://www.bandainamcoent.com/games/elden-ring\" target=\"_blank\" rel=\"noreferrer nofollow\">Elden Ring</a> - Tried playing this. Just not my kind of game. Might try again at some point.</li>\n<li><a href=\"https://www.bungie.net/7/en/Destiny/WitchQueen\" target=\"_blank\" rel=\"noreferrer nofollow\">Destiny 2</a> - Picked up The Witch Queen and have been getting myself re-familiarized with it.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-05-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/04/28/two-years-of-remote-work/",
      "url": "https://kpwags.com/posts/2022/04/28/two-years-of-remote-work/",
      "title": "Two Years of Remote Work",
      "content_html": "\n\t\t<p>A little over two years ago, the world came to a screeching halt because of COVID-19. Myself, like many others started working from home to help curb the spread of the virus. While some have started to go back to the office on at least a hybrid basis, I am now 100% remote and loving it.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/h_2Oe3u94D-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/h_2Oe3u94D-1920.gif 1920w\" /><img alt=\"My work desk setup in my basement\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/h_2Oe3u94D-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>For the first 9 months, I was working at my old job and we just closed the office to keep everyone safe, but then in December 2020 I changed jobs to a position where I am fully remote with no expectation to go into the office. This is where I'm at now and I don't think I'd ever want to go back into the office again.</p>\n<p>At home, I feel more comfortable and generally more productive. It's a lot easier for me to get into a flow when I'm working on a task. I feel like there are less distractions and I can just put my head down and code. I have to be cognizant of not letting my Microsoft Teams notifications distract me too much, but other than that, I can still get my work done in a timely manner.</p>\n<p>I don't need to get into all the benefits as I'm sure many already know what they are. Lack of a commute as well as wear and tear on my car, ability to intermittently take care of small tasks like laundry, easier to exercise over lunch, the list goes on. I enjoy them all while still being productive. I wish more companies and managers could respect that.</p>\n<p>I would find it hard for myself to return to an office. If I have my way, I'll only work remotely from here on out.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-04-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/04/26/there-goes-the-neighborhood/",
      "url": "https://kpwags.com/posts/2022/04/26/there-goes-the-neighborhood/",
      "title": "There Goes the Neighborhood...",
      "content_html": "\n\t\t<p>There's been a lot of drama with Elon Musk purchasing Twitter, and overall, I don't think I'm happy with where things are likely to go on the platform.</p>\n<p>The more I've learned about Elon Musk, the less I think of him. The guy is smart, there's no doubt about that. With what he was able to do with PayPal, Tesla, &amp; SpaceX, he'd have to be. But through all of this, he's also shown his true colors and rubbing me, and a lot of others, the wrong way to put it mildly. This is one of the reasons I am not happy with him becoming the person in charge of Twitter.</p>\n<p>Over the last couple of months, he's spoken out about how he's upset with how Twitter handles their moderation. He's seemingly upset that Twitter labeled a few of his tweets as <em>false</em> and that they're too restrictive on speech. He says he views himself as a free speech absolutist and has been using this to go after Twitter for how they handle speech on their platform.</p>\n<p>I am all for freedom of speech, I believe that people should be free to express themselves. I also believe that while people are free to say whatever the hell pops into their mind, that doesn't mean that there aren't consequences for said speech. If someone comes to you and starts spewing the most racist garbage you've ever heard, you're welcome to tell them to get lost and kick them out of your social events.</p>\n<p>Twitter, like all platforms, has the right to moderate the content on their site as they see fit. If you don't like it you can <s>migrate to another platform</s> buy the platform...wait...ummm... Well, I guess that's what I may very well end up doing, I've already become a little more active on Mastodon. That's the power of capitalism. If you don't like a product, switch to another or build your own. People have been upset with Facebook and Twitter for a long while now, accusing it of being biased against conservatism (spoiler alert, that's not the case at all). It's why we have platforms like Gab, Gettr, Parler and Trump's own Truth Social. The fact that they're generally filled with racist, misogynistic assholes should say all that needs to be said.</p>\n<p>The concern however is how Elon's freedom of speech absolutism will show itself on Twitter. There has been a long history across just about every platform you can name of having to deal with people representing the worst of humanity. Twitter has had plenty of issues with dealing with this in the past, and they certainly have had their share of screw-ups, but it seems like they've recently been doing a decent job of striking a decent balance. <a href=\"https://www.techdirt.com/2022/04/26/twitters-legal-team-has-been-an-aggressive-defender-of-free-speech-will-that-continue-under-musk/\" target=\"_blank\" rel=\"noreferrer nofollow\">Twitter has even been one of the most aggressive defenders of free speech</a>.</p>\n<p>My concern is that Elon's going to relax the rules, and we're going to be left with a platform that supports more disinformation and one that allows for even more hate and harassment. I'm a straight white man and am hardly even noticed on Twitter or any social media platform for that matter. I don't have to deal with a lot of the garbage that goes on behind the scenes for others. But I know that others are far more vulnerable and are constantly dealing with threats and harassment online from others, and from bots. Hell it's pretty common knowledge that if you criticize Elon Musk or Tesla online, his fanboys and their bots will deluge you with hate. Is he going to consider that free speech? It's one thing to disagree with someone, it's another to harass and threaten them to the point where they are worried for their life.</p>\n<p>Let's face it, <a href=\"https://www.techdirt.com/2019/11/20/masnicks-impossibility-theorem-content-moderation-scale-is-impossible-to-do-well/\" target=\"_blank\" rel=\"noreferrer nofollow\">Content moderation is hard</a>, especially at scale. It's something the best and brightest have been trying to handle for over a decade. It's not an easy thing to accomplish and so far, no one really has.</p>\n<p>It should also be mentioned that Elon himself has no problem trying to silence critics. He'll even go so far as to  <a href=\"https://www.theguardian.com/technology/2016/feb/03/elon-musk-blogger-tesla-motors-model-x\" target=\"_blank\" rel=\"noreferrer nofollow\">personally cancel people's orders</a> if they criticize him. I guess some people's speech don't matter much. It makes you wonder if he'd use his position to go after his critics on Twitter. I wonder if <a href=\"https://www.techdirt.com/2019/03/19/rep-devin-nunes-sues-internet-cow-saying-mean-things-about-him-online/\" target=\"_blank\" rel=\"noreferrer nofollow\">Devin Nunes' Cow would have something to say</a> given what the internet bovine had to deal with.</p>\n<p>Maybe Elon has some better ideas for Twitter. I'm very skeptical of that, but maybe. The fact that Twitter will no longer be publicly traded might help insofar as they won't have to deal with maximizing shareholder value every quarter. But others did help fund Musk's buyout so I'm sure they're going to want to see a return on their investment. His comments on bringing transparency to the algorithm might be beneficial. There might be some upsides, but right now I don't see them outweighing the other questionable things Musk has said and complained about Twitter.</p>\n<p>Twitter, and to a lesser extent, Reddit were really the only social media platforms I frequent. I ditched all of Facebook years ago and have mostly just hung out on Twitter. This change has made me start re-thinking that. I'll probably peruse Mastodon some (come <a href=\"https://mastodon.social/web/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">follow me</a>), but I think I'm going to start focusing more on maybe writing and sharing here on my blog. I also went and updated my RSS feeds, so maybe I'll start to stay away from algorithmic viewing and go back to 2008 with blogs and Google Reader (RIP). On a side note, if you have a good blog and wanna share your RSS feed, by all means let me know.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-04-26T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/04/06/march-check-in/",
      "url": "https://kpwags.com/posts/2022/04/06/march-check-in/",
      "title": "March Check-In",
      "content_html": "\n\t\t<p>March didn't particularly feel like that busy of a month. About the only eventful thing that happened was a week-long vacation to Cape May, New Jersey at the end of the month.</p>\n<h2>Homebrew Results</h2>\n<p>I can proudly say that both the Belgian Blonde and the Red Ale I brewed both turned out fantasic. The red ale has a great malt taste to it and the blonde has a nice sweetness to it. I was worried about both since it can be too easy to contaminate a brew, but both ended up delicious.</p>\n<h2>Morning Brew</h2>\n<p>This month, I started grinding my own coffee right before brewing it. I picked up an <a href=\"https://smile.amazon.com/dp/B07CSKGLMM?psc=1&ref=ppx_yo2ov_dt_b_product_details\" rel=\"noreferrer nofollow\">OXO Brew Conical Burr Coffee Grinder</a> that we keep right next to the coffee pot. I figure it will allow my wife and I to try new beans and flavors.</p>\n<h2>Continued Work on Digital Family Cookbook</h2>\n<p>I put my fitness tracking app on the back burner for the time being and have moved onto re-writing Digital Family Cookbook in .NET and a brand new React/TypeScript frontend. My big win this month was getting integration tests running succesfully. I ended up using Entity Framework for it, so I can use an In-Memory database to run the tests. It's pretty neat...at least to me.</p>\n<h2>Monthly Roundup</h2>\n<p><strong>Running &amp; Biking</strong>: Still cold out which limited me to some extent</p>\n<ul>\n<li>Between sore legs and rain, I only ended up running 25 miles</li>\n<li>Didn't end up biking any...the stationary trainer I have is kind of boring to me so I have to be in the mood</li>\n</ul>\n<p><strong>Lifting</strong>: I ended up setting a new PR for squats, but my deadlift is stalling a bit.</p>\n<ul>\n<li>squats (335 lbs.)</li>\n</ul>\n<p><strong>Reading</strong>:</p>\n<ul>\n<li><a href=\"https://bookshop.org/books/nudge-the-final-edition/9780143137009\" target=\"_blank\" rel=\"noreferrer nofollow\">Nudge</a> - This was a fantastic read into how we as humans can be persuaded into doing things in ways we don't always recognize. The authors do a good\njob going into the good and bad of it.</li>\n<li><a href=\"https://bookshop.org/books/the-storyteller-tales-of-life-and-music/9780063076099\" target=\"_blank\" rel=\"noreferrer nofollow\">The Storyteller: Tales of Life and Music</a> - Dave Grohl has always seemed to be an interesting and unique person. This was an interesting memoir talking about his growth from High School\npunk musician, through Nirvana and eventually Foo Fighters. If you're a fan of any of his work, I'd highly recommend this.</li>\n<li><a href=\"https://bookshop.org/books/it-s-better-to-be-feared-the-new-england-patriots-dynasty-and-the-pursuit-of-greatness/9781631498237\" target=\"_blank\" rel=\"noreferrer nofollow\">It's Better to Be Feared: The New England Patriots Dynasty and the Pursuit of Greatness</a> - I'm by no means a Patriots fan, but I found this to be an interesting look into the 2 decades long dynasty of Brady-Belichick and the Patriots.</li>\n</ul>\n<p><strong>Writing</strong>: Nada</p>\n<p><strong>Gaming</strong> - Continued my Halo series play-through.</p>\n<ul>\n<li><a href=\"https://www.xbox.com/en-us/games/store/Halo-5-Guardians/BRRC2BP0G9P0\" target=\"_blank\" rel=\"noreferrer nofollow\">Halo 5: Guardians</a> - I beat this before and the story is probably the worst of all the Halo games. The battles are fun though.</li>\n<li><a href=\"https://www.xbox.com/en-us/games/store/halo-the-master-chief-collection/9ntm9hxnlszx\" target=\"_blank\" rel=\"noreferrer nofollow\">Halo: Infinite</a> - Finally got to start the new Halo campaign. The open world aspect of it is a branch from the other games. At some points it has almost become\nlike Skyrim for me...putting off the main story to do all the side quests. The battles so far have been fun, Hunters are the bain of my existence.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-04-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/03/04/february-check-in/",
      "url": "https://kpwags.com/posts/2022/03/04/february-check-in/",
      "title": "February Check-In",
      "content_html": "\n\t\t<p>February felt like a busy month, it seemed like every weekend we had something going on keeping us moving about.</p>\n<p>As I mentioned in my <a href=\"https://kpwags.com/posts/2022/02/04/january-check-in\">January Check-In</a>, I ended up brewing not just the one beer, but ended up brewing a second beer, an all-grain beer as well. The first beer was an extract brew, a Belgian Blonde, which is currently bottled and waiting for it to be ready to crack open. The second was an all-grain brew, my first attempt at an all-grain batch which I decided to go with a Red Ale. I was hoping to have it ready for St. Patrick's Day, but it's still fermenting so it will likely be a few days late...oh well. The hardest part is waiting to find out how they turned out. They could be fantastic...or they could be ruined. I won't know until I crack open the first bottle.</p>\n<p>I also started a bullet journal. I had been using Notion to keep track of things, but I decided I liked the idea of going more analog and using a Moleskine notebook.</p>\n<p>I'm also trying to find a nice balance for myself with keeping up with the news. At the end of the month, Putin decided to invade Ukraine so the firehose of all the horrors going on has left me trying to stay informed while not feeling all gloom and doom all of the time.</p>\n<p>I ended up really just spending a lot of evenings on the couch with my wife watching our TV shows. It really is the perfect way to wind down.</p>\n<h2>Monthly Roundup</h2>\n<p><strong>Running &amp; Biking</strong>: Still cold out which limited me to some extent</p>\n<ul>\n<li>Ran another 43 miles this month</li>\n<li>Didn't end up biking any...the stationary trainer I have is kind of boring to me so I have to be in the mood</li>\n</ul>\n<p><strong>Lifting</strong>: I ended up setting two new PRs...I'm now 92.5% of the way to the 1,000 lbs. club!</p>\n<ul>\n<li>deadlifts (375 lbs.)</li>\n<li>squats (325 lbs.)</li>\n</ul>\n<p><strong>Reading</strong>:</p>\n<ul>\n<li><a href=\"https://bookshop.org/books/the-apollo-murders-9781668601075/9780316264532\" target=\"_blank\" rel=\"noreferrer nofollow\">The Apollo Murders</a> - I enjoyed this book. It had a good story that pulled you in. As a space fan, I definitely enjoyed the tie-ins with the Apollo program. The ending\nwasn't my favorite part, but it did tidy up the story arcs. Would still recommend it to anyone.</li>\n</ul>\n<p><strong>Writing</strong>: Wrote my first technical post of the year.</p>\n<ul>\n<li>Wrote about <a href=\"https://kpwags.com/posts/2022/02/19/setting-up-github-actions-on-net-projects\">setting up GitHub Actions for a .NET project</a>.</li>\n</ul>\n<p><strong>Gaming</strong> - Continued my Halo series play-through.</p>\n<ul>\n<li><a href=\"https://www.xbox.com/en-us/games/store/halo-the-master-chief-collection/9ntm9hxnlszx\" target=\"_blank\" rel=\"noreferrer nofollow\">Halo 3</a> - I have obviously already played the heck out of this game, but played through it again for my Halo series play-through.</li>\n<li><a href=\"https://www.xbox.com/en-us/games/store/halo-the-master-chief-collection/9ntm9hxnlszx\" target=\"_blank\" rel=\"noreferrer nofollow\">Halo 3: ODST</a> - This is the only Halo shooter I never beat. I got bored with it when it first came out, but wasn't gonna let that stop me this time. Finally\nbeat it and it does provide a nice little side-story to go along with the Master Chief Saga</li>\n<li><a href=\"https://www.xbox.com/en-us/games/store/halo-the-master-chief-collection/9ntm9hxnlszx\" target=\"_blank\" rel=\"noreferrer nofollow\">Halo 4</a> - Played through this, again for my Halo series play-through. It was the first game done by 343 Studios and as I remembered, the story didn't\nquite feel the same as the original trilogy.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-03-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/02/19/setting-up-github-actions-on-net-projects/",
      "url": "https://kpwags.com/posts/2022/02/19/setting-up-github-actions-on-net-projects/",
      "title": "Setting Up GitHub Actions on .NET Projects",
      "content_html": "\n\t\t<p>After seeing Git Actions at work at my job, I decided that I wanted to see what I could do for my personal projects with GitHub Actions.</p>\n<p>At work in order for our PRs to be completed, our code needs to match our ESLint guidelines and our unit tests need to pass. I like those rules so I wanted to apply them to my personal projects on GitHub. I knew GitHub had the ability to do the same thing so I sat down and taught myself how to set them up. A little while later, I was able to get them up and running and am quite happy with the results so I figured I’d share how I did it.</p>\n<h2>Some Background</h2>\n<p>I set this up for my re-write of <a href=\"https://github.com/kpwags/digital-family-cookbook\" target=\"_blank\" rel=\"noreferrer\">Digital Family Cookbook in .NET</a>. I have my backend broken up into 3 projects.</p>\n<ol>\n<li>The Web API (DigitalFamilyCookbook)</li>\n<li>A “Core” Class Library (DigitalFamilyCookbook.Core)</li>\n<li>A “Data” Class Library (Digital Family Cookbook.Data)</li>\n</ol>\n<p>I have a separate .NET Unit Test project for the Web API and the core class library. One for the data class library will be added soon. Because of this, I ended up creating two actions, one to run the API unit tests, and a second to run the core library unit tests.</p>\n<h3>Step 1: Create the Workflows Folder</h3>\n<p>In your root directory create a folder named <code>.github</code> and inside that folder create a folder named <code>workflows</code>.</p>\n<h3>Step 2: Create an Action</h3>\n<p>Create a file called <code>unittests.yml</code></p>\n<h3>Step 3: Build the Action</h3>\n<p>Start by giving the action a name</p>\n<pre class=\"language-yaml\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> DigitalFamilyCookbook Unit Tests</code></pre>\n<p>This is pretty self-explanatory. We want each action to have a name that is descriptive of what the action does.</p>\n<p>Next, we want to define when we want the action to be run.</p>\n<pre class=\"language-yaml\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"token key atrule\">on</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">push</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n    <span class=\"token key atrule\">pull_request</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span></code></pre>\n<p>This tells GitHub that we want these actions run when we push code to the main branch (I don't really do this, but put it here anyway), or when a pull request is submitted against the main branch.</p>\n<p>Finally, we want to set up the action itself.</p>\n<pre class=\"language-yaml\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">runs-on</span><span class=\"token punctuation\">:</span> ubuntu<span class=\"token punctuation\">-</span>latest\n\n        <span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/checkout@v2\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Setup .NET\n              <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/setup<span class=\"token punctuation\">-</span>dotnet@v1\n              <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n                  <span class=\"token key atrule\">dotnet-version</span><span class=\"token punctuation\">:</span> 6.0.x\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Restore dependencies\n              <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> dotnet restore\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./backend/tests/DigitalFamilyCookbook.Tests\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build\n              <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> dotnet build <span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>no<span class=\"token punctuation\">-</span>restore\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./backend/tests/DigitalFamilyCookbook.Tests\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Test\n              <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> dotnet test <span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>no<span class=\"token punctuation\">-</span>build <span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>verbosity normal\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./backend/tests/DigitalFamilyCookbook.Tests</code></pre>\n<p>Let's look at how this is structured.</p>\n<ol>\n<li>We tell GitHub to run this on the latest version of Ubuntu.</li>\n<li>Next, we define the steps to take to run the action. Each bullet point is basically a step in the process\n<ol>\n<li><code>uses: actions/checkout@v2</code> is the official GitHub action that will checkout the code in order to run the actions we define</li>\n<li><code>name: Setup .NET</code> is the name of this step which we use the official GitHub action to setup .NET for the action, specifying we want to use .NET 6. This is important as I am taking advantage of some of the new .NET 6 functionality that will break on previous versions.</li>\n<li><code>name: Restore dependencies</code> is where we tell the action to install the project's dependencies. you can see the next line defines the actual command. Just like we'd do in the terminal on our own machine. We tell the action to run <code>dotnet restore</code> The final part is to specify the directory to run this command in. Since I'm running the tests for the API project, we specify it as <code>./backend/tests/DigitalFamilyCookbook.Tests</code> which is the path from the root of the repository to where the <code>.csproj</code> defining the unit test project lies.</li>\n<li><code>name: Build</code> is where we tell the action to build the project, again just like we'd do in our terminal. Again, we need to specify the working folder.</li>\n<li><code>name: Test</code> is where the butter is at. This tells us to run the test command to execute our unit tests. Like the <code>restore</code> and <code>build</code> steps, we also need to specify the working folder here as well.</li>\n</ol>\n</li>\n</ol>\n<h3>Final Result</h3>\n<pre class=\"language-yaml\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> DigitalFamilyCookbook Unit Tests\n\n<span class=\"token key atrule\">on</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">push</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n    <span class=\"token key atrule\">pull_request</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n\n<span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">runs-on</span><span class=\"token punctuation\">:</span> ubuntu<span class=\"token punctuation\">-</span>latest\n\n        <span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/checkout@v2\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Setup .NET\n              <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/setup<span class=\"token punctuation\">-</span>dotnet@v1\n              <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n                  <span class=\"token key atrule\">dotnet-version</span><span class=\"token punctuation\">:</span> 6.0.x\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Restore dependencies\n              <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> dotnet restore\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./backend/tests/DigitalFamilyCookbook.Tests\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build\n              <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> dotnet build <span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>no<span class=\"token punctuation\">-</span>restore\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./backend/tests/DigitalFamilyCookbook.Tests\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Test\n              <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> dotnet test <span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>no<span class=\"token punctuation\">-</span>build <span class=\"token punctuation\">-</span><span class=\"token punctuation\">-</span>verbosity normal\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./backend/tests/DigitalFamilyCookbook.Tests</code></pre>\n<p>That's it. It was not nearly as difficult to setup as I initially thought. Now whenever I open a pull request, it will run the unit tests and make sure they pass before I can complete it and merge it with the main branch. I ended up creating a second action file and run the same steps, only with the <code>DigitalFamilyCookbook.Core.Tests</code> project.</p>\n<h2>Bonus: Run the React Unit Tests Too!</h2>\n<p>As an added bonus, I'll add how I set up the action to run Jest for the frontend unit tests.</p>\n<pre class=\"language-yaml\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Front End Unit Tests\n\n<span class=\"token key atrule\">on</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">push</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n    <span class=\"token key atrule\">pull_request</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n\n<span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">runs-on</span><span class=\"token punctuation\">:</span> ubuntu<span class=\"token punctuation\">-</span>latest\n\n        <span class=\"token key atrule\">strategy</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">matrix</span><span class=\"token punctuation\">:</span>\n                <span class=\"token key atrule\">node-version</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>15.x<span class=\"token punctuation\">]</span>\n\n        <span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/checkout@v2\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Use Node.js $\n              <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/setup<span class=\"token punctuation\">-</span>node@v1\n              <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n                  <span class=\"token key atrule\">node-version</span><span class=\"token punctuation\">:</span> $\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> npm install\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./frontend\n            <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> npm run test\n              <span class=\"token key atrule\">working-directory</span><span class=\"token punctuation\">:</span> ./frontend</code></pre>\n<p>It's very similar to the .NET actions, only in this case we specify the node version instead of .NET, and run the npm commands in the frontend directory.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-02-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/02/04/january-check-in/",
      "url": "https://kpwags.com/posts/2022/02/04/january-check-in/",
      "title": "January Check-In",
      "content_html": "\n\t\t<p>I can't believe it's already February. It feels like January just came and went.</p>\n<p>January as a whole wasn't a super busy month. The biggest thing that happened was me taking an all-grain brewing class at the end of the month. Over the course of the last several years I've been brewing beer at home as a hobby, but I've been limited to extract brewing. It can turn out some good brews, but I know there is so much more I can do moving beyond extract and mashing the grains myself. I was hoping to learn how to do it before the pandemic, and when my local homebrew shop was offering a class, I signed right up. It was a good class and I am now itching to try my hand at an all-grain brew. I’m planning on brewing this weekend but it will be one more extract brew before I try my hand at some more advanced recipes.</p>\n<p>Other than that, not much to really report so far.</p>\n<h3><strong>Monthly Roundup</strong></h3>\n<p><strong>Running &amp; Biking:</strong> Ran 43 miles and biked 9 in January. Braved the cold quite a bit.</p>\n<p><strong>Reading:</strong> Finished <strong><em>Leviathan Falls</em></strong>, and with it, <em>The Expanse</em> series.</p>\n<p><strong>Writing:</strong> Wrote about the <a href=\"https://kpwags.com/posts/2022/01/19/books-i-read-in-2021\">books I read in 2021</a> and my new <a href=\"https://kpwags.com/posts/2022/01/25/tracking-my-2022-goals\">2022 goals page</a>.</p>\n<p><strong>Gaming:</strong> Continued my play-through of the Halo series. Beat Halo 2 and started Halo 3. Also picked up a PS5.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-02-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/01/25/tracking-my-2022-goals/",
      "url": "https://kpwags.com/posts/2022/01/25/tracking-my-2022-goals/",
      "title": "Tracking My 2022 Goals",
      "content_html": "\n\t\t<p>Goals can be a funny thing. We all set them, and what happens next can be all over the spectrum. I figured I’d build a little something to help keep me accountable.</p>\n<p>You can view this <a href=\"https://kpwags.com/progress/2022\">new page</a> where you can see the goals I’ve set and the progress I’m currently at. The lifting goals are a little weird as it looks like I’m already almost there. I can say with absolute certainty though that getting that little bit more will be harder than it may seem.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-01-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/01/19/books-i-read-in-2021/",
      "url": "https://kpwags.com/posts/2022/01/19/books-i-read-in-2021/",
      "title": "Books I Read in 2021",
      "content_html": "\n\t\t<p>I didn't read as much as I wanted to in 2021, managing a measly nine books.</p>\n\n<media-box title=\"Franchise: The Golden Arches in Black America\" author=\"Marcia Chatelain\" link=\"https://bookshop.org/books/franchise-the-golden-arches-in-black-america-9781684577019/9781631498701\" image=\"https://i.postimg.cc/3JTQPJtY/franchise-golden-arches.jpg\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/3JTQPJtY/franchise-golden-arches.jpg\" alt=\"Franchise: The Golden Arches in Black America\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/franchise-the-golden-arches-in-black-america-9781684577019/9781631498701\">Franchise: The Golden Arches in Black America</a></div>\n\t\t\t\t<div class=\"author\">Marcia Chatelain</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI had heard about this book on <a href=\"https://www.marketplace.org/2020/07/06/the-complicated-history-of-mcdonalds-and-black-america/\">Marketplace</a>\n\tand given the tumultuous 2020, felt like this would be an interesting read to maybe give myself some insight. It was an interesting read going into areas \n\twhere McDonald's did well and where it fell short.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/bvGGwDJS/mvpmachine.jpg\" link=\"https://bookshop.org/books/the-mvp-machine-how-baseball-s-new-nonconformists-are-using-data-to-build-better-players/9781541698925\" title=\"The MVP Machine: How Baseball's New Nonconformists Are Using Data to Build Better Players\" author=\"Ben Lindbergh &amp; Travis Sawchik\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/bvGGwDJS/mvpmachine.jpg\" alt=\"The MVP Machine: How Baseball's New Nonconformists Are Using Data to Build Better Players\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-mvp-machine-how-baseball-s-new-nonconformists-are-using-data-to-build-better-players/9781541698925\">The MVP Machine: How Baseball's New Nonconformists Are Using Data to Build Better Players</a></div>\n\t\t\t\t<div class=\"author\">Ben Lindbergh & Travis Sawchik</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\t\tI've been a big fan of Ben's <a href=\"https://blogs.fangraphs.com/category/effectively-wild/\">Effectively Wild</a> podcast and his previous book \n\t\t<a href=\"https://bookshop.org/books/the-only-rule-is-it-has-to-work-our-wild-experiment-building-a-new-kind-of-baseball-team-includes-a-new-afterword/9781250130907\">The Only Rule is it has to Work</a> so \n\t\tI decided to pick this up and wasn't disappointed. It was a great look into how teams and players are trying new things to get a leg up in the game.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/1X0V1kzW/money-goldstein.jpg\" link=\"https://bookshop.org/books/money-the-true-story-of-a-made-up-thing/9780316417198\" title=\"Money: The True Story of a Made-Up Thing\" author=\"Jacob Goldstein\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/1X0V1kzW/money-goldstein.jpg\" alt=\"Money: The True Story of a Made-Up Thing\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/money-the-true-story-of-a-made-up-thing/9780316417198\">Money: The True Story of a Made-Up Thing</a></div>\n\t\t\t\t<div class=\"author\">Jacob Goldstein</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tHaving listened to Jacob on NPR's Planet Money podcast, I had heard about this book and thought it had an interesting premise.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/dVFQmjbR/fieldofschemes.jpg\" link=\"https://bookshop.org/books/field-of-schemes-how-the-great-stadium-swindle-turns-public-money-into-private-profit-revised/9780803260160\" title=\"Field of Schemes: How the Great Stadium Swindle Turns Public Money Into Private Profit\" author=\"Neil Demause &amp; Joanna Cagan\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/dVFQmjbR/fieldofschemes.jpg\" alt=\"Field of Schemes: How the Great Stadium Swindle Turns Public Money Into Private Profit\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/field-of-schemes-how-the-great-stadium-swindle-turns-public-money-into-private-profit-revised/9780803260160\">Field of Schemes: How the Great Stadium Swindle Turns Public Money Into Private Profit</a></div>\n\t\t\t\t<div class=\"author\">Neil Demause & Joanna Cagan</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI had figured out a while ago that publicly funded sports stadiums were a raw deal. This book only enforced my opinion on why these are\n\traw deals. I learned more details on how they've been able to pull it off. The book goes into detail on how bad these deals are how owners were able to swindle us all.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/h40Ggbr3/premonition.jpg\" link=\"https://bookshop.org/books/the-premonition-a-pandemic-story-9781713631897/9780393881554\" title=\"The Premonition: A Pandemic Story\" author=\"Michael Lewis\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/h40Ggbr3/premonition.jpg\" alt=\"The Premonition: A Pandemic Story\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-premonition-a-pandemic-story-9781713631897/9780393881554\">The Premonition: A Pandemic Story</a></div>\n\t\t\t\t<div class=\"author\">Michael Lewis</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tHaving lived through 2020, I understood that the US Government royally screwed up its handling of the COVID-19 pandemic. Reading this book\n\tgave me a better idea of why the different departments struggled to get a handle on it.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/3JDMZ2Rx/thinkagain.jpg\" link=\"https://bookshop.org/books/think-again-the-power-of-knowing-what-you-don-t-know-9781984878106/9781984878106\" title=\"Think Again: The Power of Knowing What You Don't Know\" author=\"Adam Grant\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/3JDMZ2Rx/thinkagain.jpg\" alt=\"Think Again: The Power of Knowing What You Don't Know\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/think-again-the-power-of-knowing-what-you-don-t-know-9781984878106/9781984878106\">Think Again: The Power of Knowing What You Don't Know</a></div>\n\t\t\t\t<div class=\"author\">Adam Grant</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tI wrote a <a href=\"https://kpwags.com/posts/2021/10/27/think-again-review\">whole post</a> on this. It was a good read looking\n\tat trying to get us to change our thinking and recognizing when we might not know as much as we think we do.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/15X48kcp/cult-of-we.jpg\" link=\"https://bookshop.org/books/the-cult-of-we-wework-adam-neumann-and-the-great-startup-delusion/9780593237113\" title=\"The Cult of We: WeWork, Adam Neumann, and the Great Startup Delusion\" author=\"Eliot Brown &amp; Maureen Farrell\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/15X48kcp/cult-of-we.jpg\" alt=\"The Cult of We: WeWork, Adam Neumann, and the Great Startup Delusion\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-cult-of-we-wework-adam-neumann-and-the-great-startup-delusion/9780593237113\">The Cult of We: WeWork, Adam Neumann, and the Great Startup Delusion</a></div>\n\t\t\t\t<div class=\"author\">Eliot Brown & Maureen Farrell</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tIt still amazes me reading about the WeWork saga that it got as far as it did. I had heard some of the craziness that was going on thanks\n\tto <a href=\"https://www.marketplace.org/shows/make-me-smart-with-kai-and-molly/weworks-whole-bananapants-story/\">Make Me Smart</a> , but \n\tuntil I read this book...let's just say...wow!\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/RF1JTwNK/buyoutofamerica.jpg\" link=\"https://bookshop.org/books/the-buyout-of-america-how-private-equity-is-destroying-jobs-and-killing-the-american-economy/9781591843696\" title=\"The Buyout of America: How Private Equity Is Destroying Jobs and Killing the American Economy\" author=\"Josh Kosman\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/RF1JTwNK/buyoutofamerica.jpg\" alt=\"The Buyout of America: How Private Equity Is Destroying Jobs and Killing the American Economy\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-buyout-of-america-how-private-equity-is-destroying-jobs-and-killing-the-american-economy/9781591843696\">The Buyout of America: How Private Equity Is Destroying Jobs and Killing the American Economy</a></div>\n\t\t\t\t<div class=\"author\">Josh Kosman</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis book just made me angry seeing Wall Street &amp; Hedge Funds come in and destroy companies and jobs for a\n\tquick buck. But as angry as I might be over what happened, I feel that it's important to know what and how it happened. This book does a\n\tgood job of giving examples and\ttalking about the history of it all.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\n<media-box image=\"https://i.postimg.cc/sD2xf6w0/righteousmind.jpg\" link=\"https://bookshop.org/books/the-righteous-mind-why-good-people-are-divided-by-politics-and-religion-9798200560639/9780307455772\" title=\"The Righteous Mind: Why Good People Are Divided by Politics and Religion\" author=\"Jonathan Haidt\"><div class=\"media-box\">\n\t<div class=\"container\">\n\t\t<img src=\"https://i.postimg.cc/sD2xf6w0/righteousmind.jpg\" alt=\"The Righteous Mind: Why Good People Are Divided by Politics and Religion\" width=\"200\" height=\"300\" />\n\t\t<div class=\"details\">\n\t\t\t<div class=\"title-section\">\n\t\t\t\t<div class=\"title\"><a href=\"https://bookshop.org/books/the-righteous-mind-why-good-people-are-divided-by-politics-and-religion-9798200560639/9780307455772\">The Righteous Mind: Why Good People Are Divided by Politics and Religion</a></div>\n\t\t\t\t<div class=\"author\">Jonathan Haidt</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<p>\n\tThis was my second attempt at reading this book. I finished this time. It wasn't a bad read, but it was felt\n\tlike a dense read. The explanation Jonathan gives does seem to fit some of the things we see going on in politics today.\n</p>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.media-box {\n\t\twidth: 600px;\n\t\tmargin: 32px auto;\n\t\tborder: 3px solid var(--secondary-color);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--background-shaded);\n\t}\n\n\t.media-box .title {\n\t\tfont-size: 1.5rem;\n\t\tfont-weight: 700;\n\t\tcolor: var(--primary-color);\n\t}\n\n\t.media-box .container {\n\t\tdisplay: flex;\n\t\tgap: 32px;\n\t\tpadding: 16px;\n\t}\n\n\t.media-box .container img {\n\t\twidth: 150px;\n\t\theight: 225px;\n\t\tflex-grow: 0;\n\t}\n\n\t.media-box .container .details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\trow-gap: 16px;\n\t\tflex-grow: 1;\n\t}\n\n\t.media-box .container .details .author {\n\t\tfont-size: 1.2rem;\n\t\tfont-weight: 500;\n\t\tfont-style: italic;\n\t}\n\n\t.media-box .container .details .author:empty {\n\t\tdisplay: none;\n\t}\n\n\t.media-box .container .details p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box .container .details .rating {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tcolumn-gap: 4px;\n\t}\n\n\t.media-box .container .details .rating p {\n\t\tmargin: 0;\n\t}\n\n\t.media-box p:empty {\n\t\tdisplay: none;\n\t}\n\n\t@media (max-width: 700px) {\n\t\t.media-box {\n\t\t\twidth: 100%;\n\t\t\tmargin: 32px 0;\n\t\t\tborder-radius: 6px;\n\t\t}\n\n\t\t.media-box .container img {\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 200px;\n\t\t\theight: 300px;\n\t\t}\n\t}\n\n\t@media (max-width: 450px) {\n\t\t.media-box .container {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style></media-box>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-01-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/01/07/2022-retrospective/",
      "url": "https://kpwags.com/posts/2022/01/07/2022-retrospective/",
      "title": "2021 Retrospective",
      "content_html": "\n\t\t<p>Well 2021 was quite the year...it started with a failed coup by the GOP, a wide rollout of a life-saving COVID-19 vaccine that almost half the country doesn't want to take because they're being lied to by their (vaccinated) political leaders and news channels, and we're back in another COVID-19 wave entering the third year of the pandemic...so all in all...just peachy.</p>\n<p>Now that that part is over with, my 2021 wasn't awful. I ended up getting my vaccination in March &amp; April, so that by the beginning of May I was ready to cautiously re-enter the world to at least a certain degree. I still wear my mask while out and about, even before Omicron entered the equation, but it's nice to feel comfortable visiting family and having the occasional dinner out. It also means I'm back at the ice rink playing hockey. So to make a long story short, a small bit of normalcy has returned.</p>\n<h3>General Overview of 2021</h3>\n<p>At the end of last year, I started a new job at Webstaurant and a year in I'm still enjoying working there. I feel like I'm learning a great deal and am able to work with new technologies to keep my development chops growing and fresh.</p>\n<p>I ended up redesigning and rebuilding my blog using React &amp; Next.js which was fun. I'd been toying with the idea of moving away from Jekyll for a little while and when I was starting to have problems getting it to play nicely with my new M1 MacBook Pro, I decided to take the plunge. I still want to write about my experience porting it over and re-writing it so hopefully I'll get to that soon.</p>\n<p>With regards to vacations, I ended up taking three trips this year. I spent a week in September in Cape May for our yearly vacation. We were able to check out some breweries and wineries and just relax. In October we went back to Cape May for a long weekend for our anniversary, and in November we visited New York City so Lauren could see Hamilton and we could have some fun.</p>\n<p>In December, we unfortunately had to say goodbye to the bestest boy, Otto. It was an unfortunate way to enter the holidays and end the year, and it still fucking sucks.</p>\n<h2>Looking Back at 2021</h2>\n<p>Last year I didn't really set any tangible goals, I just wanted to focus on certain things.</p>\n<h3>Staying Active</h3>\n<p>This one I felt I did pretty well with. I was able to focus primarily on my lifting while getting in plenty of runs and some walks as well. Starting in May I was able to get back into hockey so I had another outlet to keep active. My diet got better towards the end of the year as well so I'm starting to see a downward trend that I hope I can continue.</p>\n<h3>Improving My Development Knowledge</h3>\n<p>I've ended up making tremendous progress on my fitness tracking app. There's still a lot to go and a lot to smooth out, but I feel like I have a good framework in place. This is one area where what I'm learning to do at work has been helping me improve at home.</p>\n<p>My blog re-write and the setup I'm starting to look at for a .NET re-write of Digital Family Cookbook is challenging me as well.</p>\n<h3>Continuing to Read</h3>\n<p>This didn't go as well as I had hoped. I only ended up reading 9 books this year.</p>\n<h3>Write More</h3>\n<p>I'm not sure this went badly, but I'm not sure it went great either. I ended up writing 21 posts this year which was more than 2020, but am not sure that they were as substantive as I would have liked.</p>\n<h2>Setting Goals for 2022</h2>\n<p>Since I'm hoping that 2022 will continue our trek towards normalcy and hopefully a better headspace, I want to set some actual goals for myself.</p>\n<h3>Goal #1: Run More &amp; Start Biking More</h3>\n<p>In 2020, I ended up running over 800 miles. That was spurred by a 175 day running streak and a good period of time where running was the only exercise I felt comfortable doing given the pandemic. In 2021 I started out biking on my bike trainer and getting some runs in. A month or two in, the biking stopped and the runs weren't as consistent as I would have liked while I focused on lifting. I did end up hitting 325 miles on the year which still isn't too shabby. I'm going to target running 400 miles and biking 500 miles this year. I've been toying with running the Philadelphia Marathon this year to hopefully break the 5-hour mark, so if I end up attempting that, the 400 miles might be easy to hit. The 500 miles on the bike could potentially be a challenge to fit in with everything else, but also feel it's doable.</p>\n<h3>Goal #2: Bench Press, Squat &amp; Deadlift PRs</h3>\n<p>This year I'm hoping to set more PRs on the 3 of the 4 big lifts. I want to break a 400 lbs. deadlift, a 350 lbs. squat, and a 250 lbs. bench press. I'm at 360, 310 &amp; 215 respectively so while it's a stretch, I'm not sure it's outside the realm of possibilities.</p>\n<h3>Goal #3: Max Out My Retirement Accounts</h3>\n<p>Over the last several years, I've been really focusing on improving where I stand with regards to retirement. Last year I was able to max out my Roth IRA and I'm hoping to do that again this year while also hopefully maxing out my 401k at work as well.</p>\n<h3>Goal #4: Read 30 Books</h3>\n<p>My goal this year is to read at least 30 books, with at least 15 of them being non-fiction. Not to knock fiction and novels, but I want to have a good balance.</p>\n<h3>Goal #5: Write 10 Technical Blog Posts</h3>\n<p>Writing monthly wraps and other posts are fine, but I want at least 10 posts in 2022 to be focused on software development and have some substance to them. I'm hoping by just getting started it will spur the writing to continue.</p>\n<hr />\n<p>So that's what I'm hoping to accomplish this year. I think all 5 of them are doable. Some could certainly pose a real challenge, but I guess that's part of the point.</p>\n<p>Here's to a good 2022!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-01-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2022/01/05/december-check-in/",
      "url": "https://kpwags.com/posts/2022/01/05/december-check-in/",
      "title": "December Check-In",
      "content_html": "\n\t\t<p>December was a rough month.</p>\n<h2>Mr. Otto</h2>\n<p>Despite the good start for December, the month was a rough one. A week before Christmas, Otto had a relapse. The fluid had built up around his heart again and his vitals took a pretty bad turn. They could've drained the fluid again, but it would have been hard on Otto and was only a band-aid for the larger issue of the (now certain) tumor on his heart. There wasn't much more we could do for him and still give him a good quality of life, so Lauren and I made the incredibly difficult decision to say goodbye to him. Needless to say, it put a huge damper on the holidays. Even now after 3 weeks the house still feels empty. It still hurts and it fucking sucks.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/TryYT6gFus-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/TryYT6gFus-1920.gif 1920w\" /><img alt=\"Our dog, Otto lying in the hallway\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/TryYT6gFus-1920.jpeg\" width=\"1920\" height=\"1280\" /></picture></p>\n<h2>Busy with Work</h2>\n<p>The project I was working on since I started my job at Webstaurant a year ago went live the week leading up to Christmas. Needless to say it was all hands on deck to work out the various kinks and bugs that we weren't able to catch in QA or didn't have the right data to find in QA. There were a bunch of late evenings working, but things are going well with it now. Despite the seemingly weird time to do a product launch, there were good reasons to do it then and things ended up working out.</p>\n<h2>The Holidays</h2>\n<p>With Otto weighing heavily on our minds, we did our best to still celebrate the holidays. Lauren and I were able to do our Christmas Eve Seafood Dinner this year and hosted her side of the family Christmas Day. We were able to enjoy ourselves which a week earlier I wouldn't have thought as possible.</p>\n<p>We were supposed to go up to see my family Sunday, but unfortunately my brother tested positive for COVID, so we opted to stay home instead. We're hoping to see them this weekend.</p>\n<h2>Starting Over with Halo</h2>\n<p>Halo Infinite came out December 8th, but instead of jumping right in, I've opted to re-play through the series in story order. I'm currently on Halo 2 after playing through Reach and Combat Evolved. I'm planning on playing right through until I get to Infinite while trying to avoid spoilers.</p>\n<h3>Summary</h3>\n<p><strong>Staying Active:</strong> Had plenty of hockey this month, one team made it to the finals and lost in the shootout. Lifting, I set a new PR on deadlifts at 360 lbs. I also ran more miles this month than I had in any month this year and was able to break my goal of 300 miles for 2021!</p>\n<p><strong>Development:</strong> Have made some progress in the next phase of my fitness tracker project. Also spent some time laying out a .NET Core re-write of Digital Family Cookbook.</p>\n<p><strong>Reading:</strong></p>\n<ul>\n<li>Finished <em><a href=\"https://bookshop.org/books/the-righteous-mind-why-good-people-are-divided-by-politics-and-religion-9798200560639/9780307455772\">The Righteous Mind: Why Good People are Divided by Politics and Religion</a></em> by Jonathan Haidt*.* It was a dense read, but was interesting.</li>\n</ul>\n<p><strong>Write More:</strong> Other than my November Recap, nada.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2022-01-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/12/06/november-check-in/",
      "url": "https://kpwags.com/posts/2021/12/06/november-check-in/",
      "title": "November Check-In",
      "content_html": "\n\t\t<p>November was a rather quiet month all things considered.</p>\n<p>The month started out a lot quieter than September or October. A few hockey games here and there, but otherwise it was just my normal <a href=\"https://kpwags.com/posts/2021/01/14/my-typical-weekday\">nothing-out-of-the-ordinary</a> days.</p>\n<h2>New York City</h2>\n<p>Mid-November that changed with a long weekend visiting New York City. Lauren and I love going to New York, but haven't been there since right before the pandemic locked things down.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/6zUPB_pIix-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/6zUPB_pIix-1920.gif 1920w\" /><img alt=\"Washington Square Park in New York City at night\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/6zUPB_pIix-1920.jpeg\" width=\"1920\" height=\"2560\" /></picture></p>\n<p>It was a fun trip, we spent a lot of it just wandering around the city. We ended up going over to Bryant Park for the Christmas Village. We went over to Queens to check out some of the local breweries. Overall it was just an enjoyable trip. It was nice to be able to go to events there and know that they were checking vaccination status. Made me feel safer to be out and about.</p>\n<h2>Killing Spree!</h2>\n<p>After getting back, I was greeted by being able to download the Halo: Infinite multiplayer beta. It definitely brought me back to my late college and early post-college days of playing Halo 3 online with friends. The game has been a lot of fun. I'm still getting back into it, but I'm definitely enjoying it. If you're playing, let me know and maybe we can hop on and play a few rounds. I'm annoyed at how 343 is handling the customizations in terms of having to pay for just about everything, but it's not pay-to-win, so it's not an absolutely huge deal to me. The gameplay is fun. I'm looking forward to playing the campaign, but am kind of bummed that co-op doesn't come out until May(ish) 2022.</p>\n<h2>Mr. Otto</h2>\n<p>Sadly, the month ended on a little bit of a down note. The Wednesday before Thanksgiving we had to take our dog Otto to the emergency vet and found out (surprisingly) that there was fluid build-up around his heart which was preventing his heart from beating properly. Thankfully they were able to drain it and he's back to his old self, but we now need to find out what caused the build-up. Hemangiosarcoma seemed to be the worst-case scenario, but thankfully that's pretty much now ruled out. There still could be a tumor, so we're going to have to bring him back in for more tests. It was just tough leaving him in the hospital overnight and then having to wait throughout the day Thanksgiving for updates. He's home now and happy as ever so if you'll excuse me, I'm gonna go give him some lovin'.</p>\n<h2>Summary</h2>\n<p><strong>Staying Active:</strong> Wasn't too much hockey this month. 2 of my teams are now down to 2 games a month. Was able to get a bunch of runs in and have continued progressing with my lifts.</p>\n<p><strong>Development:</strong> Have made some progress in the next phase of my fitness tracker project. Hoping to devote some time over the month to get this next feature set in place.</p>\n<p><strong>Reading:</strong></p>\n<ul>\n<li>Finished <a href=\"https://bookshop.org/books/the-buyout-of-america-how-private-equity-is-destroying-jobs-and-killing-the-american-economy/9781591843696\" target=\"_blank\" rel=\"noreferrer nofollow\">The Buyout of America</a> by Josh Kosman. It was one of those books that made me a little angry seeing what part of Wall Street has done, but it's also helped me understand the how and why stuff like Toys 'R' Us happens.</li>\n<li>Started <a href=\"https://bookshop.org/books/the-righteous-mind-why-good-people-are-divided-by-politics-and-religion-9798200560639/9780307455772\" target=\"_blank\" rel=\"noreferrer nofollow\">The Righteous Mind: Why Good People are Divided by Politics and Religion</a> by Jonathan Haidt*.* I had started it before but couldn't get into it. Gonna try again.</li>\n</ul>\n<p><strong>Write More:</strong> Other than my October Recap, nada.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-12-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/11/17/october-check-in/",
      "url": "https://kpwags.com/posts/2021/11/17/october-check-in/",
      "title": "October Check-In",
      "content_html": "\n\t\t<p>October felt like it was a busy month. It seemed that we had plans every weekend and were always on the move. It wasn't necessarily a <em>bad</em> busy, but it probably foreshadows the upcoming holiday season.</p>\n<p>I've decided to stick with using Notion as a platform and have moved a bunch of my notes and organizing into it. I've been sticking with my daily journaling on it keeping track of what I want to do and what I've done each day. Life gets busy and sometimes it's a nice way to look back and remember what happened when life's happenings start to blur together.</p>\n<p>The month started out with us celebrating my Mom's birthday with a Lehigh Football Game and dinner at my sister's. The football game wasn't all that much fun to watch as it ended up being a 34-0 blowout, but the weather was beautiful and we had good company.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/GFqXx190wU-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/GFqXx190wU-1920.gif 1920w\" /><img alt=\"The Lehigh University football team taking the snap deep in their own zone\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/GFqXx190wU-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>In mid-October, after attending my cousin's wedding, Lauren and I went to Cape May, NJ again, this time celebrating our 8th anniversary. We stayed at Congress Hall and enjoyed sitting out on the veranda reading most mornings and evenings. We again went out and visited some of the local wineries and breweries. The weather was beautiful and it was a great way to celebrate 8 years.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/6C5lsEGecH-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/6C5lsEGecH-1920.gif 1920w\" /><img alt=\"The view of Cape May from our hotel room at Congress Hall\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/6C5lsEGecH-1920.jpeg\" width=\"1920\" height=\"1290\" /></picture></p>\n<p>We finished out the month with our annual tradition of bringing the fire pit out onto the driveway and handing out candy to the local trick-or-treaters. Unfortunately, my pumpkin carving of Grumpy Cat lost the eye during transport to its driveway location.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/l4O4NPrpuJ-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/l4O4NPrpuJ-1920.gif 1920w\" /><img alt=\"My pumpkin carving of grumpy cat, but missing an eye\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/l4O4NPrpuJ-1920.jpeg\" width=\"1920\" height=\"1665\" /></picture></p>\n<p>I also started using a new app to track my diet. I found the app <a href=\"https://www.strongerbyscience.com/macrofactor/\" target=\"_blank\" rel=\"noreferrer nofollow\">MacroFactor</a> and have been having some success in keeping my diet a little more in check.</p>\n<h3>Summary</h3>\n<p><strong>Staying Active:</strong> I got in plenty of hockey this month across the teams I play on. For lifting, I've deloaded and have tweaked my workout again splitting up the 5/3/1 sets with the 5x10 sets on different days. It's been going well.</p>\n<p><strong>Development:</strong> Haven't done a large amount of work on my fitness tracker, but am making some small process here and there as well as some refactoring work.</p>\n<p><strong>Reading:</strong> I finished <em>The Cult of We</em> while in Cape May, and hoo boy! When <a href=\"https://twitter.com/mollywood\" target=\"_blank\" rel=\"noreferrer nofollow\">Molly Wood</a> on <a href=\"https://www.marketplace.org/shows/make-me-smart-with-kai-and-molly/\" target=\"_blank\" rel=\"noreferrer nofollow\">Make Me Smart</a> was talking about it being absolutely crazy...or &quot;bananapants&quot;, she wasn't kidding. I have no idea how people were so blind to all the obvious red flags.</p>\n<p><strong>Write More:</strong> I wrote about my thoughts on <em><a href=\"https://kpwags.com/posts/2021/10/27/think-again-review\">Think Again</a></em>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-11-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/10/27/think-again-review/",
      "url": "https://kpwags.com/posts/2021/10/27/think-again-review/",
      "title": "Think Again Review",
      "content_html": "\n\t\t<p>Back in September, I finished reading <a href=\"https://bookshop.org/books/think-again-the-power-of-knowing-what-you-don-t-know-9781984878106/9781984878106\" target=\"_blank\" rel=\"noreferrer nofollow\"><em>Think Again</em></a> by Adam Grant. It's a fantastic book that made me think about how I form my thoughts and opinions, and how I go about possibly re-forming them as evidence changes.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/Oe69eiubEF-398.webp 398w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/Oe69eiubEF-398.gif 398w\" /><img alt=\"The cover of Adam Grant's book, Think Again\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/Oe69eiubEF-398.jpeg\" width=\"398\" height=\"600\" /></picture></p>\n<p>I had first heard about this book listening to the <a href=\"https://www.pushkin.fm/show/cautionary-tales/\" target=\"_blank\" rel=\"noreferrer nofollow\"><em>Cautionary Tales</em></a> podcast by Tim Harford. I’ve always appreciated Tim’s take on a multitude of topics so his recommendation had my interest piqued.</p>\n<p>The book’s primary focus is to make the reader think about their opinions and consider how they form their opinions and what it might take to reconsider them. For plenty of people, including myself, what we think we know may or may not be as much as we actually know. (See the <a href=\"https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect\" target=\"_blank\" rel=\"noreferrer nofollow\">Dunning–Kruger Effect</a>)</p>\n<p>Being able to re-consider one’s viewpoints is a definitively good mindset to be in. All too often we form our opinions, get set in our filter bubbles, and refuse to change our minds. I know I can be guilty of this myself. I like to think the world works a certain way, and will sometimes need some extra prodding to revisit where I stand.</p>\n<p>I think all too often we have our minds set on why people are the way they are, or that a certain group of people are <em>[insert adjective here]</em>. I know it’s grown even harder over the last 6 years given the current political climate. Democrats hate Republicans, Republicans hate Democrats. The polarization has become seemingly extreme as of late. The pandemic certainly hasn’t helped matters either. I know I sometimes have to take a step back and think about those who have chosen not to get vaccinated. I know there are those who are fervently anti-vaxx, thinking it’s some kind of liberal conspiracy or whatever the hell they’re believing these days. But then I take a step back, read some more, and see that there are others who are unsure for a multitude of reasons. Some understandable, some questionable, but not at the level of the QAnon folks. It’s kind of ironic that I read this while the pandemic is going on as one part of the book talks about doctors trying to figure out how to best handle those not wanting to have their children get the childhood vaccines (think MMR, Polio, etc.). As the book mentions, sometimes it’s just doing your best to listen to each other rather than talking down to them. Sure, there are plenty you won’t be able to reason with, but maybe, just maybe there are others you can help re-think their views.</p>\n<p>The other thing that I often think about is how it's often seen as a weakness to change your mind on things. In politics, politicians who change their views are so often called flip-floppers. It doesn’t matter why they changed their view, or how long it took them. They changed their view, so they can’t be trusted. It’s a shame too, because there are countless good reasons to change or adjust your view.</p>\n<p>Looking back at my life, I think the biggest “shock” for me was going to college. I grew up in the suburbs of Allentown, Pennsylvania. I was raised in a decidedly middle-class household. I was fortunate and never had to worry about how life’s necessities were going to be taken care of. The people I met in high school were very much the same.</p>\n<p>Going to college, and given Drexel's location in Philadelphia, all of a sudden I was introduced to people from wildly different backgrounds. Some who came from more money than I’d know what to do with, others who had to scratch and claw for everything. It opened my eyes to what others had to deal with and made me re-think about how lucky I was and that maybe I should reconsider my thoughts about others who may not have had the benefits I had growing up.</p>\n<p>It falls back to science as well. I mean think about the scientific method. The way scientists work is they come up with a hypothesis, test it, and adjust their hypothesis accordingly. It's a little bit more complicated than that, but it’s ultimately the gist of it. Scientists follow the science and will generally adjust their views based on the results of their scientific inquiry. I forget where I read it, but I remember reading somewhere that good scientists are willing to recognize when they are wrong just as fervently as when they are right. Changing your mind or re-thinking something as the situation changes shouldn’t be considered a weakness, but rather a strength. There's a maturity to be able to say you were wrong.</p>\n<p>At the end of the day, I really believe that this is generally a good mindset to have. We all obviously have our convictions and views we strongly believe in. But to be willing to hear and listen to the other side or other alternate viewpoints will hopefully make us better people.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-10-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/10/06/september-check-in/",
      "url": "https://kpwags.com/posts/2021/10/06/september-check-in/",
      "title": "September Check-In",
      "content_html": "\n\t\t<p>September seemed to fly by pretty quickly, but it was definitely a good month. I enjoyed a week away on vacation and felt like I got a lot accomplished.</p>\n<p>Month started off well and I was feeling very productive. It helped that hockey has been on a slight hiatus so I was able to spend more nights at home. I used that time to finish up my blog redesign. I actually just got it deployed and switched over. I'm now using <a href=\"https://netlify.com/\">Netlify</a> to host it and the setup process was pretty easy once I got the kinks ironed out.</p>\n<p>Towards the end of August, I started using <a href=\"https://www.notion.so/\">Notion</a> for notes. I'm still not entirely sure how I like it, but the one thing I've started doing it creating new journal notes every day tracking what I would like to do, what I did, and links to some of the more interesting things I've read. Even if I end up moving back to my synched Dropbox folder with Markdown Files, I think I'm going to continue this.</p>\n<p>In mid-September, my wife and I went to Cape May for a week on vacation. We rented a condo on the beach and took a nice week away to do basically nothing. Well, maybe not quite nothing, but it was a much needed break. We ended up visiting several breweries and wineries, and were able to meet up with my parents one afternoon for lunch and some beers. I brought several books hoping to read some while there, but I ended up working on my fitness tracker side project far more than I had planned. It worked out because I was able to get quite a bit done on it. There's still a ways to go, but progress is progress. Yes, I spent a bunch of time programming, but Lauren and I were able to spend the week the way we wanted, so I count that as a fantastic vacation. It was nice to come back home and sleep in my own bed again though.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/4mZeIE3gLf-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/4mZeIE3gLf-1920.gif 1920w\" /><img alt=\"The Jersey Shore in Cape May, New Jersey\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/4mZeIE3gLf-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>While I didn't end up finishing a single book while on vacation, I did finish <em>Think Again</em> by Adam Grant shortly after getting home. I thought it was a great book, and plan on writing something more about it over the next week or so.</p>\n<p>Since getting back, I've realized I've put on more weight than I would really like, so I think I'm going to be really focusing this next month on cutting back my alcohol consumption. It's been a little too easy for me to enjoy the evening with a beer or two. It's been adding up and I think it's been sabotaging my attempt to get into better shape.</p>\n<p>For October, I'm really hoping to make more progress on my fitness tracker.</p>\n<h3>Summary</h3>\n<p><strong>Staying Active:</strong> Not much hockey this month, but outside of vacation, I've been lifting and running. I've run more miles in September than in any month this year April.</p>\n<p><strong>Development:</strong> Finished up most of my blog re-write. Made good progress on my fitness tracker. And not to muddy the waters, but have started putzing around with moving Digital Family Cookbook over to .NET Core.</p>\n<p><strong>Reading:</strong> I finished <em>Think Again</em> by Adam Grant and also was able to go through my Pocket list and read a bunch of articles I've marked for read later.</p>\n<p><strong>Write More:</strong> I wrote one post on my thoughts about <a href=\"https://kpwags.com/2021/09/04/on-software-subscriptions.html\">software subscriptions</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-10-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/09/04/on-software-subscriptions/",
      "url": "https://kpwags.com/posts/2021/09/04/on-software-subscriptions/",
      "title": "On Software Subscriptions",
      "content_html": "\n\t\t<p>One of the things that has started to bug me of late is that it's getting harder and harder to simply &quot;buy&quot; software. I mean we've always been at the mercy of companies with their license agreements and sometimes DRM, but now it's starting to feel even worse.</p>\n<p>If you go back ten years and you wanted the latest version of Microsoft Office, Adobe Photoshop, or just about any other piece of paid software, it was simple. You went online or to the store and you purchased it. You got the installer either digitally or on CD/DVD, probably a license key and you installed it.</p>\n<p>Nowadays, so many pieces of software require you to purchase a subscription in order to use it. Photoshop &amp; Lightroom can't be purchased standalone, you have to buy an Adobe Creative Cloud subscription for $10/month. Office is pushing people towards purchasing an Office 365 subscription instead of a standalone copy. Now apps on Apple's App Store and Google Play are getting in on the action. Now, no longer are you allowed to pay $5 for an app, now you have to pay $5/month to have all the features of the app.</p>\n<p>I write about this as I'm planning on getting back into my photography and am trying to decide how I want to handle my collection. I bought Adobe Lightroom 5 a while back (back when it was brand new which probably shows how long ago that was), but have since switched to using the $10/month Adobe Lightroom/Photoshop Bundle. Now that my old MacBook Pro bit the dust and I'm starting fresh on my new M1 MacBook Pro, I'm trying to decide if the $10/month is really worth it for how much I'm thinking I'll use it. Now, don't get me wrong; Lightroom &amp; Photoshop are fantastic pieces of software. They're incredibly powerful, and do what they were designed to do fantastically well. The issue stems from having to pay for them in perpetuity.</p>\n<p>Now I want to say unequivocally that I have absolutely no issue in paying for software. I'm a developer so I understand what it takes to build software and I believe that companies and developers should get paid. My problem with this model is that I can't simply buy the latest version of Lightroom or whatever other app or software I'm looking at. Like others, in the case of Lightroom, Adobe no longer sells Lightroom. All they sell is the subscription to <strong><em>USE</em></strong> it. Cancel your subscription, cancel your ability to use the software.</p>\n<p>A previous example of this is the app I used to use on my Mac, iPhone &amp; iPad. Airmail was my favorite email app for the longest time. It provided a bunch of useful extra features that I enjoyed. I paid for the app on both my iOS devices &amp; my Mac. Then all of a sudden, they jumped to a subscription-only model. If I wanted to continue using the app to its full capabilities (including notifications), I would have to start paying for a subscription. I was bummed, and that was the last time I used the app. I opted to go back to the default iOS &amp; Mac Mail apps. It annoyed me. I paid for the app and it felt like they were playing a bait and switch game. I paid for certain features and all of a sudden they pulled those features away from me. If they had released a new version and required me to pay for the new version with the new features, I would have been much more understanding. At that point, I would simply look at the new features they were offering and see if they were worth the additional money to me. If they were, I would have paid the money and bought the new version. Again, I'm not against paying for new versions or even new functionality. In Airmail's case, I was even more angry because they took away functionality that I felt that I paid for.</p>\n<p>I think another reason why I feel a little peeved about this is that in some of these cases, I feel like there's not a reason for a subscription outside of a money grab. Again, take Adobe Lightroom &amp; Photoshop as an example. I can't see any reason why someone shouldn't be able to be able to simply buy the software to use. There's no real reason why it needs to be subscription only. They offer Adobe Creative Cloud and cloud storage as part of the bundle, and if that was what they were charging for, so be it. But I don't use their cloud storage. I already pay for Dropbox for my cloud storage and I don't really need any of Adobe's sync functionality. Let me simply pay for the software and if I decide I do want the cloud offerings, I'll gladly pay for them. With Lightroom, I was able to find an old installer download, so I'll soon find out if it still works. If it does, great! If it doesn't, I think I'll give <a href=\"https://darkroom.co/\">Darkroom</a> a try.</p>\n<p>I guess what a lot of this boils down to is that I miss simply buying the software I use and not having to pay a subscription for it. I'm also worried that this will start to become more and more normal to the point where all of a sudden Windows 12 becomes subscription-only.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-09-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/08/25/running-a-531-lifting-routine/",
      "url": "https://kpwags.com/posts/2021/08/25/running-a-531-lifting-routine/",
      "title": "Running a 5/3/1 Lifting Routine",
      "content_html": "\n\t\t<p>Earlier this year, I posted about how I was tweaking my workout to a <a href=\"https://kpwags.com/posts/2021/01/28/tweaking-my-lifting-routine/\">6 day program</a>. That routine worked well for me, but then hockey started back up and I wasn't able to keep up. A new routine was in order, and I chose to build one based on <a href=\"https://www.jimwendler.com/blogs/jimwendler-com/101077382-boring-but-big\">Jim Wendler's 5/3/1 BBB (Boring But Big)</a> program.</p>\n<p>I've been running it for a couple months and I'm seeing some decent progress. I'm approaching my pre-pandemic weights on bench, squats &amp; deadlifts. I've also set a new PR on overhead press at 155 lbs. (I'm not entirely sure if this is 1:1 as I was doing standing overhead press, but now I have to do seated overhead press at home since my basement ceiling isn't tall enough). That said, I never hit 155 standing so I'll take it.</p>\n<p>It's definitely similar to how I was running my 6 day program, but it forces me to move up a little faster than I was in the past, which is good. It focuses on the 4 main lifts (overhead press, deadlift, bench press, &amp; squats) and runs on 4 week cycles. It again uses my 1 rep max (1RM) to calculate my training max (TM) (90% of my 1RM) which then calculates the weights I lift.</p>\n<p>For each of the main lifts, the sets are set up like.</p>\n<p><strong>Week 1:</strong></p>\n<ol>\n<li>5 reps at 65% of my TM</li>\n<li>5 reps at 75% of my TM</li>\n<li>5+ reps at 85% of my TM</li>\n<li>5 sets of 10 reps at 50% of my TM</li>\n</ol>\n<p><strong>Week 2:</strong></p>\n<ol>\n<li>3 reps at 70% of my TM</li>\n<li>3 reps at 80% of my TM</li>\n<li>3+ reps at 90% of my TM</li>\n<li>5 sets of 10 reps at 55% of my TM</li>\n</ol>\n<p><strong>Week 3:</strong></p>\n<ol>\n<li>5 reps at 75% of my TM</li>\n<li>3 reps at 85% of my TM</li>\n<li>1+ reps at 95% of my TM</li>\n<li>5 set of 10 reps at 60% of my TM</li>\n</ol>\n<p><strong>Week 4:</strong></p>\n<p>Deload. I basically just do the lifts at 50-60% intensity to give my muscles a break.</p>\n<p>I then up my 1RM for deadlifts &amp; squats by 10 lbs., and the 1RM for overhead press and bench press by 5 lbs., rinse, and repeat.</p>\n<p>The one thing I've been noticing on with squats and bench press is I feel like my brain is holding me back. There seems to be some kind of psychological component to it. Unlike the gym, I don't have access to a spotter so there's part of me that gets a little scared about the weights I'm lifting. I do have safety bars that will protect me for both lifts, but I always managed to lift heavier when I know someone is there to help if I start to go the wrong direction. Failure is a part of lifting and I have no shame in saying I've failed lifts on a multitude of occasions, but it's still scary when you have 200+ lbs. on your back or over your chest.</p>\n<p>But even with the psychogical aspect of the heavy weights, one of the reasons I like the program is how it has me moving up in weights. The progress is slow, but it's steady. I'm obviously not setting PRs every week, or even every other week, but I see and feel progress while limiting the &quot;scare&quot; factor.</p>\n<p>Anyway, here's the routine I'm running.</p>\n<h3>Day 1 - Overhead Press</h3>\n<ol>\n<li>Overhead Press</li>\n<li>Upright Row - 3 sets of 10-12</li>\n<li>Skullcrushers - 3 sets of 10-12</li>\n<li>Front Raise - 3 sets of 10-12</li>\n<li>Dumbbell Face Pulls - 3 sets of 15</li>\n<li>EZ Bar Curls - 3 sets of 10-12</li>\n<li>Pull Ups - As many as I can do</li>\n</ol>\n<h3>Day 2 - Deadlift</h3>\n<ol>\n<li>Deadlifts</li>\n<li>Front Squat - 3 sets of 10-12</li>\n<li>Standing Barbell Calf Raises - 3 sets of 12-15</li>\n<li>Russian Twists</li>\n<li>Ab Wheel</li>\n</ol>\n<h3>Day 3 - Bench Press</h3>\n<ol>\n<li>Bench Press</li>\n<li>Bent Over Barbell Row - 3 sets of 10-12</li>\n<li>Incline Bench Press - 3 sets of 10-12</li>\n<li>Hammer Curls - 3 sets of 12</li>\n<li>Single-Arm Dumbell Tricep Extensions - 3 sets of 12</li>\n<li>Dumbbell Face Pulls - 3 sets of 15</li>\n<li>Chin Ups - As many as I can do</li>\n</ol>\n<h3>Day 4 - Squat</h3>\n<ol>\n<li>Squats</li>\n<li>Romanian Deadlifts - 3 sets of 10-12</li>\n<li>Standing Barbell Calf Raises - 3 sets of 12-15</li>\n<li>Dumbbell Side Bends - 3 sets of 15</li>\n<li>Ab Wheel</li>\n</ol>\n<hr />\n<p>What's your routine, any lifts you swear by?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-08-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/07/24/halfway-through-2021/",
      "url": "https://kpwags.com/posts/2021/07/24/halfway-through-2021/",
      "title": "Halfway Through 2021",
      "content_html": "\n\t\t<p>I can't believe how fast we've gotten through the first half of 2021. It feels like despite the slow start, the year has just flown by. I figured I'd take a look back and see how I'm doing with what I've been doing this year, and how I've been faring with what I was hoping to focus on this year.</p>\n<h2>What I've Been Up To</h2>\n<h3>Playing Hockey Again</h3>\n<p>Until May, I wasn't fully vaccinated, so I opted to play it safe and limit my excursions outside the house. Now that I'm fully vaccinated, I've started to go back out into the world. This includes playing hockey again.</p>\n<p>I'm back to playing on the team I'm captain of. And I'm playing in the lower league as well. Sadly, I ended up losing my goalie spot as there are only 8 teams, so only 8 goalie positions. I am able to skate out with a good group of guys and girls so I'm still able to get more time on the ice. I'm on the sub list so I'm still able to play in net now and again. I'm hoping a spot will open up in the fall season so that I can start playing goalie again full time. I played in a tournament this past weekend as the netminder and had a lot of fun. Four games in three days made my legs a little unhappy...followed by a fifth game the next day, but it was totally worth it. I'm now playing hockey one or two times a week, and I'm happy to be back on the ice.</p>\n<h3>House Projects</h3>\n<p>The biggest project on my house was re-doing the kitchen cabinets. Our kitchen cabinets' paint was looking a little run down, and in some cases peeling, so we opted to sand them all down, re-paint them, and install new hardware. It was a lot of hard work, a bunch of cursing at various things, but the end result turned out great. The cabinets aren't anything to ooooh and ahhhh over, but they look a lot nicer and will hold off a needed kitchen remodel for the time being.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/GmGZUbFeFd-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/GmGZUbFeFd-1920.gif 1920w\" /><img alt=\"The end result of the kitchen cabinets refreshing\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/GmGZUbFeFd-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>I also ended up putting in a raised flower bed around one of our street lights. Again, nothing huge, but I liked how it turned out. Now all I need to do is get some new lights for the outside of the house.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/lj2Rpd1pMf-1080.webp 1080w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/lj2Rpd1pMf-1080.gif 1080w\" /><img alt=\"Adding a raised flower bed around the street light\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/lj2Rpd1pMf-1080.jpeg\" width=\"1080\" height=\"1440\" /></picture></p>\n<p>There have been a few other small projects here and there...there always are! (The joys of home ownership)</p>\n<h2>Looking at My Focus Points</h2>\n<h3>Staying Active</h3>\n<p>I've been pretty good with this one. I haven't been running nearly as much as I was planning, but I'm back to playing hockey and am continuing to strength train, so all's well on the active front. Diet needs work, but that's always the case. I'll get there I hope.</p>\n<h3>Improving My Development Skills</h3>\n<p>I feel like this one is going really well. Between work and my side project, I'm learning new ways of doing things and becoming more proficient in React &amp; TypeScript. Outside of the <a href=\"https://kpwags.com/2021/06/02/refactoring-loops.html\">refactoring loops</a>, I like where I am at with my never-ending coding journey. I'm trying to strike a balanace between also continuing forward with my <a href=\"https://kpwags.com/2021/04/27/switching-platforms.html\">blog rewrite</a>. I'm also going back and forth with how much I want to redesign my blog while rewriting it.</p>\n<h3>Reading More</h3>\n<p>I could be doing better here. Between late nights with hockey, video games, and other things, I haven't spent as much time reading as I would like.</p>\n<h3>Writing More</h3>\n<p>I'm not unhappy with where I am, but I could definitely be writing more. I have some ideas for some posts, so I suppose I should buckle down and start writing them.</p>\n<hr />\n<p>Let's finish out 2021 strong.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-07-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/06/02/refactoring-loops/",
      "url": "https://kpwags.com/posts/2021/06/02/refactoring-loops/",
      "title": "Refactoring Loops",
      "content_html": "\n\t\t<p>Ever feel like you can never completely get started with a project? That's sometimes how it feels with the fitness tracking app I'm building.</p>\n<p>But despite all this, I feel like I'm farther along than I was a month or two ago even without any new functionality added. How is that possible you ask? Well it really comes down to refactoring my code.</p>\n<h2>First, a Little Background</h2>\n<p>I haven't been seriously building apps in React for all that long. The first real app I built was Digital Family Cookbook. I was able to build it thanks to a course from Wes Bos on React &amp; GraphQL. My issue was that I didn't have a firm enough grasp with React and Node.js to really build what I wanted to. While definitely functional, Digital Family Cookbook is a little rough around the edges. Everything works, but it doesn't have the &quot;smooth feel&quot; one would come to expect from an app of its kind. At this point, I have the project on an indefinite hold as I try to decide what to do with it.</p>\n<h2>Taking Steps Forward</h2>\n<p>I wanted this new fitness app to be better. I wanted to make sure I had a better grasp of how everything pieces together to make an app that is much more smooth in action. This is one of the reasons I chose a .NET Core backend. I've been a .NET developer almost exclusively in all my jobs. And with how powerful and versatile .NET Core has become, it felt like a great option. No disrespect to Node, but I just feel more comfortable in the .NET ecosystem.</p>\n<p>I've also read a lot more into React as well to give me a better foundation. The only wildcard that I've really thrown in is introducing myself to TypeScript. I think I've gotten a good grasp on it now though. I feel like my knowledge of Javascript has put me in a good place.</p>\n<h2>Developing the App</h2>\n<p>From the beginning, I've felt much better about the architecture of the app. The backend isn't much of an issue as I have good understanding of C# and .NET. I've picked up on the new features of .NET Core pretty easily as well.</p>\n<p>I also started a new job at Webstaurant Store back in December. At Webstaurant Store, we have been using .NET Core, React, &amp; TypeScript. I have some great teammates and have been learning a great deal about these frameworks as well as some new tips and tricks with how to improve my code. In 5 short months I've already felt like I've improved with all of these tools tremendously. I've also been trying to read more blogs and other articles from fellow developers to try to get a better idea of how others do things.</p>\n<p>This has had its benefits, but it is also a double-edged sword. Looking at my experiences at Webstaurant Store and what I've been reading, I've ended up looking at the code I've written, only to realize that I can make it better. Needless to say, this has put me in a place where I end up in a constant refactoring loop.</p>\n<blockquote>\n<p>Don't Let Perfect Be the Enemy of Good</p>\n</blockquote>\n<p>I've heard this expression several times, &quot;Don't let perfect be the enemy of good&quot;. And it makes sense. Apps will never be perfect. Code will never be perfect. Don't wait to achieve perfection because you'll never end up reaching it. At some point, you have to have to recognize that it's good enough. So far with this project, I haven't exactly followed this advice so far. I've been focusing on trying to make sure that I have as good a foundation to build the app as possible. It's led to two major refactors that have basically caused me to have introduced no new functionality.</p>\n<h3>Entity Framework to Dapper</h3>\n<p>The first thing I ended up re-writing was moving the code away from Entity Framework over to <a href=\"https://github.com/DapperLib/Dapper\">Dapper</a>. This required me adjusting not only the backend C# code, but also writing Stored Procedures to interact with the database. I could've done a lot of it with inline SQL, but I generally feel like stored procedures are the way to go for most calls to the database. I made this switch because I felt like I could get slightly better performance through Dapper and hand-written SQL, and to get myself more familiar with the libraries I would be using at my new job. It might not have been the best reasoning, but I'm happy where things are. I have a database folder with all the creation scripts that should help me build the database quickly if and when it's needed. I do kind of miss the Entity Framework migrations though.</p>\n<p>I might be jumping ahead of myself, but I'm toying with using EF6 if I opt to rewrite Digital Family Cookbook in .NET.</p>\n<h3>Custom Components to Formik &amp; Material-UI</h3>\n<p>While switching to Dapper took a chunk of time, it was by no means the biggest. I had been unhappy with how some of the forms were working. I was seeing some of the roughness I experienced with Digital Family Cookbook. Not to the same level, but enough that I decided it would be worth it to look into some form libraries rather than my custom built forms. I settled on <a href=\"https://formik.org/\">Formik</a>. The conversion was going so well, I decided I'd also look into a full UI framework rather than rolling my own. &quot;In for a penny, in for a pound&quot; the expression goes. I decided to switch to using the <a href=\"https://material-ui.com/\">Material-UI Framework</a>. I ended up spending several weeks converting all the pages I had built to use Material-UI rather than the homecooked components. Thankfully I had only build out the settings pages so there wasn't a ton I had to redo, but you can see where this refactoring loop comes into play.</p>\n<h2>Onward</h2>\n<p>While it has certainly been less-than-ideal to be sort of running in place in terms of functionality, the changes that I made turned out well. I feel more confident in this app's foundation and the ability to add the new functionality on top of it.</p>\n<p>Are there still things I need to improve? Of course there are...there always are. I just have to keep reminding myself that I can always come back to it later if it's working well. Just because it's &quot;good enough&quot;, doesn't mean I shouldn't try to continue to make it better. It just means that I can move onto what's next.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-06-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/04/27/switching-platforms/",
      "url": "https://kpwags.com/posts/2021/04/27/switching-platforms/",
      "title": "Switching Platforms",
      "content_html": "\n\t\t<p>I've been using Jekyll to run this blog for the better part of the last six years. But recently, I've been giving serious consideration to switching to Gatsby or Next.js.</p>\n<p>I have several reasons for making the move away from Jekyll. Some is pure personal preference, some involves the technology used, and part of it is to learn something new.</p>\n<h2>Missing Features &amp; Personal Preference</h2>\n<p>There are several features I've been wanting to add to my blog. The biggest one is probably search. I've been looking into adding search, and while possible, doesn't seem as easy as I would hope it to be. Part of this also comes down to the fact the Jekyll is built on Ruby, which is not a language I know all that well. I've been able to keep this going, but it's still a hill to climb. This is the personal preference part of things. I'm a .NET &amp; Javascript developer primarily, and that's where my comfort zone is. It's not a knock on Ruby, just not something I want to spend a lot of time delving into.</p>\n<h2>The Tech Stack</h2>\n<p>I also wanted to move to a stack I better understood. I've been working with React for a couple years on the side, and now I'm using it professionally as well. I thought it would be beneficial and easier to work with if I had a better understanding of the tools &amp; language used.</p>\n<p>Another thing I was looking into improving was my build/deployment process. I host my blog on AWS using their S3 storage. The upside is that hosting is dirt cheap for me (granted there's very little processing power for my site, nor do I have many visitors). The downside is that there's a lot of caching involved so any changes can take a day or so to be reflected. There are ways around this of course, but I'm a little cost-conscious and am worried about racking up too large a bill. This can also cause any embarassing bugs or typos (or anything else really) to be visible for much longer than I'd like.</p>\n<h2>Making the Switch</h2>\n<p><picture><source type=\"image/svg+xml\" srcset=\"https://kpwags.com/img/dWnopQehsM-207.svg 207w\" /><source type=\"image/webp\" srcset=\"https://kpwags.com/img/dWnopQehsM-207.webp 207w\" /><img alt=\"The Next.js Logo\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/dWnopQehsM-207.gif\" width=\"207\" height=\"124\" /></picture></p>\n<p>I've given it a fair amount of thought and right now I believe I will be starting the design and implementation of my blog using Next.js. I used Next.js with <a href=\"https://advancedreact.com/\">Wes Bos' Advanced React &amp; GraphQL Course</a> &amp; <a href=\"https://github.com/kpwags/digitalfamilycookbook\">Digital Family Cookbook</a> so I have some familiarity with it over Gatsby. But while I have some familiarity with it, it wasn't heavily used in either project so I figure this will also be a learning project.</p>\n<h2>The Process</h2>\n<p>I plan on building this out in the open and will be starting with a <a href=\"https://github.com/kpwags/new.kpwags.com\">brand new public repository on GitHub</a>. I'm going to build it using feature branches (like I've been doing with my fitness tracker) with issues created for most work. Unlike my current blog where I mostly just work off of the main branch, I'll be doing this one the &quot;proper&quot; way. I'm even planning on keeping at it with future posts.</p>\n<p>I'm also hoping to write about how things are going and the progress I'm making as well as why I've chosen doing things the way I do. I've also been toying with streaming some of the development on <a href=\"https://www.twitch.tv/kpwags\">Twitch</a>.</p>\n<p>There's no rush to build this, so while I'm going to try to devote some time on it regularly, I also want to continue to work on my fitness tracker. So keep checking back as I'm sure there will be more posts between now and when I officially make the switch.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-04-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/04/06/three-months-down-in-2021/",
      "url": "https://kpwags.com/posts/2021/04/06/three-months-down-in-2021/",
      "title": "Three Months Down in 2021",
      "content_html": "\n\t\t<p>I still can't believe it's already April, it really seems like it was just New Year's yesterday. Alas, I figured I'd check in with how I'm doing with my goals.</p>\n<h2>Staying Active</h2>\n<p>I've been doing a good job staying active. I'm lifting 5-6 days a week, I'm running more now that the weather's gettiing a little nicer. I feel generally pretty good about my activity level. My issue is that I struggle with the willpower to lay off the snacking. Now that I'm working from home, it's a little too easy to just munch on things here and there. I'm a little disappointed in myself sometimes, but I also do my best to remember that it's also not that big of a deal. I'm hoping to focus this month on trying to stick within my calorie goals.</p>\n<h2>Improving My Development Chops</h2>\n<p>I'm continuing to learn both at work, and at home. I'm continuing work on my fitness tracker app. It's development is taking a little bit of a roundabout, which I'm currently writing a post to explain. The important thing is that I'm making progress and generally feeling accomplished with what I'm producing.</p>\n<h2>Continuing to Read</h2>\n<p>I'm on my fifth book of the year and have mixed in keeping up with my <em>Economist</em> subscription, so I'm happy with where I'm at. It's nice getting into bed a little early, winding down reading before going to sleep.</p>\n<h2>Write More</h2>\n<p>I'll chalk this up as a mixed bag. I have a whole bunch of post ideas and some started. I just need to actually take the time to sit down and write them up. A lot of them are more in-depth than posts like this one.</p>\n<h2>Everything Else</h2>\n<p>I ended up getting my first COVID-19 shot mid-March. I am getting my second this weekend &amp; my wife is next week, so I'm happy to really see the beginning of the end of this thing. Hopefully more people can line up appointments and get the shot. I'm also hoping I'll be able to start playing hockey again soon too.</p>\n<p>I also ended up re-doing my office this past week. I switched from an ultrawide monitor to dual 27&quot; 4k monitors. I have to say I like the extra screen real estate. I ended up moving my ultrawide downstairs to use for work. Since both my wife and I work from home and regularly have calls, I ended up creating a second office in my basement for work so that we're not interfering with each other. An added benefit of this setup is that it gives me some separation between &quot;home&quot; and &quot;work&quot;. When I'm downstairs, I'm working; when I'm upstairs, I am on my own time.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/CCT3z9eDHG-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/CCT3z9eDHG-1920.gif 1920w\" /><img alt=\"My new desk setup with dual 27'' 4k monitors\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/CCT3z9eDHG-1920.jpeg\" width=\"1920\" height=\"1167\" /></picture></p>\n<p>My wife and I have now also started to re-do the kitchen cabinets. It's a smaller home improvement project, but we're taking the cabinet doors off, sanding and re-painting everything, and installing new hardware. It's not exactly HGTV-worthy, but it should spruce the kitchen up a little bit until we get around to redoing it entirely.</p>\n<hr />\n<p>Still not much to report, but figured I'd post this to help keep myself accountable. Stay safe out there!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-04-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/03/01/two-months-down-in-2021/",
      "url": "https://kpwags.com/posts/2021/03/01/two-months-down-in-2021/",
      "title": "Two Months Down in 2021",
      "content_html": "\n\t\t<p>I can't quite decide if this year is flying by...or dragging on...and on...and on.</p>\n<p>I'm not entirely sure why it feels like time has slowed down. The pandemic is still gripping the nation, I'm still stuck in quarantine with my wife. Nothing has really changed for me from say September of last year to now. The only big difference is that it's not as fun to be outside right now with the cold and all the snow. Seriously, I think I've used my snowblower more this year than in the previous 5 years I've owned my house combined. But not wanting to be outside doesn't really feel like it's the reason this year feels like it's been dragging. The weather doesn't normally affect me like this, so I'm guessing the pandemic and everything that goes along with it is finally starting to get to me.</p>\n<p>As rough as it's felt though, it hasn't been an awful year. I've been doing a good job at sticking with my 2021 goals. I've been enjoying and thriving at my new job. I've been able to enjoy weekends and evenings with my wife. All in all, it's been a good two months so far.</p>\n<h2>Staying Active</h2>\n<p>I've been doing a good job of staying active around 6 days a week. My primary activity is lifting, but I've also been bringing out my bike trainer I got for Christmas a couple years ago. I've been hesitant with the cold, snow and ice to run. The last thing I want to do is slip, fall and twist my ankle (or worse). The bike trainer gives me the ability to get my heart rate up and get a cardio workout in to supplement my lifting.</p>\n<h2>Improving My Development Chops</h2>\n<p>I can't say there's been a lot to say here. I'm learning a lot at my new job and am continuing on with my fitness tracker project, so I'm going to count that as a continued success.</p>\n<h2>Reading More</h2>\n<p>Again, not much to say here, I'm on my fourth book of the year. Haven't always felt like reading books every night, but I have done a better job at keeping up with my RSS feeds.</p>\n<h2>Wrtiting More</h2>\n<p>I feel like I've done a little better with this. Two months in, I have almost half the number of posts I had in 2020. I think I'll be able to keep this up.</p>\n<hr />\n<p>All in all, there's not much to report. I'm just gonna keep doing my thing and hoping that I will be eligible for the COVID vaccine sooner than I figure.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-03-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/02/10/some-small-site-updates/",
      "url": "https://kpwags.com/posts/2021/02/10/some-small-site-updates/",
      "title": "Some Small Site Updates",
      "content_html": "\n\t\t<p>Over the course of the last couple weeks, I've made some small improvements to my site. None of them are particularly huge, but I like the end result.</p>\n<h2>Adjusted the Header</h2>\n<p>I decided to change up the header a little bit. The header isn't horribly different from before, but now I decided to make it span the full width of the browser window. I also added a link to the RSS feed since I feel that's an important feature in today's web. It might have fallen out of favor in some circles, but I still love it. I also moved the light/dark mode switcher from the footer to the header and made it a little more descriptive with a sun and moon icon.</p>\n<h2>Adjusted the Footer</h2>\n<p>I also decided to adjust the footer, re-laying out the links and allowing it to fill the full browser window.</p>\n<h2>Removed SASS</h2>\n<p>SASS came pre-bundled with Jekyll so when I built the original version of my blog, it made sense to just go with it. Since then, CSS has gotten official variable support as well as a whole bunch of other nice features, so I decided to swap it out with plain old CSS. The conversion wasn't too bad and I feel like I was able to clean up the CSS some in the process, particularly with the light and dark mode.</p>\n<p>CSS variables just make applying a light/dark theme so simple</p>\n<pre class=\"language-css\" tabindex=\"0\"><code class=\"language-css\"><span class=\"token selector\">:root</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">--font-family</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'Maven Pro'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Segoe UI'</span><span class=\"token punctuation\">,</span> Helvetica<span class=\"token punctuation\">,</span> Arial<span class=\"token punctuation\">,</span> sans-serif<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--background</span><span class=\"token punctuation\">:</span> #ededed<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--background-image</span><span class=\"token punctuation\">:</span> <span class=\"token url\"><span class=\"token function\">url</span><span class=\"token punctuation\">(</span><span class=\"token string url\">'/assets/images/background.png'</span><span class=\"token punctuation\">)</span></span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--font-color</span><span class=\"token punctuation\">:</span> #444444<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--blue-medium</span><span class=\"token punctuation\">:</span> <span class=\"token function\">rgb</span><span class=\"token punctuation\">(</span>6<span class=\"token punctuation\">,</span> 44<span class=\"token punctuation\">,</span> 156<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--blue</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>215.9<span class=\"token punctuation\">,</span> 100%<span class=\"token punctuation\">,</span> 40%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--box-shadow</span><span class=\"token punctuation\">:</span> 0 12px 24px 0 <span class=\"token function\">hsla</span><span class=\"token punctuation\">(</span>0<span class=\"token punctuation\">,</span> 0%<span class=\"token punctuation\">,</span> 0%<span class=\"token punctuation\">,</span> 0.2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--dark-grey</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>0<span class=\"token punctuation\">,</span> 0%<span class=\"token punctuation\">,</span> 40%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--review-border-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">var</span><span class=\"token punctuation\">(</span>--blue<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--svg-display-lightmode</span><span class=\"token punctuation\">:</span> inline<span class=\"token punctuation\">;</span>\n    <span class=\"token property\">--svg-display-darkmode</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token atrule\"><span class=\"token rule\">@media</span> <span class=\"token punctuation\">(</span><span class=\"token property\">prefers-color-scheme</span><span class=\"token punctuation\">:</span> dark<span class=\"token punctuation\">)</span></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token selector\">:root</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token property\">--background</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>0<span class=\"token punctuation\">,</span> 0%<span class=\"token punctuation\">,</span> 13.3%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--background-image</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--font-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>0<span class=\"token punctuation\">,</span> 0%<span class=\"token punctuation\">,</span> 93.7%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--blue-medium</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>209.1<span class=\"token punctuation\">,</span> 78.5%<span class=\"token punctuation\">,</span> 43.7%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--blue</span><span class=\"token punctuation\">:</span> <span class=\"token function\">hsl</span><span class=\"token punctuation\">(</span>199<span class=\"token punctuation\">,</span> 98.3%<span class=\"token punctuation\">,</span> 45.9%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--review-border-color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">rgb</span><span class=\"token punctuation\">(</span>239<span class=\"token punctuation\">,</span> 239<span class=\"token punctuation\">,</span> 239<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--svg-display-lightmode</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n        <span class=\"token property\">--svg-display-darkmode</span><span class=\"token punctuation\">:</span> inline<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n<h2>Changed the Light/Dark Mode Toggle</h2>\n<p>Besides the switch itself, I also changed how I handle overriding the system's theme. The CSS variables definitely helped with this, although I have an item on my to-do list to see if I can't improve this a little more. If you're a user who overrides your system theme, there might be a momentary flash of the system theme before your override takes effect. It's still an option though so I feel like that's a plus.</p>\n<h2>Started Working with SVGs</h2>\n<p>SVGs were something that I only recently started looking at. I decided to go with SVGs for both the theme switch and the RSS icon at the top. Learning <a href=\"https://inkscape.org/\">Inkscape</a> as well as how to integrate it into the page was a fun challenge.</p>\n<h2>My 'Likes' Page</h2>\n<p>I used to run weekly posts with links I've liked. I've decided to take a page from <a href=\"https://daverupert.com/\">Dave Rupert</a> and simply add a page that lists recent articles, podcasts, or anything else that catches my eye. I liked his idea of using his Feedbin starred feed, but felt like I might as well make it manually as I find things elsewhere that I'd want to include. You can veiw this on my <a href=\"https://kpwags.com/likes\">Likes page</a>.</p>\n<h2>Updated Bookshelf &amp; Movies</h2>\n<p>My <a href=\"https://kpwags.com/bookshelf\">reading list &amp; bookshelf</a>, as well as my <a href=\"https://kpwags.com/movies\">movies</a> used very similar code to render. I opted to condense the JS that handles them as well as the CSS to make the pages easier to manage. I also ended up shrinking the images and expanding the width some to allow more content to be viewed at once.</p>\n<hr />\n<p>I generally like how my blog looks so I didn't go hog-wild, but it was nice to &quot;freshen&quot; it up a bit. I have a few more things I'm thinking of doing, but let me know what you think so far.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-02-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/02/03/unit-testing-with-msw/",
      "url": "https://kpwags.com/posts/2021/02/03/unit-testing-with-msw/",
      "title": "Unit Testing with MSW",
      "content_html": "\n\t\t<p>A little while back, I started a new project. I have been using <a href=\"https://kpwags.com/posts/2020/01/21/tracking-my-fitness-journey/\">spreadsheets to track a lot of my fitness goals</a>. This approach generally works, but I thought it would be easier if I had an app for that. So I did what any self-respecting fitness enthusiast developer would do...make one myself! But with that, also come unit tests.</p>\n<p>There are a whole bunch of options out there to track this stuff, but not all of them do everything, and they don't do what I think works for me. I also figured that I'm a developer and I could build myself something that works for what I'm looking for. I was also itching to try out Typescript &amp; React, as well as the .NET Core Web API.</p>\n<p>Not to get too in the weeds, but with this project, I wanted to do unit testing as I develop rather than at the end like I did with Digital Family Cookbook. The one thing I realized that I needed to do was be able to mock the API calls on the frontend. I stumbled upon a great post by Kent C. Dodds talking about how we <a href=\"https://kentcdodds.com/blog/stop-mocking-fetch\">shouldn't be mocking window.fetch</a>. In it, he talks about <a href=\"https://github.com/mswjs/msw\">MSW</a>, short for Mock Service Worker and how we can use that to intercept and mock our data calls.</p>\n<p>I decided to give it a try and I have to say that I'm seriously impressed with how easy it is to setup and use. I figured I'd spend a little bit of time here going through how to quickly set it up and how to use it.</p>\n<h2>Install</h2>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$ <span class=\"token function\">npm</span> <span class=\"token function\">install</span> msw --save-dev</code></pre>\n<p>or</p>\n<pre class=\"language-bash\" tabindex=\"0\"><code class=\"language-bash\">$ <span class=\"token function\">yarn</span> <span class=\"token function\">add</span> msw <span class=\"token parameter variable\">--dev</span></code></pre>\n<h2>Setup</h2>\n<p>I have a folder in my <strong><code>/src</code></strong> directory called <strong><code>test</code></strong> that holds my basic testing configuration. You can put these files in a different directory if you have your project laid out differently, but the handlers and the server setup are how your fetch calls get handled for your unit tests.</p>\n<h3>Create Your Handlers</h3>\n<p>MSW works by having a list of handlers that handle the various different fetch calls. You specify the endpoint and when window.fetch calls the endpoint, instead of interacting with your API, it interacts with the mock server.</p>\n<h4><code>/src/test/server-handlers.ts</code></h4>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> rest <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'msw'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> handlers <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token comment\">// retrieve a user by their ID</span>\n    rest<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'*/users/getuserbyid'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">,</span> ctx</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> id <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">.</span>searchParams<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'id'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">const</span> userId <span class=\"token operator\">=</span> <span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>userId <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">return</span> <span class=\"token function\">res</span><span class=\"token punctuation\">(</span>\n                    ctx<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                    ctx<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n                        <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> userId<span class=\"token punctuation\">,</span>\n                        <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Keith Wagner'</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token literal-property property\">email</span><span class=\"token operator\">:</span> <span class=\"token string\">'testing@testing.comm'</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token function\">res</span><span class=\"token punctuation\">(</span>\n            ctx<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">400</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            ctx<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> <span class=\"token string\">'User does not exist'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\n    <span class=\"token comment\">// save a user</span>\n    rest<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">'*/users/saveuser'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">_<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">,</span> ctx</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span>\n        <span class=\"token function\">res</span><span class=\"token punctuation\">(</span>\n            ctx<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n            ctx<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n                <span class=\"token literal-property property\">successful</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">user</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Keith Wagner'</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token literal-property property\">email</span><span class=\"token operator\">:</span> <span class=\"token string\">'testing@testing.comm'</span><span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> handlers <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Let's take a look at this code. This is where you specify how each endpoint will respond to the API call.</p>\n<p>Let's take a look at the first handler where I'm getting a user by their ID. My React component might need to handle a situation where the user being looked up doesn't exist. In this case, I can add some logic in the handler to return an error in this case when the ID is less than zero. That way I can test how the component handles an unknown user by passing in a negative number (or zero), while returning the user's info for other requests.</p>\n<p>Not all handlers need to be as complex. If you look at the second item where I'm saving a user, you'll see that I don't have any logic around the request, I just send back a success message. Depending on what you're testing, you might not need to do any additional handling of requests and responses.</p>\n<p>Just make sure to add a handler for every fetch call.</p>\n<h3>Setup Your Server</h3>\n<h4><code>/src/test/server.ts</code></h4>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> setupServer <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'msw/node'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> handlers <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./server-handlers'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// create the server object by passing in your handlers</span>\n<span class=\"token keyword\">const</span> server <span class=\"token operator\">=</span> <span class=\"token function\">setupServer</span><span class=\"token punctuation\">(</span><span class=\"token operator\">...</span>handlers<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> server <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This code sets up your server by passing in the handlers you created above and passing them as an argument to the setupServer object from MSW.</p>\n<h3>Setup Your Tests</h3>\n<h4><code>/src/setupTests.ts</code></h4>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> server <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./test/server'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">beforeAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// start up the server</span>\n    server<span class=\"token punctuation\">.</span><span class=\"token function\">listen</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        <span class=\"token function\">onUnhandledRequest</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">req</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            console<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Found an unhandled %s request to %s'</span><span class=\"token punctuation\">,</span> req<span class=\"token punctuation\">.</span>method<span class=\"token punctuation\">,</span> req<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">.</span>href<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">afterEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> server<span class=\"token punctuation\">.</span><span class=\"token function\">resetHandlers</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">afterAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> server<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>This code imports your mock server and tells it to start listening before running any tests, and then resets the handlers and closes the mock server when testing is complete.</p>\n<p>When starting the server in the <strong><code>beforeAll</code></strong> function, I like to pass in the <strong><code>onUnhandledRequest</code></strong> argument. I sometimes forget about calls to the API when writing the tests, so if a window.fetch call is made that I don't handle, it will output an error message to the console letting me know what call was made so I can go back in and handle it. It's not necessary, but I've found it useful now and again.</p>\n<h3>Telling Jest About MSW</h3>\n<h4><code>/jest.config.js</code></h4>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\">module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">setupFilesAfterEnv</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'./src/setupTests.ts'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre>\n<p>Jest needs to know that MSW exists so that it can start the listener. In the setupFilesAfterEnv array, make sure to add the <strong><code>/src/setupTests.ts</code></strong> file.</p>\n<h2>Final Thoughts</h2>\n<p>This is basically all there is to the setup. Anytime your frontend makes a fetch call, instead of going to the actual endpoint, it will instead go to your mock server. For me this makes this portion of testing easy as I can worry about unit-testing the API separately and focus primarily on the components and frontend. MSW makes configuring the handlers is simple and easy while still providing you the ability to handle edge case and error logic as needed. I would highly recommend giving it a try.</p>\n<h2>One Last Thought</h2>\n<p>One other cool thing about MSW is that you can also use it for development as well as testing. I can't really attest to it as I don't use it for this use case, but MSW allows you to setup a service worker to handle your requests as you develop. If you don't have access to your backend locally or don't want to play around with your database for whatever reason, you can <a href=\"https://mswjs.io/docs/getting-started/integrate/browser\">set it up</a> to play the backend for your development work as well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-02-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/01/28/tweaking-my-lifting-routine/",
      "url": "https://kpwags.com/posts/2021/01/28/tweaking-my-lifting-routine/",
      "title": "Tweaking My Lifting Routine",
      "content_html": "\n\t\t<p>Looking back at the last two months, I've noticed I've done a pretty good job of hitting the weights 5-6 days a week. Because of this, I decided I'd tweak my routine a little bit to help jumpstart some gains.</p>\n<p>Since I <a href=\"https://kpwags.com/posts/2020/08/04/so-i-finally-built-a-home-gym/\">built my home gym</a>, I've been running a 4 day version of a 5/3/1 plan mixed with the <a href=\"https://www.muscleandstrength.com/workouts/phul-workout\">PHUL</a> plan. This has generally worked out well for me. I was able to regain a decent chunk of the strength I lost. Now that I'm lifting around 6 days a week, I figured I'd add 2 more days worth of lifting to my cycle to hopefully help make more gains easier.</p>\n<p>I thought I'd share the routine I've built myself in hopes that maybe it'll help inspire you or give you ideas on how to improve or build yours.</p>\n<h2>Some Terminology and Background</h2>\n<p>I base the weights of the 4 big lifts (Overhead Press, Bench Press, Squat &amp; Deadlift) off of what they call the &quot;Training Max&quot; or TM. This is basically 90% of your 1 rep max (1RM), which refers to the heaviest weight that you can do a single rep of the exercise. So when I say &quot;5 @ 75%&quot;, that means I am doing 5 reps at 75% of my Training Max. So if my TM is 100 lbs., I'd be doing 5 reps at 75 lbs.</p>\n<p>You'll also notice for Mondays through Thursdays, I start with the big lift 5 @ 75%, 3 @ 85%, &amp; 1+ @ 95%. That final '1+' set is the key set. That's what determines when I increase my TM. If I can do at least 5 reps at 95% of my TM, then I bump up my TM by 5 lbs. Some people only use 3 as the cutoff, but I prefer 5...it's a personal choice.</p>\n<p>The other notations should be self explanatory. &quot;3 x 8-12&quot; means 3 sets of 8-12 reps.</p>\n<h2>The Routine</h2>\n<h3>Mondays - Overhead Press</h3>\n<ol>\n<li><strong>Overhead Press</strong>: 5 @ 75%, 3 @ 85%, 1+ @ 95%</li>\n<li><strong>Bench Press</strong>: 5 x 10 @ 60%</li>\n<li><strong>Barbell Row</strong>: 3 x 8-12</li>\n<li><strong>Front Dumbbell Raise</strong>: 4 x 10-12</li>\n<li><strong>Barbell Shrug</strong>: 3 x 8-12</li>\n<li><strong>EZ Bar Curl</strong>: 4 x 8-12</li>\n<li><strong>Skullcrusher</strong>: 4 x 8-12</li>\n<li><strong>Twenty-Ones</strong>: 1 x Narrow Grip, 1 x Wide Grip, 1 x Reverse Grip</li>\n</ol>\n<h3>Tuesdays - Deadlift</h3>\n<ol>\n<li><strong>Deadlift</strong>: 5 @ 75%, 3 @ 85%, 1+ @ 95%</li>\n<li><strong>Squat</strong>: 5 x 10 @ 60%</li>\n<li><strong>Romanian Deadlift</strong>: 3 x 8-12</li>\n<li><strong>Standing Calf Raise</strong>: 4 x 10-12</li>\n<li><strong>Russian Twist</strong>: 4 x 15-20</li>\n<li><strong>Ab Wheel</strong>: 4 x 10+</li>\n</ol>\n<h3>Wednesdays - Bench Press</h3>\n<ol>\n<li><strong>Bench Press</strong>: 5 @ 75%, 3 @ 85%, 1+ @ 95%</li>\n<li><strong>Overhead Press</strong>: 5 x 10 @ 60%</li>\n<li><strong>Dumbbell Row</strong>: 4 x 10-12</li>\n<li><strong>Dumbbell Bench Press</strong>: 4 x 10-12</li>\n<li><strong>Hammer Curl</strong>: 4 x 8-12</li>\n<li><strong>Dumbbell Fly</strong>: 3 x 8-12</li>\n<li><strong>Overhead Tricep EZ Bar Extension</strong>: 4 x 8-12</li>\n<li><strong>Twenty-Ones</strong>: 1 x Narrow Grip, 1 x Wide Grip, 1 x Reverse Grip</li>\n</ol>\n<h3>Thursdays - Squat</h3>\n<ol>\n<li><strong>Squat</strong>: 5 @ 75%, 3 @ 85%, 1+ @ 95%</li>\n<li><strong>Deadlift</strong>: 5 x 10 @ 60%</li>\n<li><strong>Front Squat</strong>: 3 x 8-12</li>\n<li><strong>Seated Calf Raise</strong>: 4 x 10-12</li>\n<li><strong>Dumbbell Side Bends</strong>: 4 x 15-20</li>\n<li><strong>Ab Wheel</strong>: 4 x 10+</li>\n</ol>\n<h3>Fridays - Upper Body</h3>\n<ol>\n<li><strong>Bench Press</strong>: 4 x 6 @ 75%</li>\n<li><strong>Overhead Dumbbell Press</strong>: 4 x 8-12</li>\n<li><strong>Close-Grip Bench Press</strong>: 3 x 8-12</li>\n<li><strong>Upright Row</strong>: 3 x 8-12</li>\n<li><strong>Zottman Curl</strong>: 4 x 8-12</li>\n<li><strong>Dumbbell Tricep Extension</strong>: 4 x 8-12</li>\n<li><strong>Timed Farmer Carries</strong>: 3x</li>\n<li><strong>Twenty-Ones</strong>: 1 x Narrow Grip, 1 x Wide Grip, 1 x Reverse Grip</li>\n</ol>\n<h3>Saturdays - Lower Body</h3>\n<ol>\n<li><strong>Squat</strong>: 4 x 6 @ 75%</li>\n<li><strong>Sumo Deadlift</strong>: 4 x 6 @ 75%</li>\n<li><strong>Bulgarian Split Squat</strong>: 3 x 8-12</li>\n<li><strong>Hip Thrust</strong>: 3 x 8-12</li>\n<li><strong>Seated Calf Raise</strong>: 4 x 10-12</li>\n<li><strong>Russian Twist</strong>: 4 x 15-20</li>\n<li><strong>Ab Wheel</strong>: 4 x 10+</li>\n</ol>\n<p><em>Edit (2/1/21 7:13pm): Typos</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-01-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/01/14/my-typical-weekday/",
      "url": "https://kpwags.com/posts/2021/01/14/my-typical-weekday/",
      "title": "My Typical Weekday",
      "content_html": "\n\t\t<p>I've seen posts like this going around so I figured I'd share what my typical weekday looks like.</p>\n<ul>\n<li><strong>5:45am:</strong> Wake up. Feed the cat, take the dog out and feed him. Weigh myself and get ready to workout.</li>\n<li><strong>6:15am - 7:30am:</strong> Work out. Most often, this is lifting weights, but I might hop on my bike trainer instead from time-to-time.</li>\n<li><strong>7:30am:</strong> Make coffee, take a shower and brush my teeth.</li>\n<li><strong>8:00am:</strong> Start work. I've only been at my current job a little over a month, so meetings tend to be all over the place.</li>\n<li><strong>12:00pm:</strong> Go for a walk, a short run or the bike trainer when I can. Have a quick bite to eat after.</li>\n<li><strong>1:00pm:</strong> Back to work for the afternoon.</li>\n<li><strong>5:00pm:</strong> The work day is over. I'll generally cook dinner around now. If it's leftovers, I might play a video game or mess around for a little bit.</li>\n<li><strong>6:00pm:</strong> Eat dinner with my wife and then feed the animals their dinner.</li>\n<li><strong>6:30pm:</strong> Start enjoying the evening. I'll generally laze about. Sometimes I'll watch some TV, play some video games or work on my side projects.</li>\n<li><strong>8:00pm:</strong> Start getting ready for bed. I'll brush my teeth and lay things out for the next day.</li>\n<li><strong>8:30pm:</strong> Hop into bed and read for an hour to an hour and a half. Sometimes it's a book, sometimes it's the news, sometimes it's just mindlessly browsing the internet.</li>\n<li><strong>9:30 - 10:00pm:</strong> Lights out and go to bed.</li>\n</ul>\n<p>This has changed a bit since I started my new job at Webstaurant and I've grown accustomed to it. My lunch hour will probably change a bit once it starts staying light out longer, but for now this has been working for me.</p>\n<p>I'd love to see how other people, both developers and others structure their days.</p>\n<p><em>Edit (1/14/21 8:16pm): Typo</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-01-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2021/01/02/ending-the-trainwreck-that-was-2020/",
      "url": "https://kpwags.com/posts/2021/01/02/ending-the-trainwreck-that-was-2020/",
      "title": "Ending the Trainwreck that was 2020",
      "content_html": "\n\t\t<p>I think it's probably the world's biggest understatement to say that 2020 did not go the way I had envisioned it to go. And yet, the year has now come to a close.</p>\n<p>If I had to come up with one <em>polite</em> word to use for 2020, it would probably be <strong>Trainwreck</strong>. I feel like that describes this year so perfectly. The year came to an abrupt &quot;oh shit&quot; moment in mid-March when COVID-19 spread across the world like nothing we've seen before. In the late spring and early summer we <em><strong>again</strong></em> faced the reality of social unrest after more murders of black men and women at the hand of the police. And to top it all off, in the fall we dealt with an election like no other took place between a raging, narcissistic, wannabe dictator and a capable, qualified candidate. One wouldn't be blamed at all for forgetting that a lot of other things took place throughout the year.</p>\n<p>But I think at this point, I'll look a little closer to home.</p>\n<h2>What My Year Looked Like</h2>\n<p>First, I want to say that I am grateful for everything I have. As much as 2020 has sucked, the one thing that it has done is make me realize how much I have. I have a wonderful wife who I love more than anything. Without her, I don't know how I could've made it through some of the darker days of the year. I have my health and a job that allows me to work from home. I know others aren't nearly as fortunate.</p>\n<p>My year started out like any other. I had set up 4 basic goals.</p>\n<ul>\n<li>\n<p><strong>Diet (the one we're all always working on)</strong>: You'd think that this one wouldn't be too bad given that I cooked at home a lot more... Sadly, this wasn't the case...being home made it a little too easy to snack on things. Oh well. Given the lousy year, I'm not all that upset about it. I managed to do a lot of other things in my fitness realm. I <a href=\"https://kpwags.com/2020/08/04/so-i-finally-built-a-home-gym.html\">built a home gym</a> I ended up <a href=\"https://kpwags.com/2020/12/16/reflections-on-my-running-streak-coming-to-an-end.html\">running 175 days in a row</a> and I topped 800 miles running for the year. Not perfect, but I'm mostly content with what I was able to do fitness-wise all things considered.</p>\n</li>\n<li>\n<p><strong>Finish Digital Family Cookbook</strong>: I got so close on this one. For the moment it's code-complete, but I suspect that there's more I need to do to clean it up. I also need to figure out how to package it. Like many side projects, I got side-tracked by other, more-shiny things. I decided I needed to brush up on my .NET skills and learn what .NET Core is all about so I ended up using it to <a href=\"https://kpwags.com/2020/07/05/so-i-finally-finished-a-side-project.html\">rebuild Where Do You Want to Eat</a>. I ended up having to take it down due to hosting costs (I think I've found a more cost-effective alternative), but I can happily say I finished it. I also started a new side project to replace <a href=\"https://kpwags.com/2020/01/21/tracking-my-fitness-journey.html\">many of the spreadsheets I use to track my fitness</a>. It's relatively early on in development, but I'm using it as a learning project for building a .NET Core Web API and for teaching myself TypeScript. It's no wonder Digital Family Cookbook is sitting idle...</p>\n</li>\n<li>\n<p><strong>Read More</strong>: This one I can say I was able to do. As my <a href=\"https://kpwags.com/reading-list/\">reading list</a> shows, I was able to read quite a bit more this year compared to last. My reading mixed both fiction and nonfiction well. As much as I like learning when I read, sometimes it's nice to leave the world of reality into a good story.</p>\n</li>\n<li>\n<p><strong>Write More</strong>: This one was mixed. I feel like I wrote more posts, but don't really know. Given everything that went on during the year, sometimes it was just hard to concentrate.</p>\n</li>\n</ul>\n<h3>Other Things</h3>\n<p>One other thing I ended up doing this year was <a href=\"https://kpwags.com/2020/12/14/starting-a-new-job.html\">choosing to leave my job for a new opportunity</a>. I'm only a month in, but am happy with where my career is heading.</p>\n<h2>Looking Forward and Hoping 2021 is Better</h2>\n<p>I'm not going to be naive and think that 2021 is going to get rid of all the ills of 2020. The Coronavirus is not going to go away January 1st even with the vaccine now being administered. Joe Biden getting inaugurated January 20th isn't going to magically get rid of Trumpism. Fixing racial justice and correcting the structural racism in the world is not going to happen overnight. All of this will take time and effort on the part of everyone. 2020 just seemed to amplify everything.</p>\n<p>What I can do, is try to change my mindset and make 2021 feel like a better year.</p>\n<p>For 2021, I'm not going to really set any specific goals...more just things I want to work on.</p>\n<ol>\n<li>\n<p><strong>Staying Active</strong>: I'd like to say 2021 will be the year I fix my diet, but I think we all know where that is heading... Instead, I'm going to focus on continuing to stay active. I'm going to continue to lift, run, walk &amp; bike. I'm going to try to cut down on the snacking, but the focus will be on getting stronger and moving more.</p>\n</li>\n<li>\n<p><strong>Improving my Development Knowledge</strong>: My work with Digital Family Cookbook, Where Do You Want to Eat 2, and now my fitness tracking side project have all helped with this. I'm going to continue working on my side projects to help improve my capabilities. I know it's only been 1 month at my new job, but I already sense my abilities being pushed (which is a good thing) to help myself grow. I'm also hoping to publish Digital Family Cookbook, but I'm sensing I might rebuild it using .NET Core once my fitness tracker is complete...we shall see...I could find a new shiny-thing by then. The important thing to me is continuing to learn and grow.</p>\n</li>\n<li>\n<p><strong>Continuing to Read</strong>: I don't think much more needs to be said here.</p>\n</li>\n<li>\n<p><strong>Write More</strong>: I say I'm going to do this every year. I have a list of topics I want to write about, but never seem to. I think I'm going to try to get over my &quot;impostor syndrome&quot; and start to write more. I say impostor syndrome because in some of the cases, I feel like part of my reluctance to write, is making myself sound stupid. I'm going to try to push that fear aside and write more, and use any mistakes I happen to make a way to learn and grow.</p>\n</li>\n</ol>\n<p>I think I'll finish up there. This is what I'm hoping to work on in 2021.</p>\n<p>For those of you who have experienced loss and suffering this year, I hope 2021 and the future in general is better for you.</p>\n<p>Here's to a better 2021. Feel free to reach out to me on <a href=\"https://www.twitter.com/kpwags\">Twitter</a> or <a href=\"mailto:keith+blog@kpwags.com\">email</a> if you'd like to chat or connect!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2021-01-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/12/16/reflections-on-my-running-streak-coming-to-an-end/",
      "url": "https://kpwags.com/posts/2020/12/16/reflections-on-my-running-streak-coming-to-an-end/",
      "title": "Reflections on My Running Streak Coming to an End",
      "content_html": "\n\t\t<p>This past Monday, December 14, my running streak came to an end. I managed to get it up to 175 days, almost half the year. In the end, I just felt it was time to let it go.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/kHQ6KX0E2M-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/kHQ6KX0E2M-1920.gif 1920w\" /><img alt=\"Me finishing the 2015 Philadelphia Marathon\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/kHQ6KX0E2M-1920.jpeg\" width=\"1920\" height=\"979\" /></picture></p>\n<div class=\"image-credit\">Me successfully finishing the 2015 Philadelphia Marathon</div>\n<p>When COVID-19 shut everything down in March, I hadn't yet built my gym. This left me with limited options for fitness (or at least options that appealed to me). Running had generally been my go-to cardio activity since I started becoming more active, so I started running, a lot. I started running 3-4 miles a day, 4-5 days a week. I hated sitting still, so it was a good way to get my blood flowing. I stayed away from parks and just ran around my neighborhood. Didn't need a mask as I could just switch sides of the street those few times I ran into someone.</p>\n<p>I missed the second half of April thanks to pain in my hip, but was able to get going again in May. Towards the end of June (June 22nd to be exact), I ended up starting my running streak. I didn't actually even mean to start it. I just started running every day, and soon enough I realized that I had been able to keep it going. It reached a month, then two, and I was able to just keep going. Even after I <a href=\"https://kpwags.com/2020/08/04/so-i-finally-built-a-home-gym.html\">built my gym</a>, I still made a point to go for a run after lifting...which became extra painful on some legs days. My only rule was that I had to hit the 1 mile mark for it to count. Anyone who wants to start a running streak can set the boundaries for their streaks, but for mine, I felt like 1 mile was a good mark to hit.</p>\n<p>There were plenty of days where I didn't want to run. Days where I just wanted to be lazy and play video games all day or anything else. But I persevered and went for a run anyway. There were days where my neighbors probably thought I was nuts running in the pouring rain (those were not fun runs). There were other days where I ran in 90+ degree weather...they weren't fun either, though I tried sticking to morning runs during the hottest days of summer to make it a little easier on myself. I was proud of myself. I managed to hit 100 days, then 150, never seeming to slow down.</p>\n<p>What finally did me in was a low to mid 30s day when it was pouring rain. I hadn't been enjoying running with the temperature in the 30s to begin with, and the pouring rain certainly didn't encourage me either. Not to make excuses for myself, but I kinda knew this day was coming. Living in Pennsylvania, I knew that the weather was going to get cold. And while I could deal with cold, what that also brings is snow and ice (as I write this, it's snowing out and we're supposed to get as much as a foot of snow). I knew that once it started getting icy, my runs were going to stop. Why run if all I'm going to do is slip on the ice and break an ankle or leg? I'll end up injured and won't be able to do much of anything. I was hoping to get to 183 days, so I could say that I ran exactly half the year, but I'll have to make do with 175 days. Still not too shabby!</p>\n<p>Looking back, I feel accomplished. It wasn't always easy to force myself to run every day, but I still did it 175 days in a row. I think that's the main takeaway from this for me. If you want something, stick with it. Work for it and don't take the easy way out. It would've been easy for me to take a day off, say that it's because I need a rest day and move on.</p>\n<p>As for now, I'm still working out. I'm still lifting weights in my basement gym, and I'll still go for runs when the weather cooperates. I'll probably even get my bike trainer out and get some indoor bike rides in. My running streak might be over, but my fitness activities sure aren't!</p>\n<p>Here are the stats for my running streak:</p>\n<div style=\"margin-bottom: 5px\">\n    <strong>Days</strong>: 175\n</div>\n<div style=\"margin-bottom: 5px\">\n    <strong>Distance</strong>: 536.91 miles\n</div>\n<div style=\"margin-bottom: 5px\">\n    <strong>Average Distance Ran</strong>: 3.07 miles\n</div>\n<div style=\"margin-bottom: 5px\">\n    <strong>Time Running</strong>: 84 hours, 14 minutes, 33 seconds\n</div>\n<div style=\"margin-bottom: 5px\">\n    <strong>Average Pace</strong>: 9:25/mi.\n</div>\n<div style=\"margin-bottom: 5px\">\n    <strong>Running Shoes Gone Through</strong>: 1.25\n</div>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-12-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/12/14/starting-a-new-job/",
      "url": "https://kpwags.com/posts/2020/12/14/starting-a-new-job/",
      "title": "Starting a New Job",
      "content_html": "\n\t\t<p>At the end of November, I ended up leaving my job at Maintenance Strategies, Inc. and made the decision to take on a new challenge working as a software developer at Webstaurant.</p>\n<p>Changing jobs is often an anxious experience. You don't know if you're making the right decsion. Various questions often run through your head. What if I hate the new job? What if I think my new co-workers are jerks? Is it even the right decision? The worry is even more enhanced by the fact that we're living in the midst of a pandemic that has been going on for over 9 months with <a href=\"https://www.nytimes.com/live/2020/12/14/world/covid-19-coronavirus#america-begins-its-most-ambitious-vaccination-campaign\">the end only now starting to come into view</a>.</p>\n<p>I had been working at MSI for over 5 years and enjoyed my time working there. I had some fantastic co-workers and am ever thankful for the opportunities that I had while working there. Deciding to leave was not an easy decision.</p>\n<p>My new job is with a company called Webstaurant where I'll be specializing in C# and .NET development. My first project has me using .NET Core, TypeScript &amp; React. This is especially exciting for me since I'll finally be able to put some of the skills and knowledge I've picked up on the side to use in a professional capacity.</p>\n<p>My first day was actually last week and so far, so good. I'm looking forward to continuing my journey as a developer, continuing to learn and improve.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-12-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/11/03/a-little-tip-for-sticking-with-fitness-goals/",
      "url": "https://kpwags.com/posts/2020/11/03/a-little-tip-for-sticking-with-fitness-goals/",
      "title": "A Little Tip for Sticking with Fitness Goals",
      "content_html": "\n\t\t<p>I'm sure many have experienced the problem of not being able to stick with one's fitness goals. It's a common problem. You decide I'm going to go to the gym a few days a week, you stick with it for a week or two, then get lazy. I've dealt with this and have found a way to &quot;trick&quot; myself into sticking with my goals.</p>\n<h2>The So-Called Trick</h2>\n<p>For me, I have had plenty of days where I had to drag myself to the gym. The trick I use is I'll go to the gym (nowadays my basement) and I'll do my first exercise. If I do all my sets of that and still don't feel like doing any more, then I'll give myself the OK to pack up and go home. More often than not, by the time I finish the first lift, I'll be in a better mood and will want to finish my workout in its entirety. There are of course still times here and there where I am just done after that first lift. But even then, at least I did something and won't regret being lazy and skipping the workout.</p>\n<p>If lifting isn't your thing, you can still apply this tactic elsewhere. With running for example, you could run around your block once and end early if you're just not feeling it. You could also just commit to a short distance and increase if things get better.</p>\n<h2>The Journey Matters More than the Individual Day</h2>\n<p>At the end of the day, the important thing is being able to stick to your goals. We all have our bad days, but they will be forgotten soon enough. Quitting the journey, or losing the momentum takes a bit more to come back from.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-11-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/11/01/apple-watch/",
      "url": "https://kpwags.com/posts/2020/11/01/apple-watch/",
      "title": "Why I Chose the Apple Watch",
      "content_html": "\n\t\t<p>I know the Apple Watch has been around for over 5 years, and I've had one for almost 4, but I thought I'd share my reasons for still wearing it and why I like it.</p>\n<p>Ever since high school, I've always been partial to wearing a watch. Even with the advent of the cell phone and smartphone, I've continued to wear a watch. In 2017, I purchased an Apple Watch Series 2 and have been happy with the purchase and the switch.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/vce60oHxTW-1199.webp 1199w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/vce60oHxTW-1199.gif 1199w\" /><img alt=\"My apple watch with a blue wristband on my wrist\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/vce60oHxTW-1199.jpeg\" width=\"1199\" height=\"898\" /></picture></p>\n<h2>The History</h2>\n<p>I jumped on the fitness tracker with the original Fitbit Flex back in 2013. It tracked my steps and my sleep, but didn't have a clock on it...just a few dots to indicate progress. Because of this, I ended up with 2 devices on my wrist: the Fitbit and my watch. It wasn't super ideal, but it served its purpose.</p>\n<p>I had looked at the Apple Watch when Apple first released it, but found it a little lackluster for its price. The second generation Series 2 caused me to rethink things. The biggest addition for me was the built in GPS. The original Apple Watch could track runs and whatnot by GPS as well, but it required being tied to an iPhone. The series 2 allows you to track them independent of the iPhone. So if I don't want to bring my iPhone with me, I don't have to and I'll still know how far I ran. I run a lot, so the ability to track my runs was incredibly important to me. I ended up pulling the trigger in January 2017 and entered the smart watch era.</p>\n<p>In 2020, while fixing my dishwasher with my Dad, I ended up cracking the screen on my Series 2 and ended up upgrading to the Series 5 which is what I'm currently using today.</p>\n<h2>What I Really Like</h2>\n<h3>Basic Info At a Glance</h3>\n<p>My watch face consists of some of the info I like to be able see at a glance. I can quickly view the weather, any events coming up, my fitness stats for the day, as well as easy access to starting a workout and my todo list. I can also easily customize this if I want to bring something else to the forefront. The weather &amp; rain are particularly useful to me right now since I'm currently on a run streak. On rainy days, it's nice to be able to see quickly when I might be able to squeeze a run in.</p>\n<h3>Fitness Tracking</h3>\n<p>I've always been a big fan of tracking my fitness. For me it helps motivate me to keep trying to improve. Running is the big thing I've always liked seeing data for. When I first started running with any kind of seriousness, I used the popular app <a href=\"https://runkeeper.com/cms/\">Runkeeper</a> on my phone. I moved to <a href=\"https://connect.garmin.com/\">Garmin</a> when I got my Garmin GPS watch and also used <a href=\"https://www.strava.com/\">Strava</a> both with Garmin and with my Apple Watch. After Strava got into some <a href=\"https://www.theguardian.com/world/2018/jan/28/fitness-tracking-app-gives-away-location-of-secret-us-army-bases\">privacy trouble</a>, I decided to really try Apple's built-in tracking. It was perfect for me and I ended up deleting my Strava account and sticking Apple's app. The app works really well. It keeps track of my pace, distance, heart rate, gives me my mile splits, and keeps the activities private. There's no easy way to share activities, but that's fine by me...I don't think anyone needs to see all that data anyway.</p>\n<h3>Quick Notifications</h3>\n<p>Assuming you're careful with what notifications you want to see, being able to get them on your watch can be handy. I can have my phone in my pocket or somewhere around the house and still be able to check to see who messaged me or what task I'm being reminded to do.</p>\n<h3>Streaming Music</h3>\n<p>I use Spotify as my streaming music service, but I do have music stored on my iPhone from iTunes. The Apple Watch allows me to transfer some of those songs over to my watch which is nice for runs when I don't want to carry my phone. I can connect my Bluetooth earbuds to my watch and off I go.</p>\n<h3>Changing Watch Bands</h3>\n<p>Okay, this one isn't that big of a deal, but it's nice that I can change my watch bands easily enough. People make jokes (rightfully so) about how expensive some of Apple's bands can be, but the fact of the matter is that there are plenty of third parties who make some solid bands to fit anyone's style. I tend to stick with the rubber bands since I use my watch for working out and it handles the sweat well, but it's nice to be able to switch up the colors to fit my mood.</p>\n<h2>Cons</h2>\n<p>There are some cons to the Apple Watch to be aware of.</p>\n<h3>Battery</h3>\n<p>The battery on both my Series 2 and Series 5 have both been good. I can easily get through a day without having to worry about running out of juice. And since I don't wear my watch to bed, it's easy enough to charge it while I sleep. It does mean that whenever I go on any trips, it's one extra charger I need to bring. And since the charger it uses is a variation of the wireless charging standard, you can't even use a normal charging pad. (Apple really should <a href=\"https://www.theverge.com/2020/9/29/21441290/apple-watch-qi-wireless-charging-standard-environment-cable-proprietary-standard\">make the switch</a>) This also means it's not a good option if you need to go several days without ready access to power (think backpacking trip).</p>\n<h3>Expensive Screen Repair</h3>\n<p>The reason I upgraded to the Series 5 was cost-related. $250 to repair a cracked screen on a 3 year old watch when the latest model cost $400 didn't seem like a good investment. The Series 2 was still running well, and having to see it go to waste over a screen crack was disappointing, especially from an environmental perspective. (I did give it to Apple for their recycling program)</p>\n<h3>Easy to Remain &quot;Too Connected&quot;</h3>\n<p>One of the things I've tried to keep tabs on is my screen time. All too often it's easy to become distracted by my iPhone. The Apple Watch can amplify that if you let it. I attacked this problem by severely limiting what notifications I receive on my watch. Right now I think the only notifications I let go through to my watch are phone calls, iMessage messages, todo reminders &amp; calendar notifications. Limiting what the watch buzzes about helps tremendously.</p>\n<hr />\n<p>Smart watches aren't for everyone and they definitely aren't always the most stylish of watches. For me though, I am glad to have it as it does exactly what I want it to.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-11-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/09/24/handy-visual-studio-code-plugin-for-jest/",
      "url": "https://kpwags.com/posts/2020/09/24/handy-visual-studio-code-plugin-for-jest/",
      "title": "Handy Visual Studio Code Plugin for Jest",
      "content_html": "\n\t\t<p>I ended up starting a new project recently which I'll get into later, but after my experience writing unit tests with <a href=\"https://kpwags.com/2020/05/06/delving-into-unit-testing.html\">Digital Family Cookbook</a>, I decided to write the tests as I code for this new project. I found a nifty little tool that makes things a little easier for me so I figured I'd share.</p>\n<p>It's a Visual Studio Code plugin called <a href=\"https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner\">Jest Runner</a>. What this does is allow you to run a single test or run all tests in the open file from the context menu.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/cVsocAMSJw-1998.webp 1998w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/cVsocAMSJw-1998.gif 1998w\" /><img alt=\"Jest Runner in action in VS Code\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/cVsocAMSJw-1998.png\" width=\"1998\" height=\"1123\" /></picture></p>\n<p>Prior to this, I had 2 npm test scripts. One that runs all tests and stops, and a second that puts Jest in watch mode running every time I make changes to files included in tests. This was sometimes annoying when I just wanted one file or one test run as I would have to wait for all the other tests to run as well. Now I can just right click on the test and click 'Run Jest' and boom...the console will open and the test will run.</p>\n<p>I'd highly recommend!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-09-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/08/23/two-month-running-streak/",
      "url": "https://kpwags.com/posts/2020/08/23/two-month-running-streak/",
      "title": "Two Month Running Streak",
      "content_html": "\n\t\t<p>Two months ago, I decided to go for a run, something I've been doing during most of the pandemic. What I didn't know was that this run would be the start of what would become a 2+ month running streak.</p>\n<p>Since March when everything shut down due to the Coronovirus pandemic, running became one of the only physical activities I felt comfortable doing. I was doing a pretty good job running 4-5 times per week and staying active which has definitely been important for keeping my spirits up. I have no idea what made me start this running streak, but five or so days into it, I decided to just keep it going to see how long I could go. My only rule was that a run had to be 1 mile for it to count. So far, this hasn't been an issue, my shortest run was 1.28 miles which was the day after my first legs workout with my <a href=\"https://kpwags.com/2020/08/04/so-i-finally-built-a-home-gym.html\">home gym</a> which killed my legs and made running quite a challenge for a few days while I was dealing with the DOMS (Delayed Onset Muscle Soreness). On average, I'm hitting 3.12 miles per run, right around a 5k.</p>\n<p>Every week, I've been proud of myself for keeping it going. I've never taxed my legs like this, even when I was training for the 2015 Philadelphia Marathon. Given that I've generally maxed out at 5, maybe 6 runs a week, I wasn't sure how I'd handle the load. Today I hit 9 weeks and so far, my legs are holding up. Some days are better than others and I've limited my distance per run as to try to not overdo it. I ended up starting this at the end of June and given my distaste for the heat, I'm actually surprised I've been able to keep it up even with temperatures in the 90s. Early morning runs have certainly helped with the heat, but even in the morning, I come back drenched in sweat. I am also hoping the weather holds up. I've had to time some of my runs trying to avoid the rain. I don't have access to a treadmill so if I want to run, it has to be outside. I've done a few runs while it's been drizzling which haven't been the most fun. Not sure I'm hardcore enough to run if it's a downpour.</p>\n<p>Let's see how far I can take this...I'm not planning on stopping anytime soon!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-08-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/08/04/so-i-finally-built-a-home-gym/",
      "url": "https://kpwags.com/posts/2020/08/04/so-i-finally-built-a-home-gym/",
      "title": "So I Finally Just Built a Home Gym",
      "content_html": "\n\t\t<p>Four months into the COVID-19 Pandemic, I finally broke down and built a gym in my basement.</p>\n<p>Back in March when the country shut down because of the Coronavirus, my trips to the gym were one of the first things to go. I didn't feel comfortable going and it didn't matter because LA Fitness closed their gyms anyway. My wife was even awesome enough to give me the OK to buy and build a home gym setup since she knew it was important to me. But back in March, I hesitated to spend the money on it since I knew it wouldn't be cheap and I wasn't sure how long this lock down would last. Foolish me, I thought we would be out of it in a month or two. I ended up switching to running over the last 4 months. I've logged more miles than I have in just about any year other than 2015 when I was training for my marathon. As I write this, I'm currently on a 44 day running streak after putting up over 100 miles in July. Suffice it to say, that's kept me occupied.</p>\n<p>At the end of June however, LA Fitness notified me that they were planning on opening back up and would resume charging me my monthly rate. I still don't feel comfortable going back to the gym so I looked into freezing or suspending my membership. Well that didn't work as I expected and LA Fitness wanted to charge me $10 a month to &quot;suspend&quot; my membership. Basically I'd have to pay them $10 a month, and I wouldn't be able to go to the gym either. That was a raw deal, so I opted to cancel my membership instead. After confirming that I was still able to make the purchases neccesary to build a home gym, I set out to price things out.</p>\n<p>I was hoping to buy things used to save some money, but the selection on Craigslist was minimal and the stuff that was there was the cheap stuff marked up 300+%. I kept an eye on Craigslist, but in the end I ended up buying everything new. The hardest part was finding what I needed and wanted in stock. It seems that I'm not the only person looking to build a home gym. Finding barbells, plates, and other equipment in stock was a challenge in an of itself. Thankfully I found the <a href=\"https://www.reddit.com/r/homegym\">Home Gym Subreddit</a>. It has a regular In Stock Thread where users are awesome enough to announce when the various different shops have gear in stock. Sorting by new, I was able to find when barbells and plates came in stock on the various different shops. After about 2 weeks of scouring the web, I managed to purchase all the gear I needed.</p>\n<p>I'm quite happy with what my setup. The only think I'll need is a better mat for deadlifting. The flooring is a basic rubber mat from Amazon and won't hold up to deadlifting 300+ lbs. I'll definitely need to better protect the concrete floor of my basement.</p>\n<h2>My Setup</h2>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/HtMy5Hw98L-1440.webp 1440w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/HtMy5Hw98L-1440.gif 1440w\" /><img alt=\"My home gym setup\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/HtMy5Hw98L-1440.jpeg\" width=\"1440\" height=\"1920\" /></picture></p>\n<p><strong>Rack</strong>: <a href=\"https://www.roguefitness.com/sml-1-rogue-70-monster-lite-squat-stand\">Rogue SML-1</a></p>\n<p><strong>Barbells</strong>: <a href=\"https://www.xmarkfitness.com/voodoo-commercial-7-olympic-bar/\">XMark Fitness Voodoo Bar</a> &amp; <a href=\"https://www.roguefitness.com/rogue-curl-bar\">Rogue Curl Bar</a></p>\n<p><strong>Bench</strong>: <a href=\"https://www.roguefitness.com/rogue-flat-utility-bench\">Rogue Flat Utility Bench</a></p>\n<p><strong>Plate Stand</strong>: <a href=\"https://www.amazon.com/CAP-Barbell-Olympic-2-Inch-Plate/dp/B0013SZC8S\">CAP Barbell Plate Rack</a></p>\n<p><strong>Plates</strong>: Ironmaster &amp; York Plates</p>\n<h2>Tips for Building Your Own</h2>\n<p>Here are a few tips for building your own setup.</p>\n<ol>\n<li><strong>Plan</strong>: Determine your budget and what exercises you want to be able perform. Decide what you want for your gym and make a list.</li>\n<li><strong>Plate Prices</strong>: For basic plates, the ideal cost is no more than $2/lb.</li>\n<li><strong>Scour Craigslist &amp; Facebook Marketplace</strong>: I wasn't able to find any good deals with Craigslist, and don't have a Facebook account. Hopefully you'd have better luck.</li>\n<li><strong>Home Gym Subreddit In Stock Thread</strong>: Every Friday they start a new thread, but constantly posted to throughout the week. Sort the comments by new and you can keep track of what comes into stock.</li>\n<li><strong>In Stock Bots &amp; Email Subscriptions</strong>: As I don't have a Facebook account, I couldn't use these tools. <a href=\"https://www.roguefitness/\">Rogue Fitness</a> has the <a href=\"https://roguestockbot.com/\">Rogue Stock Bot</a> that allows you to tell it what you're looking for and it will message you on Facebook when it comes in stock. Rogue &amp; <a href=\"https://www.repfitness.com/\">Rep Fitness</a> also allow you to enter your email and will email you when items are back in stock. The downside to the email is that it's not as instantaneous as the stock bot, which means that the items could go out of stock before it ever notifies you.</li>\n</ol>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-08-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/07/05/so-i-finally-finished-a-side-project/",
      "url": "https://kpwags.com/posts/2020/07/05/so-i-finally-finished-a-side-project/",
      "title": "So I Finally Finished A Side Project",
      "content_html": "\n\t\t<p>I’ve often seen a joke going around dev circles talking about how developers have tons of half-finished side projects lying around. And as much as it pains me to say, I’m one of them. But now I can say that that pile has decreased by one.</p>\n<p><em>Edit: Due to hosting costs on Azure, I'm currently looking for a less expensive option and will update this post if/when I find an alternative</em></p>\n<h2>Where Do You Want to Eat?</h2>\n<p>Ever have a back-and-forth with friends or your better half about where you want to go to eat? Well, I built a little web app so you can use that to make your decision. Now, you can let a web app tell you where to go so no one can be unhappy with each other for the decision! (Be angry at...wait a minute...please don’t be mad at me).</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/qGpCLp83NU-1199.webp 1199w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/qGpCLp83NU-1199.gif 1199w\" /><img alt=\"Screen shot of the new Where Do You Want to Eat?\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/qGpCLp83NU-1199.jpeg\" width=\"1199\" height=\"670\" /></picture></p>\n<h2>Where This Started</h2>\n<p>I had built this a while back to be a little Javascript app tying into Google’s Geolocation API. I called it “Where Do You Want to Eat” It was simple. You typed in a zip code (the site did try to get your zip code using Google’s API), specified a range with optional keywords, and it randomly chose a restaurant. I ended up sunsetting it down after Google ended up changing how they charge for use of their API. I wasn’t mad of course, they let me use it for free for a while. It didn’t hurt that my little toy was hardly used. It also didn’t always provide the best results. The range was a radius, and you’d be surprised how close some places are that seem farther away. The final nail so to speak was that the results were hard to fine-tune. All too often restaurants were returned that didn’t seem to match the keywords as much as you’d want.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/AoGcXYX08g-1600.webp 1600w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/AoGcXYX08g-1600.gif 1600w\" /><img alt=\"Screen shot of the original Where Do You Want to Eat?\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/AoGcXYX08g-1600.jpeg\" width=\"1600\" height=\"1000\" /></picture></p>\n<p>In the end, it was a cool little project. It might not have turned into anything, but I learned a bit and that’s what matters.</p>\n<h2>From the Scrap Heap</h2>\n<p>I’ve been developing in .NET since I graduated from Drexel in 2007, but I realized earlier this year that I haven’t really explored everything going on in .NET Core. Over the course of the year, especially during this pandemic, I’ve been catching up on what’s been introduced in .NET Core.</p>\n<p>I decided to use this time to bring back <em>Where Do You Want to Eat</em> but with a slightly different premise. Instead of relying on a geolocation API, I decided that I would build it to support user accounts where the users would enter in all the restaurants themselves. I figured it would improve the results if users put in their own restaurants. Restaurant discovery would take a hit as it could never return a restaurant not in your list, but I felt like that was a reasonable tradeoff. I’d also let the user assign tags to each restaurant so that during the random selection, they could narrow down the results a little (like if they knew they weren’t in the mood for say Sushi).</p>\n<h2>The Technology</h2>\n<p>I decided to use ASP.NET Core MVC as the base technology. I had used ASP.NET MVC in previous jobs and projects, and it seemed the best foundation to start for this project. For the data modeling side of things, I used Microsoft’s Entity Framework which made setting up the data layer a breeze. The template that comes with .NET Core 3.1 also included Bootstrap for the UI framework so I decided to stick with that. It did make building the UI easy by having the CSS formatting all set up, which I suppose is the point.</p>\n<p>The final thing I did was get myself familiar with the .NET Unit Testing tools. Despite all my experience in the .NET Framework, I’ve never done any unit testing. My first foray into unit testing was with <a href=\"https://kpwags.com/2020/05/06/delving-into-unit-testing.html\">Jest and the React Testing Library for another side project</a>. I ended up using <a href=\"https://xunit.net/\">xUnit</a> and <a href=\"https://github.com/moq/moq4\">Moq</a> to do the heavy lifting. I had to get my head around how they handled the mock data, but once I got that down, setting up the tests were pretty easy. The experience I had in the Node.js and React world definitely came in handy to know what I wanted to test and how to go about laying the tests themselves out.</p>\n<h2>Hosting</h2>\n<p>From the start, I knew I wanted to use Microsoft Azure for hosting. I used Amazon Web Services for most of my projects, but decided I’d give Azure at try to see how easy it is to use. Since I built the site in .NET Core, it only made sense. I managed to get it up and running relatively easily thanks to several tutorials I found online. I’m a little concerned on the cost factor, so I’m going to have to see after a month or two what it costs me and if I’m going to have to find a different hosting platform. I’m not really sure how to monetize it outside of ads, and depending on the cost, I’m not sure they’d generate enough to compensate. I don’t mind paying to host it of course, and I’m hoping it won’t end up costing too much since it’s probably not going to get a lot of usage and won’t need a lot of data processing. If the costs are too high, I’ll have to look into some alternatives.</p>\n<p>I found that it was a fun little project to build, and a good learning experience. I do find it kind of odd to release it during a pandemic where we probably shouldn’t be going out to eat, but for now it can still be used for takeout. So please feel free to check it out, test it out, and let me know what you think!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-07-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/06/24/section-230-should-be-protected/",
      "url": "https://kpwags.com/posts/2020/06/24/section-230-should-be-protected/",
      "title": "Section 230 Should Be Protected",
      "content_html": "\n\t\t<p>I’m going to preface this by saying that I am by no means an expert when it comes to all the nuances of Section 230 of the Communications Decency Act. I do however know that Section 230 serves as the underpinning of how the current Internet works and why all the sites that we all love can survive and exist.</p>\n<blockquote>\n<p>For even better coverage of Section 230, I’d highly recommend you follow <a href=\"https://www.techdirt.com/\">Techdirt</a> and <a href=\"https://twitter.com/mmasnick\">Mike Masnick</a> on Twitter.</p>\n</blockquote>\n<p>The biggest thing Section 230 provides is protection for website owners from content their users post. It means that when a user posts a Tweet or someone posts on Facebook, Twitter and Facebook aren’t held legally responsible should user post libel or anything else that might open them up for legal repercussions. I can’t even begin to imagine how many issues website owners would have without this protection...especially smaller sites with comment sections. It also gives them the protections to moderate their sites however they choose without having to worry about it affecting their protection.</p>\n<p>Now we can certainly debate <em>HOW</em> sites like Twitter or Facebook moderate their users, but that doesn’t change how important Section 230 is for today’s internet. Think about YouTube. YouTube has hundreds of hours of video uploaded by users per minute. There is absolutely no way that they can check each and every video as they’re uploaded. They don’t have the manpower...no company does. Automation and A.I. might help some, but they often create many false positives or miss things altogether. Imagine if someone uploads an awful video and Google is responsible for the contents of the video even if it’s only online for a short period before they remove it. If they could be held liable for that, it would be disastrous. There's no way they couldn’t take that risk. If companies as big and as resourceful as Google can’t do it, what hope do smaller site owners have?</p>\n<p>I write this now as <a href=\"https://www.techdirt.com/articles/20200528/01321044592/two-things-to-understand-about-trumps-executive-order-social-media-1-distraction-2-legally-meaningless.shtml\">Donald Trump</a>, the <a href=\"https://www.techdirt.com/articles/20200617/13341644736/justice-department-releases-own-preposterous-recommendations-updating-section-230.shtml\">U.S. Department of Justice</a> and <a href=\"https://www.techdirt.com/articles/20200617/09243044732/senator-hawleys-section-230-reform-even-dumber-than-we-expected-would-launch-ton-vexatious-lawsuits.shtml\">Republican Senators</a> are trying to gut these protections. <a href=\"https://www.techdirt.com/articles/20200531/01363144611/joe-biden-wastes-huge-opportunity-to-support-free-speech-still-wants-to-revoke-section-230.shtml\">Joe Biden</a> isn’t much better as he’s no real fan of Section 230 either. This is all a mistake. Section 230 makes the Internet a much more diverse and better place. It’s ironic too, because while Trump is hating on Twitter now, he’s benefitting from Section 230. Without Section 230, Twitter would likely be driven to completely remove many of Trump’s Tweets...rather than just putting a violence or misleading tag.</p>\n<h2>Publisher vs. Platform (It Does Not Mean What You Think it Means)</h2>\n<p>One of the common arguments against sites like Facebook and Twitter is the false “publisher versus platform” distinction. This doesn’t mean what many seem to think it means. So many arguments I’ve seen is “Twitter has to choose between being a publisher or being a platform...since they’re moderating, they’ve chosen publisher!” (or something along those lines)</p>\n<p>Let’s look at Twitter as en example. It’s generally considered a platform since they host other users’ content. But it can also publish its own content like their blog and whatnot. Twitter is not responsible for its users' Tweets, but it <em>IS</em> responsible for content it posts itself. That’s essentially what the whole distinction is. It’s not really an either/or proposition.</p>\n<h2>The 1st Amendment Argument Against Social Media is Bullshit</h2>\n<p>There’s been a lot of complaints from those primarily in the GOP and on the right about social media being biased against conservatives. I personally find their claims dubious at best, but they seem to believe that sites like Twitter are responsible for holding up the standards of the 1st Amendment and Freedom of Speech. What they seem to forget, is that these sites are private companies. They are not the government, so the 1st Amendment does not apply to them. Social media sites have to determine how best to moderate their community. If they’re too open, they could drive away users who might be disgusted by questionable content. If they’re too strict, they could also drive away users as the majority of people do appreciate and want the ability to freely express themselves. But this is for the sites to decide, not the government.</p>\n<p>At the end of the day, Twitter, Facebook, and every other site have the ability to moderate their sites as they see fit. If users don’t like it, they can find a different community or start their own. The alternative is that the government regulates what users can post on social media which would likely abused by whichever political party is in power. I think we can all agree that would be bad.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/-bqfaW3M0Q-566.webp 566w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/-bqfaW3M0Q-566.gif 566w\" /><img alt=\"An infamous xkcd comic talking about free speech\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/-bqfaW3M0Q-566.png\" width=\"566\" height=\"577\" /></picture></p>\n<div class=\"image-credit\">Credit <a href=\"https://xkcd.com/1357/\" title=\"xkcd: Free Speech Comic\">xkcd</a></div>\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-06-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/05/15/my-cat-cookie-is-now-11-years-old/",
      "url": "https://kpwags.com/posts/2020/05/15/my-cat-cookie-is-now-11-years-old/",
      "title": "My Cat Cookie is Now 11 Years Old",
      "content_html": "\n\t\t<p>Meet Cookie, the cat that I’ve had now for almost 11 years.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/qjljFpi0fc-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/qjljFpi0fc-1920.gif 1920w\" /><img alt=\"A picture of my tabby cat, Cookie\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/qjljFpi0fc-1920.jpeg\" width=\"1920\" height=\"1581\" /></picture></p>\n<p>In July 2009, I got my 2nd cat. My late cat, Nibbler at the time was a little over a year old and my girlfriend at the time decided she needed a friend. Cookie was about 7-8 weeks old when we got her so we randomly assigned May 15th as her birthday. She’s been <s>annoying</s> adorable ever since.</p>\n<p>The scary thing is that it doesn’t feel like I’ve had her that long which makes me feel old...</p>\n<p>Oh well, Happy Birthday Cookie!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-05-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/05/06/delving-into-unit-testing/",
      "url": "https://kpwags.com/posts/2020/05/06/delving-into-unit-testing/",
      "title": "Delving into Unit Testing",
      "content_html": "\n\t\t<p>In all of my professional experience, I've never worked for a company that did any unit testing and because of that, I haven't really done any either. I knew what unit testing is and the general concepts behind it, but never got around to actually building or implementing any tests. I decided that for Digital Family Cookbook, that would change.</p>\n<p>I started my testing using <a href=\"https://jestjs.io/\">Jest</a> &amp; <a href=\"https://enzymejs.github.io/enzyme/\">Enzyme</a> since that's what Wes Bos used for his React/GraphQL tutorials that got me started. I got through a few tests, but never really gained the confidence that my tests were either useful or actually working. The biggest thing I had to wrap my head around was mocking the data and the calls to the backend. I struggled a bit trying to figure out how to best handle pulling and posting data. Needless to say, the struggle didn't exactly help my desire to keep going.</p>\n<p>As luck would have it, I started following <a href=\"https://kentcdodds.com/\">Kent Dodds</a> a while back on Twitter and stumbled into a few of his tweets talking about <a href=\"https://testing-library.com/docs/react-testing-library/intro\">React Testing Library</a> and decided to look into it. After reading the documentation and going through some tutorials and Stack Overflow posts, I decided to ditch Enzyme and try it out to see if I would have any better luck. It turns out this was the breakthrough I was looking for. The other library I found thanks to some digging was the <a href=\"https://github.com/mike-gibson/mock-apollo-client\">Mock Apollo Client</a> which helped me understand and figure out how to handle mapping my mocked data for the tests.</p>\n<p>There's been a lot of trial and error. I've had a lot of tests fail when I figured they should succeed. I've had some pass when I figured they would fail...and then investigated into why they succeeded. Through this, I was able to gain confidence that the tests are working, and doing what I expect them to do. I also know they're working because when I intentionally &quot;break&quot; components, the tests quickly let me know. That's another thing I've learned throughout all of this. Make your tests fail too so you can have the confidence that they'll fail when you break something unintentionally.</p>\n<p>I ended up creating a list of components I wanted to test. I chose the components that made the most sense to make sure things continue to work. Components like logging in, signing up, the various CRUD calls to the database, etc. I'm now probably about halfway through adding the unit tests to Digital Family Cookbook. In retrospect, I should probably have done this as I went along. While I fully understand and appreciate the need for unit testing, compared to writing code and building new features, it's rather boring. Spending all of this time writing and building the tests occasionally makes me want to just procrastinate and do something else. Had I written the tests as I went along, then the monotony might not have seemed as bad. I definitely will do that for my next project.</p>\n<p>In the end, I'm definitely glad I'm learning this. It will only help my development of Digital Family Cookbook and any future projects I work on. It also can't help when it comes to my professional career.</p>\n<p>Here's a list of articles, resources and other links that have helped me, so take a look, maybe they'll help you too!</p>\n<ul>\n<li><a href=\"https://twitter.com/kentcdodds/\">Kent C. Dodds on Twitter</a> (Seriously, follow him, he's often insightful in many ways)</li>\n<li><a href=\"https://kentcdodds.com/blog/common-mistakes-with-react-testing-library\">Common mistakes with React Testing Library</a></li>\n<li><a href=\"https://kentcdodds.com/blog/fix-the-not-wrapped-in-act-warning\">Fix the &quot;not wrapped in act(...)&quot; warning</a></li>\n<li><a href=\"https://medium.com/javascript-in-plain-english/testing-apollo-react-hooks-a7698067b8a0\">Testing Apollo React Hooks</a></li>\n<li><a href=\"https://medium.com/javascript-in-plain-english/i-tested-a-react-app-with-jest-testing-library-and-cypress-here-are-the-differences-3192eae03850\">I tested a React app with Jest, Enzyme, Testing Library and Cypress. Here are the differences.</a></li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-05-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/04/08/im-now-a-react-hooks-convert/",
      "url": "https://kpwags.com/posts/2020/04/08/im-now-a-react-hooks-convert/",
      "title": "I&#39;m Now a React Hooks Convert",
      "content_html": "\n\t\t<p>I’ve often joked that the recipe project I’ve been working on is my “white whale”. I have in the past thrown everything out only to start over. I first built it in Ruby on Rails, but it was buggy and my limited knowledge of Rails made it a little hard to debug and figure out exactly what was wrong. I opted to rebuild it in PHP since I was quite familiar with PHP after building OpenVoter. I decided then that I wanted to start over to teach myself Node.js...well you get the idea.</p>\n<p>My latest go at it has been React with Node.js and GraphQL. This time, things are going better. I’m currently pretty far along with it and have some things to clean up, some bugs to fix, and unit tests to write.</p>\n<p>I mention the whole restarting the project because I’ve spent the last week or two going through the code and converting everything from React class components to functional components and introducing React Hooks to the code. This has at times felt like I’ve started over, though with a little less work.</p>\n<p>I use the <a href=\"https://www.apollographql.com/docs/graphql-tools/\">Apollo</a> library in my project to handle the GraphQL queries for data. When I originally built the app, Hooks weren’t yet a thing and I ended up building everything using class components. Hooks were introduced, but I didn’t pay all that much attention to it as I wanted to finish the app and figured I could loop back later.</p>\n<p>That changed when I was trying to solve a GraphQL Mutation bug I was having and looking over the Apollo documentation. They changed their docs to focus on hooks and I was immediately drawn to how much cleaner the code looked. I decided to upgrade the version of React (and just about every other library) I was using and started to convert a few small components over to hooks to see how they worked. Well, let’s just say I was hooked (ok, that was a bad pun, sorry!). I didn’t end up converting everything over to hooks, but I stopped using class components for all new functionality.</p>\n<p>To give you an idea how much cleaner things looked, compare</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Query</span></span> <span class=\"token attr-name\">query</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token constant\">ALL_CATEGORIES_QUERY</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> data<span class=\"token punctuation\">,</span> error<span class=\"token punctuation\">,</span> loading <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>loading<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Loading...</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Error: </span><span class=\"token punctuation\">{</span>error<span class=\"token punctuation\">.</span>message<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>child-list<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                </span><span class=\"token punctuation\">{</span>data<span class=\"token punctuation\">.</span>categories<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span> <span class=\"token operator\">?</span> <span class=\"token punctuation\">(</span>\n                    data<span class=\"token punctuation\">.</span>categories<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">category</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n                        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>category<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">href</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">/category?id=</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>category<span class=\"token punctuation\">.</span>id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                                </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>category<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>em</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">No Categories Defined</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>em</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Query</span></span><span class=\"token punctuation\">></span></span></code></pre>\n<p>to</p>\n<pre class=\"language-jsx\" tabindex=\"0\"><code class=\"language-jsx\"><span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> data<span class=\"token punctuation\">,</span> loading<span class=\"token punctuation\">,</span> error <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">useQuery</span><span class=\"token punctuation\">(</span><span class=\"token constant\">ALL_CATEGORIES_QUERY</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>loading<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>child-list<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token punctuation\">{</span>data<span class=\"token punctuation\">.</span>categories<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span> <span class=\"token operator\">?</span> <span class=\"token punctuation\">(</span>\n            data<span class=\"token punctuation\">.</span>categories<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">category</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>category<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">href</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">/category?id=</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>category<span class=\"token punctuation\">.</span>id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>category<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n                </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>em</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">No Categories Defined</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>em</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>To me, the new code looks so much better, and easier to understand than the old. After working with unit tests and other clean-up tasks, I decided to spend some time to convert all of my components over to the hooks and am really glad I did. The time spent was worth it, and now I feel like I’m in better shape to finally finish up this project. Stay tuned!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-04-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/03/31/quarantine-update/",
      "url": "https://kpwags.com/posts/2020/03/31/quarantine-update/",
      "title": "Quarantine Update",
      "content_html": "\n\t\t<p>Well, just like many others across the country and the world, I’m now practicing social distancing and staying home just about all the time. While I’m fortunate in that I have a job that allows me to work from home, I can’t help but to think of all those who aren’t as fortunate and have either lost their job or have to go to work and potentially put their health and life on the line. Doctors, nurses, first responders and others are braving this and they deserve nothing but praise and respect for working through these tough times.</p>\n<p>I’ve been spending my time trying to stay busy and not get too stir-crazy. I, like many others haven’t experienced anything like this before in my life. I’m not used to staying home all the time, not being able to really do anything outside of the home, not being able to go anywhere. It feels really weird to me.</p>\n<p>Here’s what I’ve been up to in an attempt to stay occupied.</p>\n<h3>Running</h3>\n<p>Since my gym closed, I’ve been limited as to what I can do for fitness. I could do bodyweight exercises, but haven’t been in the mood. Running has been my go-to exercise. So much so that my monthly mileage for March was over 60 miles. I haven’t run this much since I was training for the 2015 Philadelphia Marathon. I may regret it later, but between all this running and reading <a href=\"https://www.amazon.com/gp/product/B07CMXZC7L\">The Incomplete Book of Running</a> by Peter Sagal, I’m actually considering signing up for the 2020 Philadelphia Marathon. I haven’t made the decision yet, but I’m giving it serious thought.</p>\n<h3>Puzzles</h3>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/CTUGvoJa3_-962.webp 962w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/CTUGvoJa3_-962.gif 962w\" /><img alt=\"A puzzle of New York City my wife and I completed\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/CTUGvoJa3_-962.jpeg\" width=\"962\" height=\"337\" /></picture></p>\n<p>My wife and I have spent some evenings working on puzzles. This is the first one we did, a 750 piece panoramic shot of New York City (The sky was annoying!). We have since started a 2,000 piece puzzle of a scene from the Dolomites in Northern Italy.</p>\n<h3>Side Projects and Blog Improvements</h3>\n<p>I’ve been spending some of my time improving my blog. I completely re-did my <a href=\"https://kpwags.com/reading-logs\">Reading List</a> and my <a href=\"https://kpwags.com/now\">Current</a> pages. I decided to make the books stand out a little more by adding the covers. I used CSS grid to make arrange them, and for the first time, used the HTML &lt;picture&gt; tag to try to make it a little quicker to load on mobile. It seems to be working.</p>\n<p>I’ve also spent some of the time working on my recipes site side project. I’ve been teaching myself how to setup Unit Testing since it’s something I’ve never done. It’s been a little frustrating at times, but I’m getting there. I’ve been using <a href=\"https://www.apollographql.com/\">React Apollo</a> to handle the GraphQL queries, and I’ve been re-writing the components to use Hooks. It might delay its release, but after making the changes, I can see why people prefer hooks…the code looks so much cleaner.</p>\n<h3>Reading</h3>\n<p>So far since this has started, I’ve been reading quite a bit. I ended up finishing 3 books so far, and last night I started on my 4th. I’ve already increased my book count for 2020.</p>\n<hr />\n<p>I hope you’re all staying safe out there. Stay home and practice social distancing. Stay healthy, and we’ll all get through this.</p>\n<p>How are you all keeping yourself busy?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-03-31T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/01/21/tracking-my-fitness-journey/",
      "url": "https://kpwags.com/posts/2020/01/21/tracking-my-fitness-journey/",
      "title": "Tracking My Fitness Journey",
      "content_html": "\n\t\t<p>One of the things I’ve been trying to do while getting in shape is tracking my progress. Weight is obviously one of the metrics I track, but it’s not the only one.</p>\n<h2>Diet</h2>\n<p>Every day, I use MyFitnessPal to log what I eat and drink. I’ve tried other services like LoseIt and Cronometer, but for all its issues, it works the best for me.</p>\n<p>Despite this, I still want to be able to keep track of things should MyFitnessPal become unusable for whatever reason or a better service comes along. To accomplish this, I copy the basic data into an Excel spreadsheet. I don’t go so crazy as to copy all the food I eat into the spreadsheet, but I input my calories, protein, fat &amp; carbs intake. This helps me see trends and see how I’m doing.</p>\n<p>I also grade myself daily for what I eat. I grade myself based on where I’m at with regards to my daily goals.</p>\n<h3>Calories</h3>\n<ul>\n<li>Up to 109% of my goal: 3 points</li>\n<li>110-119%: 2 points</li>\n<li>120% or more: 0 points</li>\n</ul>\n<h3>Protein</h3>\n<ul>\n<li>90% or more: 3 points</li>\n<li>80-89%: 2 points</li>\n<li>&lt; 80%: 0 points</li>\n</ul>\n<h3>Carbs &amp; Fat</h3>\n<ul>\n<li>Up to 109% of my goal: 2 points</li>\n<li>110-119%: 1 points</li>\n<li>120% or more: 0 points</li>\n</ul>\n<p>I give myself a total of 10 points a day, weighted more on protein and calories. It might seem a little crazy, and it probably is, but I’ve found that it helps keep me at least a little more honest with improving my diet. For quick looks, I code each day green, yellow, or red depending on points. 8 through 10 and it’s a “green” day, 5 through 7 is yellow, and below 5 is red.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/m95seS5eaO-1073.webp 1073w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/m95seS5eaO-1073.gif 1073w\" /><img alt=\"My Excel spreadsheet tracking my diet\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/m95seS5eaO-1073.png\" width=\"1073\" height=\"764\" /></picture></p>\n<p>It might be overkill, but I’m hoping it will help keep me on track. I’ve generally been pretty good at keeping active, but the saying is certainly true:</p>\n<blockquote>\n<p>“You can’t outrun a bad diet”</p>\n</blockquote>\n<p>Anything I can do to help keep my diet in check will be of help as I think it’s the biggest obstacle left.</p>\n<h2>Lifting</h2>\n<p>If you’ve read my blog before, you know that I’ve been doing a lot of focus on strength training. With lifting, I feel the best way to make sure you’re progressing, is to make sure you’re tracking your lifts. At the gym, I use a moleskin notebook to keep track of my lifts. I used to use the Strong App, but tried paper and found I liked it better. I fill out my lifts for the cycle through and check off each set as I complete it. If I end up failing a set, I mark it with an ’X’.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/kekRK2BtdX-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/kekRK2BtdX-1920.gif 1920w\" /><img alt=\"My Moleskine notebook for tracking my lifts\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/kekRK2BtdX-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n<p>When I get home, I transfer the data into a spreadsheet to calculate the volume lifted and to have an easier view back into my historical lifts.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/w59Juw4XD4-1417.webp 1417w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/w59Juw4XD4-1417.gif 1417w\" /><img alt=\"My Excel spreadsheet tracking my lifts\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/w59Juw4XD4-1417.png\" width=\"1417\" height=\"781\" /></picture></p>\n<h2>Weight</h2>\n<p>Every morning after I take care of the animals, I step on my scale and weigh myself. I then put it into, you guessed it, an Excel spreadsheet. Because our weight fluctuates daily, I have it automatically calculate rolling 3, 7, 14 &amp; 30 day averages. I mainly look at the 7 and 14 day averages to see how I’m doing. I almost never even bother looking at the daily numbers.</p>\n<h2>Activity</h2>\n<p>The last couple years, I’ve been trying to make it a goal for myself to generally be active almost every day. This doesn’t mean always running or the gym, although more often than not, that’s the likely activity. It could be as simple as a walk, or even some more extensive yard work.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/BFyjd2-8ew-1805.webp 1805w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/BFyjd2-8ew-1805.gif 1805w\" /><img alt=\"My Excel spreadsheet tracking my activity\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/BFyjd2-8ew-1805.png\" width=\"1805\" height=\"431\" /></picture></p>\n<p>I keep this saved in a spreadsheet as well as copies of some of the other data I log to give myself a dashboard to look at, as well as weekly averages. I also use colors to help get a quick sense of how things are going. I like seeing green as much as possible.</p>\n<hr />\n<p>I’m probably over-complicating some things, but I like having data I can look at to see where I’m trending and potentially identifying where I can improve.</p>\n<p>So what about you? What do you track, and how?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-01-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2020/01/05/yearly-wrapup-and-retrospective-2019/",
      "url": "https://kpwags.com/posts/2020/01/05/yearly-wrapup-and-retrospective-2019/",
      "title": "Yearly Wrap-up and Retrospective: 2019",
      "content_html": "\n\t\t<p>Another year has passed and it’s been a tradition of mine as of late to look back on the year that was to see what I hoped to have done, what I did, and where I might improve. I really wish I knew where 2019 went because it seemed to have just flown by. It seemed like it was just yesterday that I was writing about 2018, looking onward to 2019. Now 2019 is gone, the new decade has <a href=\"https://xkcd.com/2249/\">maybe?</a> begun, and I’m a year older.</p>\n<h2>First, Let’s Look Back to What I Wanted to Accomplish</h2>\n<p>Heading into 2019, I set several goals for myself.</p>\n<ol>\n<li><strong>Lose Weight</strong>: I had been struggling getting my diet under control for several years with a lot of progress and then relapses.</li>\n<li><strong>Read More</strong>: After reading like a fiend for several years, my reading had tapered off and I was hoping to read more.</li>\n<li><strong>Build My Side Project</strong>: I had plenty of false starts working on my new side project. Building part of it and then not liking where it was, etc. I wanted to actually finish it and teach myself Node.js, React, &amp; GraphQL in the process.</li>\n<li><strong>Write More</strong>: I’ve been neglecting writing actual content for my blog and even had an idea for a novel. I wanted to write more for both.</li>\n</ol>\n<h2>What Went Well in 2019</h2>\n<h3>I was able to significantly progress in my strength training.</h3>\n<p>I went into 2019 setting strength goals of squatting 275 lbs., benching 225 lbs., deadlifting 400 lbs., and hitting 150 lbs. on the Overhead Press. I was able to hit each of these goals except for deadlift. In July, I switched to the <a href=\"https://liftvault.com/programs/powerlifting/n-suns-lifting-spreadsheets/\">nSuns</a> lifting routine and was able to really increase my main lifts. I think part of it was psychological, realizing that I could actually lift the heavier weights. (As an aside, seeing the weight go up on squats was kind of scary to me prepping for the heavy sets.)</p>\n<p>I managed to get to</p>\n<ul>\n<li>300 lbs. on squats</li>\n<li>230 lbs. on bench press</li>\n<li>160 lbs. on overhead press</li>\n<li>345 lbs. on deadlift</li>\n</ul>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/qXgxLaNECN-1245.webp 1245w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/qXgxLaNECN-1245.gif 1245w\" /><img alt=\"Charts showing progress in squat, bench press, deadlift, &amp; overhead press\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/qXgxLaNECN-1245.png\" width=\"1245\" height=\"765\" /></picture></p>\n<p>Not too shabby.</p>\n<p>I stalled out some on overhead press and bench press, but I’m slowly working my way back up. Better to go slowly and not hurt myself.</p>\n<h3>I made significant progress on my side project.</h3>\n<p>Thanks to Wes Bos’ <a href=\"https://advancedreact.com/\">Advanced React tutorial</a>, I was able to gain a grasp on React &amp; GraphQL and make real progress on my side project currently called ‘Digital Family Cookbook’. The web app is mostly complete. I’m currently working on tidying some things up and unit testing. I haven’t really done something like this in a while so I’ve been pretty excited seeing the progress.</p>\n<h3>I did manage to lose some weight.</h3>\n<p>I wasn’t able to completely fix my diet, but I did manage to lose 15 or so pounds. Could’ve done better, but I did better than previous years.</p>\n<h3>I started playing goalie in hockey.</h3>\n<p>This wasn’t really a goal for me at the beginning of the year, but in September, I started playing goalie in ice hockey. I was able to borrow the gear from a fellow goalie in the lower league, tried it in some practice sessions, and decided I enjoyed it. I’ve since purchased the gear and just finished my first season. I had some good games, but I also had some stinkers as well. Either way, I’ve had a lot of fun playing the position and intend to continue playing goalie in the lower league and skate out in the upper league.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/q5AzHdtMdQ-1500.webp 1500w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/q5AzHdtMdQ-1500.gif 1500w\" /><img alt=\"Me tending the net as a hockey goalie\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/q5AzHdtMdQ-1500.jpeg\" width=\"1500\" height=\"1200\" /></picture></p>\n<h2>What I Struggled With in 2019</h2>\n<h3>I didn’t write nearly as much as I wanted.</h3>\n<p>Looking at my blog, it shouldn’t be that hard to realize that I didn’t write all that much or add that much content. I had a bunch of weekly reading lists, but that’s not quite the same as pieces that have depth to them. I did start outlining an idea I’ve had for a novel. The idea isn’t new, but I started to lay it out. But that’s about as far as I got. I ended up getting distracted with other things and let it go by the wayside.</p>\n<h3>I didn’t read that much.</h3>\n<p>Social media played a bit of a role in this one. I was trying to go to bed a little on the early side so I could read for a bit before bed. All too often though, I ended up pulling out my iPad instead of my Kindle. Part of it I might chalk up to some of the books I’ve read and am currently reading. Some tended to be rather dense (good books, but just diving into their subjects deeply) and I wasn’t always in the mood to really focus. The book I’m currently reading, <a href=\"https://www.amazon.com/gp/product/0062405667\">Vietnam: An Epic Tragedy, 1945-1975</a> by Max Hastings is a fantastic look into Vietnam, but requires a lot of focus to keep up with what’s going on. It’s also almost 900 pages. I hope to finish by the end of the month.</p>\n<h3>I was a little too loose with my diet.</h3>\n<p>This one is pretty much everyone’s achilles heel it seems. I was no different. I went through stretches of being good and not over-indulging, only to follow it up with some less than disciplined days. I made progress, but not as much as I could have.</p>\n<h2>What I Hope to Accomplish in 2020</h2>\n<p>I don’t think I’m going to change my goals for 2020. I’m going to stick with last year’s goals and do better.</p>\n<ol>\n<li><strong>Continue Working on My Diet</strong>: Not much more needs to be said here. The one thing I’m going to try to change though is to do better to record what I eat and drink in <a href=\"https://www.myfitnesspal.com/\">MyFitnessPal</a>. I think some of the days I realized I was going to exceed my goals (not in a good way), I just stopped entering what I ate. Maybe by entering in more, I might be able to look at things in a different way and hopefully make some positive changes. I know I’m still going to have some days that might not be ideal for my diet, but screw it, I only live once and I’m not going to cut out all of the junk...just hopefully lessen the amount of times that happens.</li>\n<li><strong>Finish Up My Side Project</strong>: This one should hopefully not take too much longer. I hope to finish it, figure out the best way to deploy it, and share it with the world. I have a few other ideas for other projects as well, so who knows, maybe I’ll end up building more in some of my free time.</li>\n<li><strong>Read More</strong>: My reading list has continued to grow, so I’m going to need to spend some time knocking out more of it. My plan is to cut back some on social media, Reddit especially. While I enjoy some good nonfiction, reading about history and whatnot, I’m thinking I might also lighten my reading a little bit and try to knock out some of the “easier” reads off my list. Hopefully that will make it easier to pick up a book rather than my iPad. I do plan on continuing to read my subscription to <em>The Economist</em>, but hopefully I can mix that in well enough.</li>\n<li><strong>Write More</strong>: This one is probably going to continue to be a little tougher for me, but I’m hoping I can set some time aside and put some focus into it. I think one thing that always scares me with blog posts, especially ones focusing on technical subjects is making a mistake and writing something that turns out being wrong (<a href=\"https://www.xkcd.com/386/\">Relevant xkcd</a>). If I can will myself past that and get used to correcting myself when I “oops”, it should help me on my way. I’m hoping to make some progress both in writing more blog posts as well as maybe some work on my novel.</li>\n</ol>\n<h2>What Are Your Goals for 2020?</h2>\n<p>What are your goals for the new year?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2020-01-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/10/01/reading-list/",
      "url": "https://kpwags.com/posts/2019/10/01/reading-list/",
      "title": "Reading List 9/23 - 9/29",
      "content_html": "\n\t\t<p>This week we look at a historical close call with our nuclear weapons, the OLPC laptop, the NSA going after ISIS, good CSS design tips, and ES2019.</p>\n<h4><a href=\"https://www.thedrive.com/the-war-zone/29945/the-time-when-a-burning-b-52-nearly-caused-a-nuclear-catastrophe-worse-than-chernobyl\">The Time When A Burning B-52 Nearly Caused A Nuclear Catastrophe &quot;Worse than Chernobyl&quot;</a></h4>\n<p>I remember reading <a href=\"https://www.amazon.com/gp/product/B005BUG6T8\">Drift: The Unmooring of American Military Power</a> by Rachel Maddow several years ago that mentioned some of our close calls with nuclear weapons almost going off by accident. It's kind of scary and who knows how much more we don't know.</p>\n<h4><a href=\"https://www.theverge.com/2018/4/16/17233946/olpcs-100-laptop-education-where-is-it-now\">OLPC’s $100 laptop was going to change the world — then it all went wrong</a></h4>\n<p>It's a shame this didn't really work out the way many hoped. This is an interesting read on the history and where they are now.</p>\n<h4><a href=\"https://www.npr.org/2019/09/26/763545811/how-the-u-s-hacked-isis\">How The NSA And U.S. Cyber Command Hacked ISIS’s Media Operation</a></h4>\n<p>This is a pretty good read in terms of some of the things the NSA and US Military has gone after the internet/media arm of ISIS.</p>\n<h4><a href=\"https://css-tricks.com/design-principles-for-developers-processes-and-css-tips-for-better-web-design/\">Design Principles for Developers: Processes and CSS Tips for Better Web Design</a></h4>\n<p>Some good pointers for improving the look of websites.</p>\n<h4><a href=\"https://medium.com/@selvaganesh93/javascript-whats-new-in-ecmascript-2019-es2019-es10-35210c6e7f4b\">JavaScript: What’s new in ECMAScript 2019 (ES2019)/ES10?</a></h4>\n<p>A good summary of what is being introduced in the latest version of JavaScript.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-10-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/09/08/reading-list/",
      "url": "https://kpwags.com/posts/2019/09/08/reading-list/",
      "title": "Reading List 9/2 - 9/8",
      "content_html": "\n\t\t<p>This week I read about Firefox improving users' privacy by default, why the GOP and conservatives are wrong about &quot;censorship&quot; on social media, nuclear energy, and a weird bit of tax policy.</p>\n<p><a href=\"https://www.theverge.com/2019/9/3/20848629/firefox-69-block-third-party-tracker-default-enhanced-tracking-protection-android-windows-mac-os\">Firefox’s latest version blocks third-party trackers by default for everyone</a></p>\n<p>It's nice to see Firefox standing up for user privacy as the default option.</p>\n<p><a href=\"https://legaltalknetwork.com/podcasts/make-no-law/2019/08/deplatformed-social-media-censorship-and-the-first-amendment/\">Deplatformed: Social Media Censorship and the First Amendment</a></p>\n<p>No, Twitter is not breaking the first amendment by banning you.</p>\n<p><a href=\"https://www.theverge.com/2019/9/5/20850763/climate-change-cnn-town-hall-democrat-candidates-nuclear-energy-2020-elections\">Democrats are divided on using nuclear energy to stop climate change</a></p>\n<p>Much like the last 40 years, nuclear power is still an unsure prospect.</p>\n<p><a href=\"https://nymag.com/intelligencer/2019/09/how-tax-policy-gave-us-white-claw.html\">How Tax Policy Gave Us White Claw</a></p>\n<p>Just an interesting bit as to how tax policy can have some strange effects.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-09-08T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/09/03/reading-list/",
      "url": "https://kpwags.com/posts/2019/09/03/reading-list/",
      "title": "Reading List 8/26 - 9/1",
      "content_html": "\n\t\t<p>This week I read about a spouse's experience with the aftermath of an NFL career, Apple at least partially embracing the right-to-repair, and the benefits of code deletion.</p>\n<h4><a href=\"https://deadspin.com/my-husband-is-dying-every-day-1837411982\">My Husband Is Dying Every Day</a></h4>\n<p>The NFL is a grueling sport with lifelong consequences for those that play the game. Andrew Luck's early retirement given his injury history might be a blessing in disguise for himself later down the line.</p>\n<h4><a href=\"https://www.apple.com/newsroom/2019/08/apple-offers-customers-even-more-options-for-safe-reliable-repairs/\">Apple offers customers even more options for safe, reliable repairs - Apple</a></h4>\n<p>It's good to see Apple making it a little easier for us to repair our iDevices.</p>\n<h4><a href=\"https://www.techrepublic.com/article/in-praise-of-developers-who-delete-code/\">In praise of developers who delete code</a></h4>\n<p>Sometimes getting rid of code can be even better than adding new code.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-09-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/08/25/reading-list/",
      "url": "https://kpwags.com/posts/2019/08/25/reading-list/",
      "title": "Reading List 8/19 - 8/25",
      "content_html": "\n\t\t<p>This week I read about Javascript, jQuery, terraforming Mars, baseball cards and more.</p>\n<h4><a href=\"https://blog.logrocket.com/the-history-and-legacy-of-jquery/?ref=heydesigner\">The history and legacy of jQuery</a></h4>\n<p>Myself, like many others have relied on jQuery for various different projects.</p>\n<h4><a href=\"https://kentcdodds.com/blog/javascript-to-know-for-react\">JavaScript to Know for React</a></h4>\n<p>I've been using and learning these bits of Javascript and ES6 in my React project.</p>\n<h4><a href=\"https://www.syfy.com/syfywire/is-nuking-mars-a-good-idea-no\">Is nuking Mars a good idea? (No)</a></h4>\n<p>In case anyone had any bright ideas about this...</p>\n<h4><a href=\"https://www.espn.com/mlb/story/_/id/27425987/guy-ball-crotch-story-funniest-baseball-card-ever-made\">‘You’re the guy with the ball to the crotch’ — The inside story behind the funniest baseball card ever made</a></h4>\n<p>I wish I saw this when I was younger and collected baseball cards.</p>\n<h4><a href=\"https://alligator.io/css/css-units-explained/\">CSS Units Explained</a></h4>\n<p>A little explainer for some of the main units used with CSS.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-08-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/08/18/reading-list/",
      "url": "https://kpwags.com/posts/2019/08/18/reading-list/",
      "title": "Reading List 8/12 - 8/18",
      "content_html": "\n\t\t<p>This week I read about changes in the US Navy, another nuclear accident in Russia, a prank gone wrong, and more.</p>\n<h4><a href=\"https://www.theverge.com/2019/8/11/20800111/us-navy-uss-john-s-mccain-crash-ntsb-report-touchscreen-mechanical-controls\">The US Navy will replace its touchscreen controls with mechanical ones on its destroyers</a></h4>\n<p>Touch screens might be good for some things, but for important functions in a military vessel might need something a little more reliable.</p>\n<h4><a href=\"https://arstechnica.com/information-technology/2019/08/russian-nuclear-powered-cruise-missile-blows-up-creating-mini-chernobyl/\">Russian nuclear-powered cruise missile blows up, creating “mini-Chernobyl”</a></h4>\n<p>Much like Chernobyl, Russia's response to the rest of the world has been less than forecoming.</p>\n<h4><a href=\"https://mashable.com/article/dmv-vanity-license-plate-def-con-backfire/\">He tried to prank the DMV. Then his vanity license plate backfired big time.</a></h4>\n<p>Seems like he got his just deserts.</p>\n<h4><a href=\"https://www.fastcompany.com/90389104/the-surveillance-state-has-invaded-our-cars-why-dont-we-care\">The surveillance state has invaded our cars. Why don’t we care?</a></h4>\n<p>It's just a matter of time until we're all required to have full-fledged black boxes in our cars outside of insurance companies.</p>\n<h4><a href=\"https://www.nytimes.com/2019/08/13/science/what-makes-a-red-sky-at-night-and-at-morning.html\">What Makes a Red Sky at Night (and at Morning) - The New York Times</a></h4>\n<p>An interesting and funny explanation of why the colors of the sky change the way they do.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-08-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/08/15/continuing-my-side-project-and-learning-react/",
      "url": "https://kpwags.com/posts/2019/08/15/continuing-my-side-project-and-learning-react/",
      "title": "Continuing My Side Project &amp; Learning React",
      "content_html": "\n\t\t<p>Lately, I’ve been making steady progress on my side project, which I’m currently calling <em>Digital Family Cookbook</em>. I’m making it as a content management system for cooking recipes. As I’ve mentioned previously, I’m writing it using Node.js, React, &amp; GraphQL. It’s been quite a learning curve, but I’m definitely glad I’ve been working on it. The tools are pretty cool and easy-ish to use once you get used to the syntax and some of the idiosyncrasies of React and JSX.</p>\n<h2>It’s different from what I’m used to</h2>\n<p>Most of what I’ve written in the past has been Javascript interacting with a server running PHP or .NET, so I’m generally used to the way they work and run. I think the biggest thing that I’ve had to remember is that Node is just javascript and it runs synchronously so I have to be cognizant of that. I’m generally used to my server code running asynchronously and not having to worry as much about race conditions. Getting data from a SQL server in let’s say .NET will run the query and not move on until the query is complete. With Node, I have to make sure I don’t move on before the data fetch is complete. In ES5, this generally meant callback hell. Thankfully with promises, combined with async/await in ES6, this has become a little easier to manage, but it did have me confused for a little bit not thinking.</p>\n<h3>The “Gotcha” Moment</h3>\n<p>The perfect example of having to remember this difference was with what I’m currently working on. The feature I’m currently working on is the form to create recipes. I managed to get the form working, I got the data sent to the server, the recipe was created, but none of the directions or ingredients were attached to the recipe. I looked in the database and the directions were there, as were the ingredients, but the recipe had no idea they existed. I thought maybe the server wasn’t getting the data, but a console.log quickly showed me it was. What I failed to take into account was that the forEach function on the directions and ingredients array was not being awaited like I thought it was.</p>\n<p>I wrote the code to go through each ingredient and direction, add it to the database, and add its ID to an array. Then in the create recipe mutation, add the connections. Because it wasn’t being awaited, the arrays didn’t get populated by the time it was running the create recipe mutation so no link was ever created…oops!</p>\n<p>A quick change corrected that problem and all of a sudden, the form worked as expected.</p>\n<pre class=\"language-javascript\" tabindex=\"0\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> directionCreations <span class=\"token operator\">=</span> formValues<span class=\"token punctuation\">.</span>directions<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">d</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> direction <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> ctx<span class=\"token punctuation\">.</span>db<span class=\"token punctuation\">.</span>mutation<span class=\"token punctuation\">.</span><span class=\"token function\">createDirection</span><span class=\"token punctuation\">(</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token literal-property property\">data</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token literal-property property\">direction</span><span class=\"token operator\">:</span> d<span class=\"token punctuation\">.</span>direction<span class=\"token punctuation\">,</span>\n                <span class=\"token literal-property property\">sortOrder</span><span class=\"token operator\">:</span> d<span class=\"token punctuation\">.</span>sortOrder<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        ‘<span class=\"token punctuation\">{</span> id <span class=\"token punctuation\">}</span>’<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> direction<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> directions <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span>directionCreations<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p>In the end, it was a pretty easy mistake to make, but it’s one I’m going to remember and learn from.</p>\n<h2>Moving Forward</h2>\n<p>I still have quite a bit of work to do on the project, but it’s nice to see some real progress on what I’m working on. I’m definitely enjoying the learning process and am excited to see some of my ideas come to life. I could have built this in a language like PHP, .NET or something I’m more familiar with and be done more quickly, but seeing the power of modern Javascript, GraphQL and Node.js, I’m quite happy with my technology decision. There’s so much to learn, and so much more room to grow.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-08-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/08/11/reading-list/",
      "url": "https://kpwags.com/posts/2019/08/11/reading-list/",
      "title": "Reading List 8/5 - 8/11",
      "content_html": "\n\t\t<p>I've decided to start this back up. Some interesting thoughts about making the data social media has on us transferrable, DIY Phone Farms, and a new software development podcast I've found.</p>\n<h4><a href=\"https://www.techdirt.com/articles/20190731/17390142693/dont-let-this-get-lost-shuffle-data-transfer-project-is-expanding-could-help-create-real-competition-online.shtml\">Don't Let This Get Lost In The Shuffle: The Data Transfer Project Is Expanding, And Could Help Create Real Competition Online</a></h4>\n<p>It's cool to see this still around. Being able to transfer your data between social media platforms might help with the silos Facebook, Instagram, Twitter &amp; other platforms create.</p>\n<h4><a href=\"https://dev.to/dotnet/what-s-the-big-deal-with-iasyncenumerable-t-in-net-core-3-1eii\">What's the big deal with IAsyncEnumerable in .NET Core 3.0?</a></h4>\n<h4><a href=\"https://www.vice.com/en_us/article/d3naek/how-to-make-a-phone-farm\">America’s DIY Phone Farmers</a></h4>\n<p>I guess if you want to make a quick buck, this works. It just seems like a lot of work to set up to me. It also reminds me of the constant cat and mouse games anti-virus companies play with the virus creators.</p>\n<h4><a href=\"https://kentcdodds.com/chats-with-kent-podcast/\">Chats with Kent Podcast</a></h4>\n<p>I found this podcast and thought it had some great people on discussing a wide range of topics. The entire first season is live now.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-08-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/07/30/getting-stronger/",
      "url": "https://kpwags.com/posts/2019/07/30/getting-stronger/",
      "title": "Getting Stronger",
      "content_html": "\n\t\t<p>At the beginning of July, I decided to change up my gym routine. I had been running a variation of the <a href=\"https://www.muscleandstrength.com/workouts/phul-workout\">P.H.U.L. routine</a>, but decided I wanted to try something a little more intense since I felt like I was plateauing with both deadlifts and bench press.</p>\n<p>I ended up choosing the <a href=\"https://liftvault.com/programs/powerlifting/n-suns-lifting-spreadsheets/#Progression_for_Main_Lifts\">nSuns 5 day routine</a> and so far, I’m really liking it. I haven’t gotten the chance yet to break through any of my plateaus as of yet, but I’m feeling stronger and putting up more volume than I have in a while.</p>\n<p>This week is going to be a big test for that. I just beat my previous personal record (PR) in squats by squatting 260 lbs. which is 10 lbs. heavier than my previous PR of 250. I managed to finally do a single plate (135 lbs.) overhead press last week and will be trying for 140 this week. The real test will be days 4 and 5 this week when I attempt to break my PRs for both deadlifts and bench press by going for 320 lbs. on deadlifts and 215 lbs. on bench. Both are 5 lbs. heavier than my previous records.</p>\n<p>I don’t know how exactly to compare this to previous routines since I only do one set of each at the heaviest weight when before I would do sets of 3 to 5, but I’m feeling better about it.</p>\n<p>I also don’t know how much of this is just beginning the new routine and when I will inevitably stall a bit, but I’m taking it in stride. I feel like some of it is mental as well. As funny as it might sound, I feel like the routine is pushing me to exit my comfort zone and try heavier weights than I might normally attempt. This can of course be a little dangerous, but at the same time, it’s not doing it at such a steep jump to make it seem too impossible for me to do.</p>\n<p>The only real downside to it so far is that my gym sessions went from just over an hour to sometimes over an hour and a half. This isn’t much of an issue, but it has been limiting my available time to run and do other cardio. I’m still hoping to hit 300 miles running this year, but right now, I’m starting to lag a bit in reaching it. I’m hoping to go on some longer runs over the weekend once the temperature becomes a little cooler.</p>\n<p>All in all, I’m happy with my progress. My lifts are going up, my weight is coming down, and I feel better and healthier for it. I’m planning on keeping with this program for 12 weeks so I’ll see what if any changes I’ll make then.</p>\n<p>Until then, I’ll keep on grindin’!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-07-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/05/28/12-weeks-of-phul/",
      "url": "https://kpwags.com/posts/2019/05/28/12-weeks-of-phul/",
      "title": "12 Weeks of P.H.U.L.",
      "content_html": "\n\t\t<p>Over the last 12 weeks, I’ve been running the <a href=\"https://www.muscleandstrength.com/workouts/phul-workout\">P.H.U.L. Workout Routine</a>.</p>\n<p>This is the first time I think I’ve stuck with a routine that long without some tweaks here and there. I enjoyed the routine. It had me at the gym 4 days a week which gave me the other days to get some outdoor runs in. My gains haven’t been as fast as I have done in other programs, but I’m feeling stronger, and better about my progress.</p>\n<p><strong>Bench Press:</strong> 200 lbs. → 210 lbs.</p>\n<p><strong>Squat:</strong> 230 lbs. → 245 lbs.</p>\n<p><strong>Deadlift:</strong> 305 lbs. → 315 lbs.</p>\n<p><strong>Overhead Press:</strong> 105 lbs. → 115 lbs.</p>\n<p>Like I said, the progress hasn’t been as fast as I have done in other routines, but I’m also not doing linear progression like I was before. I generally have been sticking with the weight for 2-3 sessions, increasing the reps each week before bumping up the weight. While the weight numbers haven’t gone up, the volume lifted each week per exercise generally has. Even more important, I feel better about my lifts each time through the cycle. That said, I have struggled upping my bench press and deadlift weights, but I’m hoping to move up some soon.</p>\n<p>The only tweak I made early on was moving overhead press to my upper hypertrophy day. I was noticing that I was having problems with being able to bench heavy and OHP heavy the same day. Whichever one I did first I generally did well in, but whichever one came second, I struggled and often failed. I think this is also part of my troubles with deadlifts. I do deadlifts following my squats, and am wondering if that’s part of the reason.</p>\n<p>I’m going to continue to do the P.H.U.L routine, but with some changes for the next 12 weeks. I’m going to move deadlifts to my lower hypertrophy day. I’m going to add Romanian Deadlifts to my lower power day in exchange, focusing more on volume than on weight. I’m also going to switch out barbell lunges for Bulgarian split squats. I’m hoping to continue to make progress, and see my lifts get heavier.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-05-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/03/12/my-progress-so-far/",
      "url": "https://kpwags.com/posts/2019/03/12/my-progress-so-far/",
      "title": "My Progress So Far",
      "content_html": "\n\t\t<p>Two and a half months in, I figured I’d reflect on where things stand with regards towards working towards the goals I set for myself.</p>\n<p>I feel pretty good with the progress I’ve made so far. In some areas I could be better, but overall, I’ve been happy with what I’ve done so far this year.</p>\n<h2>Losing Weight</h2>\n<p>I’m down almost 10 pounds, so I figure that’s progress. My diet still needs work, but I feel I’m doing better now than I was before. The color coding I’ve done for myself still slants towards red and yellow more than green, but I think some of that comes from not enough protein and too many carbs rather than calories. Either way though, I can do better.</p>\n<p>I’ve continued to do well with making it to the gym. I decided to change up programs a little bit. I’ve moved away from the PPL program and have adopted the <a href=\"https://www.muscleandstrength.com/workouts/phul-workout\">P.H.U.L.</a> program instead. My progression might end up getting a little slower, but hopefully I’ll get stronger overall. I can happily say I’m benching more than 200 lbs. for the first time in my life. My squats and deadlifts are finally getting back up there after my groin injury so I’m hoping to continue making progress there.</p>\n<h2>Read More</h2>\n<p>I’ve fallen behind in this one a little bit with regards to books. I’m only on my third book of the year, but I have been reading the news and other sources as well. I need to continue to force myself to bed earlier to get in some reading before I turn off the lights.</p>\n<h2>Side Project</h2>\n<p>I can actually say that I’ve made progress on this. I don’t have much to show at the moment, but I finished the <a href=\"https://advancedreact.com/\">Advanced React tutorial</a> I was working on and feel like I’m in a good place right now with it.</p>\n<h2>Write More</h2>\n<p>This one, I need to work on. I have a few ideas for posts, but need to find a good way to put them into words which is easier said than done. That said, I just need to sit down and do it.</p>\n<p>I’m feeling good with where I’m at with my goals. There’s still plenty of year left, so hopefully I can make the most of it!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-03-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/03/10/reading-list/",
      "url": "https://kpwags.com/posts/2019/03/10/reading-list/",
      "title": "Reading List 3/4 - 3/10",
      "content_html": "\n\t\t<p>Not too long this week. We look at the anti-vaccine movement, a new drug treatment for depression, Facebook's &quot;supposed&quot; change, and a neat proof of concept for spying.</p>\n<h4><a href=\"https://www.npr.org/2019/03/06/700617424/18-year-old-testifies-about-getting-vaccinated-despite-mothers-anti-vaccine-beli?utm_medium=RSS&amp;utm_campaign=news\">18 Year Old Testifies About Getting Vaccinated Despite Mother’s Anti-Vaccine Beliefs</a></h4>\n<p>It’s good to see people taking action against irresponsible behavior.</p>\n<h4><a href=\"https://www.theverge.com/2019/3/5/18252572/esketamine-fda-depression-fast-acting-treatment-health-science\">FDA Approves Ketamine-Derived Depression Drug</a></h4>\n<p>Despite being known as a party drug, a ketamine has shown promise helping with depression.</p>\n<h4><a href=\"https://www.marketplace.org/2019/03/07/tech/will-facebook-be-to-able-reinvent-itself-as-a-leader-in-privacy\">Will Facebook Be Able to Reinvent Itself as a Leader in Privacy?</a></h4>\n<p>Hahahahahahaha… NO</p>\n<h4><a href=\"https://www.theregister.co.uk/2019/03/07/hard_drive_eavesdropping/\">Hard Drives Able to Turn into Eavesdropping Devices</a></h4>\n<p>This is kind of cool, the old style disk drives are capable of recording audio.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-03-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/03/03/reading-list/",
      "url": "https://kpwags.com/posts/2019/03/03/reading-list/",
      "title": "Reading List 2/18 - 3/3",
      "content_html": "\n\t\t<p>2 weeks combined this time as I was in NYC last weekend. This week I read about loot boxes, whistle blowing, YouTube conspiracies and more.</p>\n<h4><a href=\"https://www.theverge.com/2019/2/19/18226852/loot-boxes-gaming-regulation-gambling-free-to-play\">How Loot Boxes Hooked Gamers and Left Regulators Spinning</a></h4>\n<p>I’m no fan of loot boxes, I much prefer just playing the game.</p>\n<h4><a href=\"https://www.newyorker.com/magazine/2019/02/04/the-personal-toll-of-whistle-blowing\">The Personal Toll of Whistle-Blowing</a></h4>\n<p>Blowing the whistle is never easy, and those that do have quite a bit to deal with.</p>\n<h4><a href=\"https://www.washingtonpost.com/news/book-party/wp/2019/01/25/feature/can-impeachment-appear-legitimate-in-a-hyper-partisan-universe/?utm_term=.2643061d0677\">Can impeachment appear legitimate in a hyper-partisan universe?</a></h4>\n<p>People often just say that it’s the opponents trying to undo the will of the people.</p>\n<h4><a href=\"https://www.nytimes.com/2019/02/19/technology/youtube-conspiracy-stars.html\">YouTube Unleashed a Conspiracy Theory Boom. Can It Be Contained?</a></h4>\n<p>YouTube wants to limit the reach of conspiracy theories. Will they really go after some of their biggest YouTube stars?</p>\n<h4><a href=\"https://mxstbr.com/thoughts/css-in-js/\">Why I Write CSS in Javascript</a></h4>\n<p>I’m not sure that I have a strong opinion on this yet, but the React tutorial I’m going through uses Styled Components and I definitely see the utility.</p>\n<h4><a href=\"https://www.marketplace.org/2019/02/26/economy/corner-office-marketplace/why-no-wall-street-ceo-went-jail-after-financial-crisis\">Why no Wall Street CEO went to jail after the financial crisis</a></h4>\n<p>A little background on the aftermath of the 2008 financial crisis and why no one went to jail.</p>\n<h4><a href=\"http://abcradio.com/podcasts/the-dropout/\">The Dropout Podcast</a></h4>\n<p>An amazing podcast series talking about the rise and fall of Elizabeth Holmes and Theranos.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-03-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/02/19/reading-list/",
      "url": "https://kpwags.com/posts/2019/02/19/reading-list/",
      "title": "Reading List 2/11 - 2/17",
      "content_html": "\n\t\t<p>It's a little late, but here we go. This week we look at code, login forms, and the old Altavista search engine.</p>\n<h4><a href=\"https://medium.com/@sgrif/no-the-problem-isnt-bad-coders-ed4347810270\">No the Problem isn’t Bad Coders</a></h4>\n<p>Insightful post about challenges to working with codebases and good, safe code.</p>\n<h4><a href=\"https://digital.com/about/altavista/\">The Rise and Fall of Altavista</a></h4>\n<p>Before Google, there was Altavista. It was the first search engine that supported natural language searching and other things. Despite all of this, it is now just a bookmark in the history of the web.</p>\n<h4><a href=\"http://bradfrost.com/blog/post/dont-get-clever-with-login-forms/\">Don’t Get Clever with Login Forms</a></h4>\n<p>Seriously, they’re just to log us in, they don’t need to be complex. Easier means that we can use password managers more effectively as well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-02-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/02/10/reading-list/",
      "url": "https://kpwags.com/posts/2019/02/10/reading-list/",
      "title": "Reading List 2/4 - 2/10",
      "content_html": "\n\t\t<p>This week looks at controversies at Instacart and DoorDash, possible changes in MLB rules, French battlefields in WWI and WWII, &amp; Google/Facebook lock-in.</p>\n<h4><a href=\"https://techcrunch.com/2019/02/04/why-no-one-really-quits-google-or-facebook/\">Why No One Really Quits Google or Facebook</a></h4>\n<p>People are so used to getting stuff for free, not many seem to be willing to pay for services that often don't suck up so much of your data.</p>\n<h4><a href=\"https://www.messynessychic.com/2015/05/26/the-real-no-go-zone-of-france-a-forbidden-no-mans-land-poisoned-by-war/\">The Real “No-Go Zone” of France: A Forbidden No Man’s Land Poisoned by War</a></h4>\n<p>Interesting article with pictures of an area in France where the scars and remnants of the 2 World Wars keep people out.</p>\n<h4><a href=\"http://www.espn.com/mlb/story/_/id/25935056/mlb-players-discussing-rule-changes-alter-game\">MLB and Players Discussing Rule Changes that Could Alter the Game</a></h4>\n<p>For baseball fans, some of these ideas are pretty big, but who knows what might end up making it into the game.</p>\n<h4><a href=\"https://www.nytimes.com/2019/02/06/technology/instacart-doordash-tipping-deliveries.html\">Instacart and DoorDash’s Tip Policies are Delivering Outrage</a></h4>\n<p>I’ve never used either service, but I’d be mad as hell if I knew that my tips were subsidizing the costs the company’s pay for labor. I understand that many in the service industries rely on tips to hit minimum wages, but my tips shouldn’t lower the base rate.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-02-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/02/03/reading-list/",
      "url": "https://kpwags.com/posts/2019/02/03/reading-list/",
      "title": "Reading List 1/28 - 2/3",
      "content_html": "\n\t\t<p>Another week, another set of articles ranging from Apple's row with Facebook to the future of American infrastructure.</p>\n<h4><a href=\"https://www.nytimes.com/2019/01/28/technology/iphones-apple-china-made.html\">A Tiny Screw Shows Why iPhones Won’t Be ‘Assembled in U.S.A.’</a></h4>\n<p>Interesting article talking about supply-chain logistics that just put China ahead of the US for manufacturing Apple products</p>\n<h4><a href=\"https://www.theverge.com/2019/1/30/18203551/apple-facebook-blocked-internal-ios-apps\">Apple Blocks Facebook from Running its Internal iOS Apps</a></h4>\n<p>Facebook went behind Apple’s back with its tracking app, Apple found out and didn’t like it. It goes to show that with iOS, if you don’t follow the rules, you can get unilaterally kicked off the platform.</p>\n<h4><a href=\"https://www.theverge.com/2019/2/1/18205291/apple-facebook-developer-ban-certificate-app-store\">What Would Happen if Apple Fully Banned Facebook from the App Store?</a></h4>\n<p>It would be interesting if this ever happened. That said, it’d probably open Apple up to more questions about anti-trust and their tight control over the iOS platform.</p>\n<h4><a href=\"https://www.theverge.com/2019/1/31/18203591/internet-connectivity-susan-crawford-harvard-law-america-infrastructure-broadband-huawei-vergecast\">Fixing America’s Internet, with Susan Crawford</a></h4>\n<p>An interesting discussion talking about how America is falling behind in terms of Internet connectivity and what can be done to help correct it.</p>\n<h4><a href=\"https://news.ucsc.edu/2019/01/millardball-vehicles.html\">Self-Driving Cars with “Cruise” to Avoid Paying to Park</a></h4>\n<p>This is something I hadn’t thought of. Once cars become fully autonomous, there might be reasons to just let your car drive around while you shop. Reminds me of places where the parking ticket is cheaper than paying the meter.</p>\n<h4><a href=\"https://www.theverge.com/2019/1/31/18204559/apple-facebook-feud-market-research-platform-power\">Apple’s power over Facebook ought to worry the rest of us</a></h4>\n<p>The ability for Apple to turn off the ability’s to run apps on our devices is chilling, even when done with the best of intentions</p>\n<h4><a href=\"https://www.nytimes.com/2019/01/29/magazine/sports-betting-washington.html\">Will Sports Betting Transform How Games Are Watched, and Even Played?</a></h4>\n<p>An interesting take on the future of sports and gambling</p>\n<h4><a href=\"https://www.theverge.com/2019/1/30/18204333/measles-outbreaks-washington-vaccines-state-policy-anti-vax-movement\">Measles are coming back because of vaccination loopholes</a></h4>\n<p>Seriously, just vaccinate your kids</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-02-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/01/27/reading-list/",
      "url": "https://kpwags.com/posts/2019/01/27/reading-list/",
      "title": "Reading List 1/17 - 1/27",
      "content_html": "\n\t\t<p>So I think for 2019, I'm going to try something new. I'm going to try to share a weekly list of various articles and podcasts I've read or listened to over the week that I've found interesting. So here we go.</p>\n<h4><a href=\"https://www.techdirt.com/articles/20190115/12230841398/techdirt-podcast-episode-195-eu-endangers-free-speech-online-again.shtml\">Techdirt Podcast Episode 195: The EU Endangers Free Speech Online... Again</a></h4>\n<p>The EU is working on a new law that could have many unintended side effects, especially with regards to free speech. While this is not US-centric, I can see something similar passing in the US.</p>\n<h4><a href=\"https://www.wnycstudios.org/story/radiolab-punchline\">Radiolab: The Punchline</a></h4>\n<p>As a hockey fan, I can enjoy this story about John Scott, one of the NHL’s last enforcers being voted a captain for the 2016 NHL All Star Game despite the NHL doing anything they could to stop him</p>\n<h4><a href=\"https://app.programmingfonts.org/\">Test Drive Programming Fonts</a></h4>\n<p>Check out some new programming fonts and see how they look. Download them if you like, they’re free</p>\n<h4><a href=\"https://arstechnica.com/gadgets/2019/01/the-linux-of-social-media-how-livejournal-pioneered-then-lost-web-blogging/\">&quot;The Linux of Social Media&quot; - How LiveJournal pioneered (then lost) blogging</a></h4>\n<p>I remember using LiveJournal back in the day…how times have changed</p>\n<h4><a href=\"https://motherboard.vice.com/en_us/article/d3q45v/bittorrent-usage-increases-netflix-streaming-sites\">The Rise of Netflix Competitors Has Pushed Consumers Back Toward Piracy</a></h4>\n<p>I’m not surprised, the draw of Netflix was that it was inexpensive and easy to view content. Now with having to shell out money to more and more services to view the content, the cost is rising which pushes people away. It might not be right, but it’s also part of human nature.</p>\n<h4><a href=\"https://www.nytimes.com/2019/01/17/sports/football/the-nfls-obesity-scourge.html\">The NFL’s Obesity Scourge</a></h4>\n<p>Everyone (rightfully so) talks about the head trauma football players face, but the weight gains that linemen need to do their job often fall through the cracks.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-01-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/01/22/3-weeks-in/",
      "url": "https://kpwags.com/posts/2019/01/22/3-weeks-in/",
      "title": "3 Weeks In",
      "content_html": "\n\t\t<p>Since we’re now about 3 weeks into 2019, I figured I’d quickly see where I’m at in terms of my goals for the year.</p>\n<h2>Losing Weight &amp; Improving Strength</h2>\n<p>I’m down about 4 pounds so far, so that’s good. The bad is that I could still be a little stricter on what I eat. I have more good days than bad, but there’s still quite a bit in the middle I could improve on. I’m not about ready to completely give up burgers and the “less-than-healthy” options, but my self control to turn away the cookie, or slack off and order a pizza is a little higher than I would have preferred. I also haven’t been the greatest at sticking to a dry January, but I’m still drinking less than I normally do, so I’ll count that as a win.</p>\n<p>In terms of my lifts at the gym, I finally crossed the 200 lbs. threshold on bench press, so I’m excited about that. Next bench press day, I’ll be going for 205 lbs. for the first time ever. I’m currently doing 3 sets of 5 for deadlifts, so that’s stalled a bit at 295 lbs., but I generally feel like I’m getting stronger.</p>\n<h2>Reading More</h2>\n<p>I am about 2/3 through <em>The Forever War</em> by Dexter Filkins which would be my 2nd book of the year. I could read more I suppose, but I’d say I’m on the right track.</p>\n<h2>Working on my Side Project</h2>\n<p>This one I’ve made no progress on. I need to continue on with the tutorials. I really just need to set aside some time for it.</p>\n<h2>Writing More</h2>\n<p>I’ve tried over the last couple of weeks to come up with an idea for a post or something to write, but so far I’ve been drawing blanks or have started something only to just delete it because I feel it’s not worth continuing for whatever reason. Again, I should probably just set aside some time and write, even if whatever it is I’m writing never sees the light of day.</p>\n<h2>Other Things I Have Been Doing</h2>\n<p>Some of the things that I have done in the meantime is start catching back up on my video game backlog. I finally played through Uncharted: The Lost Legacy, and have started FarCry 5. The Lost Legacy definitely is worth playing. It continues the Uncharted series fantastic gameplay and story telling. FarCry 5 has been a lot of fun so far as well, but I’m not that far into it. I’m going to try to keep working and hope to knock out some more games.</p>\n<p>Moving on, I’m hoping to continue working towards my goals and hopefully make some progress on just about all of them. The first 3 weeks weren’t bad, but I think I can do better!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-01-22T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2019/01/03/a-new-year/",
      "url": "https://kpwags.com/posts/2019/01/03/a-new-year/",
      "title": "A New Year",
      "content_html": "\n\t\t<p>A year later, let's see what happened in 2018 and what I'm looking at for 2019.</p>\n<h2>Looking Back at 2018</h2>\n<p>Let's look back at 2018 and see how I did with my goals.</p>\n<h3>What I Wanted to Do</h3>\n<h4>Lose Weight</h4>\n<p>Unfortunately, no progress was really made on this front. I did shed a few pounds over the course of the year, but nothing to really write home about. That said, I did make progress in my lifts. I ended up hitting 315 lbs. on deadlifts, 250 lbs. on squats, 195 lbs. on bench press, and 130 lbs. on overhead press. A torn tendon in my groin has set my squats and deadlifts back a bit, but I'm working my way back up. I do feel like I'm in better shape but I could have done better.</p>\n<h4>Reading More</h4>\n<p>I did better with reading than I did with my fitness goals. I ended out the year reading a total of 13 books. I probably could have done better, but as I mentioned, I subscribed to <em>The Economist</em> which occupied some of my reading time as well. I think my three favorite books this year were</p>\n<ul>\n<li><a href=\"https://www.amazon.com/gp/product/B079VDR6HM\">The 2020 Commission Report on the North Korean Nuclear Attacks Against the United States: A Speculative Novel</a> by Jeffrey Lewis</li>\n<li><a href=\"https://www.amazon.com/gp/product/B01N1RRDMH\">Shooting Ghosts: A U.S. Marine, a Combat Photographer, and Their Journey Back from War</a> by TJ Brennan &amp; Finbarr O'Reilly</li>\n<li><a href=\"https://www.amazon.com/gp/product/B06VTV2899\">Vacationland</a> by John Hodgman.</li>\n</ul>\n<h4>Side Projects</h4>\n<p>My recipe project has taken a pause right now as I was starting to struggle figuring out the best way to move forward with it. I decided to buy Wes Bos' <a href=\"https://advancedreact.com/\">Advanced React &amp; GraphQL Course</a> in hopes of finding the best way to do things, and I have to say that it was just what I was looking for. I haven't completed it yet, but it's given me a lot more insight into React and something completely new with GraphQL. I'm hoping to finish it up soon and use what I've learned to build out my project.</p>\n<h4>Write More</h4>\n<p>This was a bust. Not much more can be said other than I just didn't write nearly as much as I wanted.</p>\n<h2>Moving onto 2019</h2>\n<p>I'm going to stick with the same four goals for 2019.</p>\n<h3>Lose Weight</h3>\n<p>Over the last two months of 2018, I was very good at making sure to hit the gym almost daily. I'm going to continue to do that and move forward on my PPL (Pull, Push, Legs) routine. I'm also going to try to hold myself more accountable with my diet. I've created a spreadsheet to go along with my use of <a href=\"https://www.myfitnesspal.com/\">MyFitnessPal</a> to help me with this. I'm color coding my calorie intake as well as my macros to help push me towards my goals. Three days in, and I already hate seeing numbers red. Fortunately most are green or yellow, but it's a small sample size. I'm also going with a dry January. My alcohol intake isn't excessive by any means, but I'm hoping that by kicking it out entirely, I can help shed some pounds in January and have the momentum carry over for the rest of the year.</p>\n<p>With regards to fitness goals, I'm hoping to hit 400 lbs. on deadlifts, 275 lbs. on squats, 225 lbs. on bench press, and 150 lbs. on overhead press by the end of the year. I'd also like to hit the 300 mile mark running.</p>\n<h3>Read More</h3>\n<p>I've already finished one book this year (ok...ok...I started it in 2018), and I'm hoping to keep that going. I'm trying to mix the fiction in with the nonfiction to keep things interesting. My goal this year is 20-25 books, so hopefully I can reach that goal. I've done it before so I know it's attainable.</p>\n<h3>Side Project</h3>\n<p>As I mentioned above, I made some good progress with my recipe project, but my limited knowledge with React and Node started to limit me getting further. The <a href=\"https://advancedreact.com/\">Advanced React &amp; GraphQL Course</a> has been doing a great job helping me get my head around some of the more advanced areas, so once complete, I plan on moving forward. Hopefully, by the beginning of February I can get back to my project.</p>\n<h3>Write More</h3>\n<p>One of the biggest limiters I felt last year was trying to come up with what to write about, and how to put those ideas into words. I'm hoping to find ways of improving that this year, and maybe add some stream-of-consciousness posts as well.</p>\n<p>Those are my four main goals of 2019. Here's to hoping that I do better this year than last.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2019-01-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2018/12/21/goodbye-facebook-good-riddance/",
      "url": "https://kpwags.com/posts/2018/12/21/goodbye-facebook-good-riddance/",
      "title": "Goodbye Facebook &amp; Good Riddance",
      "content_html": "\n\t\t<p>This past week, I finally pulled the trigger and completely removed Facebook from my life. I deleted my Facebook account in June or July, I forget which month, but I had kept my Instagram account. That ended this week when I downloaded my archive and deleted my Instagram account.</p>\n<h2>What Finally Pushed Me Over the Edge</h2>\n<p>This past week, the New York Times reported that <a href=\"https://www.nytimes.com/2018/12/19/technology/facebook-data-sharing.html\">Facebook had given Amazon, Spotify, Royal Bank of Canada among others access to your private messages</a>. I wasn’t horribly surprised, but it finally gave me the final kick in the ass I needed to just click ‘delete’.</p>\n<p>Now it would not surprise me to know that Facebook would do this, and it was probably buried in the permissions access that users granted to services such as Spotify. I had linked my Facebook account at one point to Spotify and it’s likely that I would have missed it as well. I also wouldn’t expect Spotify to need read access to my private messages, and I’d wager that others would think the same. I understand why it would need write access as I and others have shared tracks through Facebook Messenger, but why would Spotify need to read my messages...I can log into Facebook for that. So with all of that in mind, I decided the supposed benefits just weren’t worth it anymore and got rid of my account...permanently.</p>\n<h2>What I’ll Miss</h2>\n<p>I think the two biggest things that I’ll miss from Instagram would be seeing what my friends are up to and what the local craft breweries are releasing. It will kind of suck not having this anymore, but I’m just done with Facebook. I’ve been more aware and active with regards to my privacy and I don’t trust Zuckerberg and company to make any correct decisions when it comes to keeping my data secure.</p>\n<h2>My Privacy Kick</h2>\n<p>Over the past year, I’ve been focused more and more on protecting my privacy. I’ve switched to Firefox over Chrome and have been migrating away from Google as well. Facebook was obviously an issue and I can say that it’s been dealt with as best as I can. I’ll write up more on that later down the line, but for now, goodbye Facebook and good riddance!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2018-12-21T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2018/06/20/false-starts-my-side-project/",
      "url": "https://kpwags.com/posts/2018/06/20/false-starts-my-side-project/",
      "title": "False Starts &amp; My Side Project",
      "content_html": "\n\t\t<p>I think I mentioned it before, but I’ve been working on a new side project. I figured it was a good way to teach myself React and Node.js, much like OpenVoter taught me PHP. I’ve been wanting to familiarize myself with some more modern frameworks, and I feel like Node and React are good places to start.</p>\n<p>The project I’ve been working on is called Digital Family Cookbook. It’s basically a cookbook web application meant for families. I know my wife and I have plenty of recipes, and it can often be a challenge to figure out where they’re saved. I’ve saved a bunch within Google Drive, but I also have them in Evernote, and several other places. I figure a good project would be to make a website that I can centralize them in so if one of us needs to make dinner, we don’t have to remember where the recipe is or ask where it is.</p>\n<p>I’ve gotten plenty of false starts on this one. I originally wrote it in PHP 3+ years ago. I re-wrote it using Ruby on Rails shortly after and had it sort of up and running. That ended when I started having issues with my Rackspace server and realized that it was cheaper to host the sites I cared about on Amazon Web Services.</p>\n<p>Shortly after that, my wife and I bought a house, so a lot of my time and resources went into housework (it never ends). But now that I have some time to breathe, I figured I’d jump back in and rebuild this as a learning project.</p>\n<h2>The First Start</h2>\n<p>I originally started the project to be a full fledged web application allowing for people to sign up for accounts and host it all for everyone. I decided to create 2 separate projects. One for the front end, and then one for the API on the back end. I figure I’d try to be ambitious and sort of plan ahead for potential mobile apps and writing the backend once for an API would probably make things easier down the road.</p>\n<p>I was making a fair amount of progress on it. Learning some of the ins and outs of how React worked, as well as some of the intricacies of Node.js and the newer functionalities of JavaScript/ES6. I even had a rudimentary admin console all set up for administrators.</p>\n<p>In the end though, I decided that I didn’t really have the time or desire to run a website publicly. I figured it’d be too time-consuming to make sure that spammers, scammers, and other bad actors weren’t abusing the application. My ambition for this project might’ve been a little high, but I realized that to handle something like this was a little too much for my tastes at the moment.</p>\n<h2>Starting Over</h2>\n<p>I still liked the idea of the app, but figured I’d go with a scaled down version. I’d basically make it more along the lines of a downloadable CMS rather than a centrally run site. I’d open source it much like OpenVoter, and just let others download it and run it on their own server if they want. I have no idea if anyone will, but figure why not? It solves a problem for me, maybe it could solve a problem for someone else.</p>\n<p>Fortunately, I was able to use what I already wrote as a guide for the new version of the project. I’m still going with 2 projects, the web portion, and then the API. My ambitions might be scaled back, but they aren’t so scaled back as to not think I won’t want to write a mobile application for the cookbook.</p>\n<p>My initial version of the new app used Bootstrap for the UI, but after listening to several software development podcasts talking about the virtues of CSS Grid and other more modern CSS tools, I decided that I might as well go with my own custom CSS code. I figure it can’t hurt, the few tutorials I did on CSS Grid showed me how powerful it can be and I already have a few ideas on how I want to integrate it.</p>\n<p>That’s basically where I am now. I have the skeleton of the app laid out and now I’m writing more code and making progress. For the first time in a while, I actually feel good with where I’m at with it. There’s still plenty to do, but now I don’t necessarily feel like I’m flailing around trying to find solid ground to start off on.</p>\n<p>I’ll try to write more updates on the journey I’m taking writing this app as it progresses towards completion.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2018-06-20T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2018/06/12/my-thoughts-on-microsoft-acquiring-github/",
      "url": "https://kpwags.com/posts/2018/06/12/my-thoughts-on-microsoft-acquiring-github/",
      "title": "My Thoughts on Microsoft Acquiring GitHub",
      "content_html": "\n\t\t<p>Last Monday, <a href=\"https://www.theverge.com/2018/6/4/17422788/microsoft-github-acquisition-official-deal\">Microsoft bought GitHub for a whopping $7.5 billion</a>.</p>\n<p>Naturally, given how much the open source community uses GitHub, this caused quite the uproar. There were views from all across the spectrum. Some were saying that it was awful, while others were more optimistic about it. Elsewhere in the community, it has gone so far that GitLab, one of GitHub’s bigger competitors, even saw a <a href=\"https://monitor.gitlab.net/dashboard/db/github-importer?orgId=1\">large spike of project imports</a>, likely because of the acquisition. I know I saw somewhere that SourceForge was even trying to court devs to move their projects to their platform.</p>\n<p>I’ll admit, my initial reaction to the news was along the lines of “uh oh”.</p>\n<p>Having several days to ruminate on it though, I can’t say I’m nearly as pessimistic as I used to be. I’d actually say that I’m cautiously optimistic. Microsoft definitely has had their share of acquisitions turning into horrors (see Skype), but the current Microsoft is quite different compared to the Microsoft of old.</p>\n<p>Microsoft has the reputation, and rightly earned, of being hostile towards open source and the open source community. They have quite a lot of past bad acts to make up for. That said, Satya Nadella, the CEO of Microsoft since 2014, has generally done a pretty good job with regards to the developer community. Microsoft has embraced the open source community, even going so far as to allow you to run Linux within Windows 10. Their .NET architecture even runs on Windows, MacOS, &amp; Linux. I’m hopeful that with these changes, they can make GitHub even stronger for developers.</p>\n<p>Now, my optimism doesn’t mean that I don’t have my concerns. Microsoft is a large company and they have their own version control system (VCS) in Team Foundation Server (TFS) that mirrors a lot of what Git and GitHub do. Git is of course not part of this acquisition, but it is the VCS that GitHub is built off of. My hope is that Microsoft keeps the two separate for the most part. Let the better parts of each system rub off on each other, but I don’t want to see any improvements of GitHub abandoned or semi-abandoned in favor of TFS.</p>\n<p>It’s still way to early to make any real judgements. It could be a year or more before the effects become noticeable. I’m going to keep my cautious optimism, and withhold my judgement for the time being. I’d encourage you to do the same.</p>\n<h3>One More Note</h3>\n<p>I’ll say this though, the acquisition has created plenty of new memes in the development community ranging from bringing back Clippy to making fun of the constant annoying prompts to restart your computer for updates. It’s given me a few laughs.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2018-06-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2018/05/15/another-redesign/",
      "url": "https://kpwags.com/posts/2018/05/15/another-redesign/",
      "title": "Another Redesign",
      "content_html": "\n\t\t<p>As you can tell, I've decided to give my blog a little bit of a facelift.</p>\n<p>The primary reason I decided to do this was that I realized I basically made my posts dependent upon having an image for every blog post, and in some cases, limited how long the opening of my posts could be. If I didn't make it fall within these constraints, the alignment of the boxes would end up being off. It wasn't really a long-term solution that worked. I decided that a redesign was in order.</p>\n<p>I'm definitely happy with how this design came out. I had a sidebar a little while back, and decided that I'd go back to a sidebar design. I searched around Dribble and other blogs I follow to see what others have done to try to come up with something for me.</p>\n<p>I decided to go with a sticky sidebar. I figured that if it wasn't sticky, you'd have a bunch of dead space on the left of the page once you scrolled down. I didn't like the feel of that so I made the sidebar stick to the side of the page so at least it wasn't blank.</p>\n<p>On mobile, the sidebar slims down and becomes the header. I was slightly concerned that too much of the main page would end up cut off from the header. In the end, outside the iPhone SE, enough below the header was visible that I decided that the design would work.</p>\n<p>I might end up doing something different for the photography page, but I like the way the design turned out for the blog portion of my site.</p>\n<p>I think another, probable less glamorous part of it is that I can never seem to stick with a design. After a while, I just want to dig in and redesign it. I wish I would end up spending more time writing posts rather than re-writing the code behind it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2018-05-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2018/01/29/outdoor-hockey/",
      "url": "https://kpwags.com/posts/2018/01/29/outdoor-hockey/",
      "title": "Outdoor Hockey",
      "content_html": "\n\t\t<p>So last Friday night, I was able to do something that I've been dreaming of for a while. I was able to skate outdoors on an ice rink in Hershey, Pennsylvania.</p>\n<p>The weekend prior, the AHL (American Hockey League, or the NHL minor league) held their version of the Winter Classic, the AHL Outdoor Classic. It was played outdoors at Hershey Park Stadium and was a matchup of the Hershey Bears hosting the Lehigh Valley Phantoms. Since the Phantoms are the Flyers' minor league affiliate, Lauren and I bought tickets to see the game. It was a pretty cool experience watching hockey outdoors. I just wish that I got tickets a little higher up so we could see a little bit more of the action. Happily, the Phantoms won 5-2.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/MGNSjwBgh4-2048.webp 2048w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/MGNSjwBgh4-2048.gif 2048w\" /><img alt=\"Various pictures of the AHL Outdoor Classic\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/MGNSjwBgh4-2048.jpeg\" width=\"2048\" height=\"2048\" /></picture></p>\n<p>Because they already built the outdoor rink, they decided to make some money by opening it up to the public to rent out. Reddit's Flyers subreddit set up a 2 hour pickup game on the ice last Friday and I was able to participate.</p>\n<p>Stepping out onto the field was a surreal experience. I've been playing hockey for almost 5 years now, but there really is something about skating around in the open air. The pickup game was a lot of fun. The ice wasn't as good as I was expecting or hoping as it had been up for a week with some 50-60ºF weather. Either way though, it was an amazing experience that I still can't fully believe I participated in. I'd recommend it to anyone, even just skating around outside would be worth it.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/8fbh2USle6-1536.webp 1536w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/8fbh2USle6-1536.gif 1536w\" /><img alt=\"Various pictures of me skating outdoors\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/8fbh2USle6-1536.jpeg\" width=\"1536\" height=\"1536\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2018-01-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2018/01/25/looking-back-at-2017-and-forward-into-2018/",
      "url": "https://kpwags.com/posts/2018/01/25/looking-back-at-2017-and-forward-into-2018/",
      "title": "Looking Back at 2017 and Forward into 2018",
      "content_html": "\n\t\t<p>A year later, let's see what happened in 2017 and what I'm looking at for 2018.</p>\n<h2>Looking Back at 2017</h2>\n<p>2017 has been an interesting year to say the least. My productivity has definitely been hampered by what's been going on in Washington D.C. and Trump's presidency. I know I shouldn't let it affect me as much as it has, but at the same time, I can't say that it hasn't. So many of his actions have made my blood boil to the point that I become distracted, and in some cases, full of despair. Not that I can use this as an excuse for things I didn't accomplish, but like other people, I can't always throw current events to the back of my mind.</p>\n<p>I wish I could say I was successful at accomplishing my goals for 2017 that I laid out <a href=\"https://kpwags.com/posts/2017/01/24/goals-for-2017/\">previously</a>. At the end of the day though, I didn't completely hit any of them. Despite this, 2017 was not a bad year.</p>\n<h3>2017 Goals Post-Mortem</h3>\n<h4>Getting Into Shape</h4>\n<p>This one I did make progress on. I didn't really make much progress on the weight-front, but I was able to get my strength and conditioning up. My core lifts have gone up, I feel like I have more &quot;umph&quot; when skating and running. I was also able to run Broad Street (The popular 10 miler) in May, finishing with a time of 1 hour, 34 minutes which was just under my goal of 1:35.</p>\n<h4>Reading More Books</h4>\n<p>Last year I ended up reading 13 books which was below what I was hoping for, but it did end up being more than 2016. A couple of years ago when I could read over my lunch break did wonders for increasing the amount I read. I feel like I kind of shot too high, too early.</p>\n<h4>Enjoying the Outdoors</h4>\n<p>Yeah, I failed at this one. Didn't do anything towards this one. Maybe this year.</p>\n<h4>Getting Back into My Side Projects</h4>\n<p>This one I can sort of say I've done. I haven't gone full bore into it, but I've been slowly reading into React and Node.js trying to learn their basics for my next project. Javascript isn't so much an issue as much as wrapping my head around some of the newer methods of doing things. I learned PHP using OpenVoter, so hopefully I can have similar success with this.</p>\n<h4>Writing More</h4>\n<p>Sadly, this is another one I haven't done all that much of. I've had a bunch of ideas for posts that I started, but I never ended up finishing them. Maybe this year I can re-visit some of them or actually follow through more of my ideas.</p>\n<h4>Becoming More Involved in Politics</h4>\n<p>Yeah, didn't do much on this either. I attended one meeting of the local Democrats in January or February, but never really followed up. I'm still interested, but I also need to beat back my cynicism and my feelings of just being jaded.</p>\n<h4>Disconnect a Little</h4>\n<p>I moved away from Facebook. I haven't deleted my account yet, but I don't really visit it anymore. I culled who I follow on Twitter and have tried to avoid too much politics within my feed. It's not completely free of politics, but I do generally find it more enjoyable.</p>\n<hr />\n<h2>Onward to 2018</h2>\n<h3>Goals</h3>\n<p>I think I'm going to keep it a little more simple this year and focus on only four goals.</p>\n<h4>Losing the Weight (Finally)</h4>\n<p>This has got to be one of the biggest time honored traditions. People committing to losing weight January 1st, and then forgetting about it February 1st. I'm hoping to continue with this goal this year. Unfortunately, this did hit a little bit of a snag 2 weeks in as I ended up breaking the tip of my finger at the gym with a 55 lb. dumbbell...oops! Fortunately, it wasn't as bad as I had feared and only ended up missing 2 hockey games and 2 weeks of strength training.</p>\n<p>My gym routine has been tweaked some more and you can view it, as well as my progress <a href=\"https://kpwags.com/gym-routine/\">here</a>. I try to keep it updated as much as possible given that I've been known to tweak it from time to time. I think part of that is me always wanting to try new things.</p>\n<h4>Reading</h4>\n<p>This year might be a little bit more of a challenge as well because I ended up re-subscribing to <em>The Economist</em> which is a fantastic source of news, but very in depth and not exactly a fast read. I'm trying to keep a balance between reading my books and the magazine. My <a href=\"https://kpwags.com/reading-list/\">reading list</a> has been a little more focused on non-fiction lately and probably will for the near future. I love a good story, but have been enjoying learning more about history, the world, and other people's experiences.</p>\n<h4>Side Projects</h4>\n<p>I'm going to continue to work on my new project using Node.js &amp; React. I've spent a decent chunk over the last week or so, so hopefully this will continue. Despite me knowing Javascript, I've found that Node.js has proven a challenge for me. I'm hoping that with more focus, I can get my head around some of the new concepts and really start to make progress. I have a lot of ideas for the project and would love to be able to start to implement them and get the site off the ground.</p>\n<h4>Write More</h4>\n<p>Let's try this one again. I'm kind of hoping that given my separation of politics away from this blog and onto it's <a href=\"https://politics.kpwags.com/\">own site</a> that I might be more willing to write what's on my mind without inundating this blog. Plus, maybe that will help me with some frustrations of what's going on in the government. I'm currently working on another 1,000+ word post on getting back into gaming with a review of DOOM. So keep your eyes peeled for that.</p>\n<h4>Everything Else in 2018</h4>\n<p>All too often last year, I felt like I was too busy or that I had too much going on. I'm hoping that this year is a little more calm. That said, the first month of the year hasn't exactly lived up to that, and my schedule for February and March isn't getting much calmer.</p>\n<p>Some of the other things I've been working on and will continue to work on include:</p>\n<ul>\n<li><strong>Homebrewing:</strong> After Christmas, I started brewing my first beer. I just recently bottled it, so in about 2-3 weeks, I'll find out if it's any good. I'm hoping to continue brewing from time to time.</li>\n<li><strong>Video Games:</strong> My Steam backlog alone is huge. I'm planning on trying to play through a bunch of them and mark them as beaten. I might even write a post here and there about some of the newer, better ones.</li>\n<li><strong>House Projects:</strong> My plan is to keep up with the multitude of projects around the house. <em>Buy a house they said, it will be fun they said</em>. All jokes aside, while it can be a pain in the ass sometimes, it's nice to have a house to call my own and have a yard.</li>\n</ul>\n<p>Here's to a better 2018.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2018-01-25T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2017/09/28/star-trek-discovery-and-the-future-of-streaming/",
      "url": "https://kpwags.com/posts/2017/09/28/star-trek-discovery-and-the-future-of-streaming/",
      "title": "Star Trek Discovery and the Future of Streaming",
      "content_html": "\n\t\t<p>Sunday night, like many Star Trek fans sat down to watch the premiere of Star Trek: Discovery.</p>\n<p>This is the first new Star Trek series since Enterprise was cancelled back in 2005. 12 years us Trekkies sat with no new Trek on TV. We got some action movies in Star Trek, Into Darkness &amp; Beyond, but nothing like The Next Generation, Deep Space Nine or Voyager.</p>\n<p>I knew once Enterprise was cancelled that the chances of a new series coming out anytime in the near future was just about slim to none. When I heard that they were rebooting Star Trek I was hopeful that a successful movie might allow for a new series. No such luck. It wasn’t that big of a deal for me anyway as I can’t say I’m the biggest fan of the new movies. They’re not bad movies, but none of them really speak to me the same way the TV series did or how any of the previous movies spoke to me. The thing that really drew, and still does draw me to Star Trek is the hopeful vision of the future. The new movies focus more on the action aspect of things. Don’t get me wrong, I enjoy the action; it’s just not what really draws me to it.</p>\n<p>Fast forward to this past weekend with the premiere of Discovery. I watched the first episode and left with a feeling of...well, indifference. I didn’t hate it by any means. The special effects were fantastic. The story wasn’t bad, but I’m not sure how much of it I really got in just one episode. As it stands, I wasn’t truly drawn in. Star Trek TV series often have this problem though. The first seasons of The Next Generation, Deep Space Nine, and Voyager were definitely each series’ weakest seasons. I also don’t think you can really judge any television series based on a single episode, especially the pilot.</p>\n<p>This leads me to my dilemma. Star Trek: Discovery is only available on CBS All-Access. CBS All-Access costs $6 or $10 a month depending on if you’re willing to tolerate ads. Unlike the other shows on CBS, Discovery will not be broadcast past the first episode.</p>\n<p>On one hand, I want to support Star Trek and the development of future seasons and series. The special effects for Discovery were impressive. They definitely felt better than previous series which can probably be attributed to both newer technology as well as a bigger budget. I want to support this and the development of more Trek on TV and a subscription should hopefully allow for it.</p>\n<p>But on the other hand, I absolutely hate what CBS is pulling and don’t want to support it. I can’t think of any franchise that has the same pull that Star Trek does on both television and the movies. CBS knows this and is taking full advantage. How many other new shows do you think CBS (or any network) could put behind a paywall and expect the numbers of subscribers to be there? This irritates me to no end and I definitely feel taken advantage of. I figure Discovery will probably face increased piracy because of this. I won’t go that far, but I also haven’t ruled out waiting until next summer when all 15 episodes are out, getting the one week free trial, binging all the episodes and then cancelling my subscription. I also feel like CBS is basically torpedoing the series by making us Star Trek fans consider going down this route.</p>\n<p>I also can’t help but wonder if this is the future of TV and streaming. All the different stations offering their own streaming service. We’ve already seen the beginning of it with Netflix, Hulu and Amazon getting exclusives. We’ve seen a first hint with Disney planning their own streaming service in the next couple of years. Imagine having to pay $5-10 each for every channel you want to stream. I’m sure this is part of their plans to try to make those planning to cut the cord think twice about it. But imagine if ABC, NBC, Comedy Central, and others each made you buy into their own services in addition to cable and broadcast like CBS is doing. (Now they can get double the payments!) The costs are going to add up fast. Netflix, Hulu, and Amazon at least add more value due to their diverse and large selection of TV series and movies. CBS doesn’t even provide full access to their back catalogue.</p>\n<p>I still haven’t decided what I’m going to do about Discovery and CBS All-Access. I might very well just suck it up and buy the subscription to watch the series, or I might just wait until the end and binge watch it. Either way, I’m not sure I like where the future of streaming is heading.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2017-09-28T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2017/08/13/adjusting-my-social-media-presence/",
      "url": "https://kpwags.com/posts/2017/08/13/adjusting-my-social-media-presence/",
      "title": "Adjusting My Social Media Presence",
      "content_html": "\n\t\t<p>Recently, much has changed in regards to my presence on social media.</p>\n<p>Back in February I decided that I had had enough of Facebook and left the service. I didn’t deactivate or delete my account, I simply signed out and deleted the apps from my phone &amp; tablet. Suffice it to say, I have yet to look back.</p>\n<p>I had several reasons for making this decision.</p>\n<h3>Privacy</h3>\n<p>Facebook is of course known for the fact that they do everything they can to grab every bit of information about you. They find out who your friends are, what you like to eat, what you like to drink, your political views, and so much more. The scary thing, and this is by no means limited to Facebook, Google does it too, is that you don’t even have to be explicit about it. Facebook can figure out so much that all the little hints that you drop along the way in what you like and share can give it away. There was a story several years ago where <a href=\"https://www.forbes.com/sites/kashmirhill/2012/02/16/how-target-figured-out-a-teen-girl-was-pregnant-before-her-father-did/#3078e64b6668\" target=\"_blank\" rel=\"noopener\">Target found out someone was pregnant before her father even found out</a>. Think about that, and then imagine something far more detailed, and far more invasive. I’m still on Instagram though, which is owned by Facebook. The privacy thing still bothers me there, but privacy alone isn’t the only reason I left.</p>\n<h3>Echo Chamber</h3>\n<p>Facebook’s algorithm gets a lot of press on how it really tailors what we all see and read about to our tastes. Facebook generally wants to keep us on the site, so showing us too many articles that we disagree with can end up hurting that goal. The problem that arises from that, is that when it comes to politics and ideas, we might only see those thoughts and ideas that correspond with our own rather than challenge us. I’m certainly sometimes guilty of too quickly writing off conflicting ideas as simply being “wrong” without looking at the meat of the argument. To not even be given the other viewpoints though ends up weakening the dialogue.</p>\n<p>The other side of this is that we as humans tend to stick with people we agree with. It’s natural to do this. The downside here though is that all too often, it shows in the feeds. Even without Facebook’s algorithm, we still only see our side of the argument.</p>\n<p>Given that my Facebook profile has content that I really don’t want strangers to have easy access to (I keep most things private on Facebook), becoming friends with people outside my social circle isn’t an option to get alternate views, and if I wanted to follow right-leaning publications, there are better places to do it than on Facebook. Before I left Facebook, I culled my likes and follow list to essentially just friends, not really pages and groups. Basically what I’m trying to say there is that I don’t really feel like using Facebook as a news aggregator, more as a way to keep up with my friends and family.</p>\n<p>One last thing on this point, Christie Aschwanden, a writer for FiveThirtyEight had a great point on how <a href=\"https://fivethirtyeight.com/features/leaving-social-media-taught-me-how-broken-the-news-cycle-is/\" target=\"_blank\" rel=\"noopener\">social media sort of points you in the direction of what to read</a>. Reading the news more like the morning paper rather than whatever your friends recommend has so far seemed to help me see more sides to things that I had been previously. Nothing’s perfect mind you as even publications like the New York Times and Wall Street Journal can try to funnel you into various stories, more often than not, you’ll see a lot more than you would through social media.</p>\n<h3>Time Sink</h3>\n<p>Let’s face it, social media is a huge time sink. Many people, myself included, spend so much time following their feeds on Facebook, Twitter, Instagram, and others. I noticed I was spending far too much time on Facebook. It wasn’t the only thing on my phone or laptop I was wasting time on, but it was definitely the biggest.</p>\n<h3>Beyond Facebook</h3>\n<p>After I left Facebook, I also ended up spending less time on Reddit as well. The one site I ended up moving a little bit more to was Twitter. At the time I justified it by following some right-leaning accounts and news sources, but it ended up being somewhat of a time sink as well. All the politics drained me as well, so in mid-June, I ended up leaving Twitter as well. The only two social media platforms I really visited with any regularity were Instagram and Hacker News. I love photography and technology so both of those fit in for what I was looking for without much of the other stuff that ends up tagging along with Facebook and Twitter.</p>\n<h3>Going Forward</h3>\n<p>I still have no interest in returning to Facebook. Given that it’s still a connection to friends and family, I don’t see myself deactivating or deleting my account, but I’m not going to be logging on. As for Reddit, I still occasionally peruse the site, but the apps are gone from my iPad and phone, and I don’t spend that much time there. Recently, I decided to really cull who I follow on Twitter. Outside of a VERY small handful of people, I stopped following all news &amp; politics accounts regardless of what political leaning they had. Basically I’m trying to keep my Twitter feed to science, tech, development, sports, and beer feeds. While I’ve only been back for a handful of days at this point, I have to say it feels more enjoyable than being inundated with the latest happenings of Washington. I still like to keep up with what’s going on, but I think I’ll use podcasts and my subscription to the New York Times and Wall Street Journal to help me out there.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2017-08-13T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2017/08/01/wow-ive-fallen-behind/",
      "url": "https://kpwags.com/posts/2017/08/01/wow-ive-fallen-behind/",
      "title": "Wow, I&#39;ve Fallen Behind",
      "content_html": "\n\t\t<p>The last couple months have been really hectic for me and unfortunately I didn’t get much done on my recipe side project.</p>\n<p>I ended up getting a fair amount in using Ruby on Rails 5.1, but never was really able to really get a rhythm going and am still not sure that I want to write it in Rails.</p>\n<p>This past weekend I decided I really wanted to get back into it. It might not have been the best weekend as I had a graduation party Saturday night and a Phillies game Sunday with the family, but on Friday after work I decided I was going to sit down and look into React.</p>\n<p>Looking at React made me realize that outside of work, I might have fallen behind some with where things currently are in the world of software and web development. For the last several years, all I’ve really done are some basic websites and stuff for my jobs in the .NET world. I haven’t really dug into a side project or kept up which can definitely be harmful for software developers.</p>\n<p>Looking at my calendar, the month of August thankfully doesn’t look too busy. I’m hoping that I can spend some evenings digging into several new (to me) languages and technologies. My plan to start is to look at ES6, React &amp; Node.js. I figure others might pop up during my exploration so I’ll just have to see where I wind up.</p>\n<p>Back to this past weekend…</p>\n<p>On Friday, I ended up starting out with the <a href=\"https://facebook.github.io/react/tutorial/tutorial.html\" title=\"Tic-Tac-Toe Game in React\" rel=\"noopener\" target=\"_blank\">Tic-Tac-Toe tutorial</a> on React’s official site. I’m still getting used to the syntax and some of the new functionality of ES6, but I think I’m beginning to understand the basics of how it works. I still have a ways to go before I’m ready to really start developing, but sometimes the first step is the hardest. I think this is basically is my problem. I’m overwhelmed by how far it seems I’ve fallen behind, and am struggling to take that first step up the ladder to climb out of this little hole.</p>\n<p>I’m confident that if I put my mind to things, I can do it, I just have to avoid the distractions that pop up and really focus. I still want to do my recipe site, but I might end up writing it in something other than Rails depending on how this all goes.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2017-08-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2017/05/16/starting-a-new-project/",
      "url": "https://kpwags.com/posts/2017/05/16/starting-a-new-project/",
      "title": "Starting a New Project",
      "content_html": "\n\t\t<p>I've been having an itch lately to get working on a new side project.</p>\n<p>A little over a year ago I built a recipe site for Lauren and I to use to try to consolidate all our recipes. Our recipes are mixed around between Evernote, Google Drive, and random browser bookmarks. It isn’t the most efficient system and when once of us ends up cooking, it’s not always easy to remember where the recipe is stored. I built a little tool using Ruby on Rails and deployed it. It worked, but it was kind of clunky, not all that pretty, and rather quickly I forgot about it.</p>\n<p>The initial version was primarily meant to be a down and dirty version of it. Get it to work and then optimize it and make it better later. I even built it with the idea that people could download it and install it on their own servers if they like. While there are other services out there, it’d be nice to know that you control the data &amp; recipes so that you don’t have to worry about the services shutting down and all your saved recipes go out the window. If you hadn’t guessed, the improvements never ended up happening. The code worked, but that was about the extent of it. It also didn’t help that Lauren and I ended up buying a house and had project after project lined up, which took up much of our time. So now I’m looking into reviving the project. I ended up shutting down the server it was running on, and I’m pretty much just going to throw out the old code and start fresh.</p>\n<p>I built a quick outline of it in Ruby on Rails 5.1, but I also haven’t fully committed to using Ruby on Rails. It has been a long time since I really had a side project to work on. My last big side project was OpenVoter, the Digg-clone CMS. I built that using PHP, which on a side note, was actually how I learned PHP. Since then, I haven’t really done much development outside of work where I develop in the .NET stack with some Javascript as well. Part of me feels overwhelmed looking at what platforms and libraries are out there between React, Node.js, Angular.js, and countless others. I’ve been battling my urge to go all gung-ho into this and to also do research into the different options to see what would be best. I also haven’t decided whether I want the whole project to be a CMS to download and install like before, or whether I want to do the platform route. My inclination is to continue the route of making it downloadable and installable on private servers like before, but the social aspect of allowing a central server is appealing.</p>\n<p>Either way, over the next couple of months, I’m hoping to get some work done on it and hopefully nailing down how I’m going to build it, what languages and frameworks I’m going to use, and maybe even a working prototype. Stay tuned.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2017-05-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2017/01/24/goals-for-2017/",
      "url": "https://kpwags.com/posts/2017/01/24/goals-for-2017/",
      "title": "Goals for 2017",
      "content_html": "\n\t\t<p>2016 was super busy for me and I really am hoping that 2017 is not quite as busy.</p>\n<p>I have set some goals for myself this year and am hoping to at least be able to make some progress on them.</p>\n<h3>Continue to Get in Shape</h3>\n<p>2016 was a year full of mixed results in my fitness goals. It was the first year since at least 2012 that I didn’t run a single race. No 5k, no half-marathon, no nothing. I was supposed to run a 15k and a 10 miler, but the weather was awful and rainy (I HATE the rain) both days so I just decided to forego the races. In terms of my weight and body fat percentage, I really didn’t make any progress with either, which was my own fault. I never really was able to get my meal plans working. I was able to increase my main lifts though so it wasn’t a horrible year.</p>\n<p>I’m going to make a concerted effort to do better with my diet and of course continue to hit the gym and go for runs and bike rides. If I can really push myself to stick with my diet, I think I’ll do better this year. In terms of races, I’m probably going to aim for a couple 5k races and a half-marathon or two. I’d like to beat my 2:15 half marathon record. Maybe I’ll try to do the Philly Half-Marathon this year.</p>\n<h3>Read More Books</h3>\n<p>Last year I ended up subscribing to <em>The Economist</em> magazine. The magazine was a fantastic weekly source of news and what’s going on in the world, but its also time consuming to read. It kept my book reading time down and I’m hoping to get back into books. I’m currently on book 4 of <em>The Expanse</em> series by James SA Corey and I have to say it’s a fantastic series, and a good show (the few episodes I’ve seen). I still subscribe to <em>National Geographic</em>, and I haven’t completely ruled out resubscribing to <em>The Economist</em>, but for now, I think I want to stick with books. I recently put together around 30 books I want to read, with many more behind it. I would like to hit 25 books this year so we shall see.</p>\n<h3>Enjoy the Great Outdoors</h3>\n<p>Growing up, I was in Boy Scouts and made Eagle Scout as well. But having moved away from my scout troop for college and having settled a little too far to really stay involved in the troop, I haven’t spent much time hiking, camping, and enjoying the great outdoors. I’ve only gone on two hikes in the last 5-6 years. Once to the Pinnacle in Hamburg, PA, and the other to Ricketts Glen State Park near Wilkes Barre, PA. My trip up to Vermont in both July and October made me miss the outdoors so I’m hoping to be able to make it out this year to do more camping trips. I have a lot of the basic gear from my Scouting days so I might see if Lauren or someone else would want to go enjoy the great outdoors. I might look for a local Boy Scout Troop to volunteer with too.</p>\n<h3>Get Back Into My Side Projects</h3>\n<p>After college, I started developing OpenVoter as a side project, and while it might not have exactly taken off (not that I was hugely surprised), I really enjoyed being able to spend some of my time working on it. Since then, I haven’t done much outside of my blog and a few little things here and there. I have some ideas for some new projects, so I’d like to spend some time delving into the details and see which, if any I want to pursue. I might also delve more into Node.js and see if it makes sense to use that for anything.</p>\n<h3>Write More</h3>\n<p>I didn’t write that much at all last year which was kind of disappointing. That said, I’m hoping to to change that this year. If I can do one, maybe two posts a month, I think that will be good. I have some other things I might want to write as well so we’ll see how it goes this year.</p>\n<h3>Become a Little More Involved with Politics</h3>\n<p>I don’t really completely know how to word this one. Anyone who knows me or follows me on Twitter, knows that I definitely slant liberal and do not like the fact that Donald Trump won the presidency. I feel his election is problematic for a whole host of reasons that would be a post in and of itself. My goal this year is to get involved, at least at a local level and as Ghandi put it, “Be the change that you wish to see in the world.” I’ve made several calls to my representatives and senators to make my voice heard. I’ve never done that before. I sent the occasional email for some issues, but I’ve never been so angry and motivated to make sure my representatives know how I feel (respectfully of course). I’m not sure what that involvement will include at the moment, but I know someone in the local Democratic Party, so my plan is to talk to him and see what I can do.</p>\n<h3>Disconnect a Little</h3>\n<p>All too often, I pick up my phone and mindlessly browse Facebook, Twitter, Reddit, or something else. My goal this year is to disconnect some. I deleted Facebook &amp; Reddit from my phone and will hopefully stick with that. I’ve toyed with the idea of deactivating my Facebook account, but for the time being, I think I’ll just stick to browsing it once in a while on my laptop, desktop or tablet. Essentially just get it off of the device in my pocket.</p>\n<p>Suffice it to say, I’m going to try to be a little ambitious this year. I don’t know if I’ll be 100% successful in everything, but I figure if I can hit bits and pieces of each one, I’ll be happy.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2017-01-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2017/01/06/2016-in-review/",
      "url": "https://kpwags.com/posts/2017/01/06/2016-in-review/",
      "title": "2016 In Review",
      "content_html": "\n\t\t<p>2016 was a super busy year for me, and in some cases, probably a little too busy.</p>\n<p>The year started off alright, enjoying the &quot;new house&quot; feeling, still thinking that hey, I'm a homeowner now! (It's amazing that even a year after closing, it's still kind of hard to believe I own a home).</p>\n<p>In January, we had our only significant snowfall of the year and season. And I have to say, it was a pretty sight, especially when I didn't have to clear the driveway. But I guess that's why I bought a snow blower.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/fW6KLR6Syd-2400.webp 2400w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/fW6KLR6Syd-2400.gif 2400w\" /><img alt=\"My house covered in snow\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/fW6KLR6Syd-2400.jpeg\" width=\"2400\" height=\"1600\" /></picture></p>\n<p>In February, my wife and I discovered that our dining room had wood paneling behind the wallpaper which threw a wrench in our plans of taking down the wallpaper and painting plans. Our whole house was wallpapered, which isn't really our style, but taking down wallpaper, while a major pain in the ass, isn't exactly difficult. Painting would definitely give it a freshening up that isn't terribly expensive. All the other rooms look 100x better now than they did the day we closed on the house.</p>\n<p>The dining room was an addition to the house I want to say in the 1970s sometime, and we knew the walls weren't plaster like the rest of the house (a simple knock on the wall told us that much). But we had (falsely) assumed that it was drywall underneath the wallpaper. Oh boy. Thinking about it, knowing we would have to do something, we decided we were going to tear down the wood paneling, and while we were at it, vault the ceiling. The dining room ceiling was no higher than 7 foot, so it felt cramped. If we were going to tear out the walls, we might as well raise the ceiling too.</p>\n<p>In mid-March, the demolition began.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/I5yaBbwGdc-2400.webp 2400w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/I5yaBbwGdc-2400.gif 2400w\" /><img alt=\"The demolition in progress of my dining room\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/I5yaBbwGdc-2400.jpeg\" width=\"2400\" height=\"1800\" /></picture></p>\n<p>To our surprise, the studs on the ceiling were these gorgeous reclaimed wood beams. (Ignore the nasty wiring, we ended up replacing all of it.)</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/4R0sqHd9nr-2400.webp 2400w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/4R0sqHd9nr-2400.gif 2400w\" /><img alt=\"The beams found in the ceiling in my dining room\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/4R0sqHd9nr-2400.jpeg\" width=\"2400\" height=\"1800\" /></picture></p>\n<p>Needless to say, that completely changed our ideas for the final look of the room. The only thing we can figure is the previous owner built the addition with whatever materials he either had on him or could get cheapest. The next 9 months, pretty much right up to Christmas, was spent renovating the dining room. We had to re-stud the walls, run all new wire, insulate, drywall and spackle, paint, install trim, and more. It took MUCH longer than we anticipated, and there's still some finishing touches left to do, but the end result looks amazing.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/ukHmgOgk5t-2400.webp 2400w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/ukHmgOgk5t-2400.gif 2400w\" /><img alt=\"The final appearance of my dining room\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/ukHmgOgk5t-2400.jpeg\" width=\"2400\" height=\"1800\" /></picture></p>\n<p>Over the summer, I also had the bright idea to play on 3 different hockey teams. I love playing hockey, but 3 teams was slightly excessive. As much as I love it, playing 3-4 times a week took its toll. This also didn't help with the home renovations either. I'm back down to 2 teams, and it seems like the happy medium. Often times more than once per week, but not really more than twice.</p>\n<p>In September, Lauren and I spent the week in Cape May, NJ. It was a nice, relaxing vacation. Not much to say about it other than it was relaxing and a beautiful week to be there. One nice part was that we discovered <a href=\"http://capemaybrewery.com/\" target=\"_blank\" rel=\"noopener\">Cape May Brewing Company</a>. We spent an afternoon at their tasting room and ended up coming home with 2 growlers full of delicious beer.</p>\n<p>Just under 2 weeks after getting back, Lauren and I went to Vermont for our anniversary. We had gone up to the Mount Snow area for my brother's wedding in July and while it was cloudy and rainy, it was definitely beautiful. We decided that it would be a great destination in the fall with the leaves changing. We ended up staying in a little AirBnB apartment in Wilmington, Vermont; a small little town with a lot of charm. It was absolutely gorgeous. We spent a few days just wandering around taking pictures (that I'm still going through). We met up with some of our friends from Maine in Concord, New Hampshire one day. We also checked out several craft breweries. We visited:</p>\n<ul>\n<li>\n<a href=\"http://madisonbrewingco.com/\" target=\"_blank\" rel=\"noopener\">\n    Madison Brewing Company in Bennington, Vermont\n</a>\n</li>\n<li>\n<a href=\"http://www.elmcitybrewing.com/\" target=\"_blank\" rel=\"noopener\">\n    Elm City Brewing in Keene, New Hampshire\n</a>\n</li>\n<li>\n<a href=\"http://www.whetstonestation.com/\" target=\"_blank\" rel=\"noopener\">\n    Whetstone Station in Brattleboro, Vermont\n</a>\n</li>\n<li>\n<a href=\"http://www.gildedotter.com/\" target=\"_blank\" rel=\"noopener\">\n    Gilded Otter in New Paltz, New York\n</a>\n</li>\n</ul>\n<p>The only downside to where we were, was that many places seemed to close by 8 or 9 pm. But take that away, it was a great trip and I would totally go back again.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/FLkLGotG7a-2400.webp 2400w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/FLkLGotG7a-2400.gif 2400w\" /><img alt=\"A picture of Wilmington, Vermont with leafs changing color\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/FLkLGotG7a-2400.jpeg\" width=\"2400\" height=\"1800\" /></picture></p>\n<p>In terms of my fitness goals, it was a mixed bag. I didn't really get anywhere on my weight or body fat percentage, but I was able to notable increase my strength. At the end of the year I had hit 200 lbs. on bench press, 305 lbs. on deadlifts, &amp; 245 lbs. on squats. In terms of running, I had started to get back into running after running the marathon in 2015, but it was also the first year in a while I didn't run a single race, 5k, half marathon or otherwise. I was supposed to run a 15k and Broad Street, but both days, the weather was crummy and while I wanted to run them, but rain makes me miserable and I guess I just didn't want it enough. I'm hoping to run at least one half-marathon this year.</p>\n<p>It was a good year. Too much to really hit everything in a single blog post, but I'm looking forward to 2017.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2017-01-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/10/07/fitness-progress-september-2016/",
      "url": "https://kpwags.com/posts/2016/10/07/fitness-progress-september-2016/",
      "title": "Fitness Progress - September 2016",
      "content_html": "\n\t\t<p>I guess the one thing I could say that went well this month is that I got my lifts to my previous bests and I got a lot of runs in.</p>\n<p>Vacation killed my weight loss goals as I was feeling particularly lazy, but considering that, I guess it wasn't too bad.</p>\n<p>Here's my progress for the month of August compared with the end of July</p>\n<ul>\n<li><strong>% Days Active:</strong> 56% (-5%)</li>\n<li><strong>Distance Ran:</strong>: 29.06 miles (+13.12 miles)</li>\n<li><strong>Distance Biked:</strong>: 0 miles (-23.56 miles)</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 183.6 lbs. (+3.6 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 24.4% (-0.5%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 200 lbs. (No Change)</li>\n<li><strong>Squat (Change):</strong> 230 lbs. (No Change)</li>\n<li><strong>Deadlift (Change):</strong> 305 lbs. (No Change)</li>\n<li><strong>Overhead Press (Change):</strong> 125 lbs. (No Change)</li>\n</ul>\n<h3>Year-To-Date Progress:</h3>\n<ul>\n<li><strong>Weight:</strong> +2.0 lbs.</li>\n<li><strong>Body Fat %:</strong> +2.1%</li>\n<li><strong>Bench Press:</strong> +55 lbs.</li>\n<li><strong>Squat:</strong> +65 lbs.</li>\n<li><strong>Deadlift:</strong> +120 lbs.</li>\n<li><strong>Overhead Press:</strong> +40 lbs.</li>\n<li><strong>Total Distance Ran:</strong> 216.53 miles</li>\n<li><strong>Total Distance Biked:</strong> 23.56 miles</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-10-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/09/15/thoughts-on-the-iphone-7/",
      "url": "https://kpwags.com/posts/2016/09/15/thoughts-on-the-iphone-7/",
      "title": "Thoughts on the iPhone 7",
      "content_html": "\n\t\t<p>This post is a follow-up on my previous post <a href=\"http://kpwags.com/posts/2016/08/23/about-the-iphone-7/\">about the iPhone 7</a>.</p>\n<p>Apple last week announced the <a href=\"https://www.apple.com/iphone-7/\" target=\"_blank\" rel=\"noopener noreferrer\">iPhone 7</a> and the Apple Watch Series 2. As predicted, the iPhone 7 will no longer have a 3.5mm headphone jack. Now that the dust has settled somewhat, I figured I’d throw in my two cents.</p>\n<p>Apple’s Phil Schiller claimed that the reason Apple did it was <a href=\"http://www.theverge.com/2016/9/7/12838024/apple-iphone-7-plus-headphone-jack-removal-courage\" target=\"_blank\" rel=\"noopener noreferrer\">courage</a>. I heard that, and had I been drinking something, it might have come back up through my nose. Apple says that it takes courage to try something new. I personally find that to be a load of BS. Look, I get it, its old technology, but it’s still the de facto standard. Removing it is going to make it difficult for a lot of people to listen to their music on their phones. Apple is providing headphones that plug into the lightning port which isn’t bad until you realize that you can’t charge your phone and listen at the same time (this is also ignoring that I feel the standard headphones are uncomfortable in the ear anyway, but that’s a different story). They also are nice enough to include a lightning to 3.5mm adapter, which is also sweet...until...wait for it...you can’t charge and listen to your headphones at the same time. <a href=\"http://arstechnica.com/gaming/2016/09/the-iphone-7s-first-headphone-and-charge-dongle-isnt-coming-from-apple/\" target=\"_blank\" rel=\"noopener noreferrer\">Belkin released a dongle that allows you to plug in 2 lightning cables into your phone</a>, ostensibly one for your headphones and one for the power cable. This is all well and good, until you realize you will then need 2 dongles to listen to 3.5mm headphones and charge your phone at the same time.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/YV_BkjW_RM-640.webp 640w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/YV_BkjW_RM-640.gif 640w\" /><img alt=\"Belkin iPhone adapter\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/YV_BkjW_RM-640.jpeg\" width=\"640\" height=\"385\" /></picture></p>\n<p>It’s just an ugly solution. Ignoring the fact that I personally would want multiple adapters and dongles to keep with me at my various locations so I don’t constantly have to move them around and potentially lose them, it’s just obnoxious. Add to this the incompatibility with the Apple computers (Macbook, Macbook Pro, iMac, etc) and it’s kind of a WTF moment.</p>\n<p>People have also made the argument that it allows the phone to be slightly thinner. Thinner isn’t necessarily bad, but hardly what determines my buying decisions (within reason of course). I might’ve been willing to buy this argument, except for the fact that there is still a bump in the phone for the camera lens. Couldn’t you just make the phone a little thicker and make the lens flush with the case? This would probably allow enough room to re-add the 3.5mm jack!</p>\n<p>Instead Apple wants to add their own proprietary standard to things making it difficult for people to move in and away from their platform. I love me Apple products, I think they’re great pieces of technology that are incredibly functional, well designed, and a pleasure to use. I just don’t know I can even begin to get behind this change, which is a shame because of all the other improvements Apple put into the iPhone 7 and the improvements they’ve made with iOS10 (which I love on my iPhone 6 by the way). Despite how I feel, I haven’t completely ruled out upgrading to the iPhone 7, but I’m currently leaning towards either sticking with my iPhone 6 or waiting to see what <a href=\"http://www.androidpolice.com/2016/09/01/google-will-announce-pixel-phones-4k-chromecast-google-home-daydream-vr-viewer-on-october-4th/\" target=\"_blank\" rel=\"noopener noreferrer\">Google brings with their rumored Pixel and Pixel XL phones in early October</a>.</p>\n<p>There’s also rumors of Apple inquiring about the 3.5mm headphone jack in the Macbook Pro. This would likely mean the same thing there as well. All I can say to that is NO!</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/1s2I9ISkyj-240.webp 240w\" /><img alt=\"An animated gif of Michael Scott from the Office shouting NO\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/1s2I9ISkyj-240.gif\" width=\"240\" height=\"196\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-09-15T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/09/06/fitness-progress-august-2016/",
      "url": "https://kpwags.com/posts/2016/09/06/fitness-progress-august-2016/",
      "title": "Fitness Progress - August 2016",
      "content_html": "\n\t\t<p>I feel like August was another wash for me. I could never really get into any kind of rhythm with trips to the gym or runs.</p>\n<p>It did start looking up towards the end of the month, so there's that.</p>\n<p>The downside of the lesser gym trips is that I lost some of the strength I had gained. Weights that I had previously been able to lift with normal ease (relatively speaking) I now struggled to even do half the reps I wanted. I ended up having to drop the weight levels and start working my way back up. Fortunately I really only had to drop by 10 lbs., but I'd rather not have to drop at all.</p>\n<p>I am also hoping to get in some more bike rides in the fall now that the weather looks to be getting slightly more bearable.</p>\n<p>Here's my progress for the month of August compared with the end of July</p>\n<ul>\n<li><strong>% Days Active:</strong> 61% (No Change)</li>\n<li><strong>Distance Ran:</strong>: 15.94 miles (-2.4 miles)</li>\n<li><strong>Distance Biked:</strong>: 23.56 miles (+23.56 miles)</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 180 lbs. (-1.2 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 24.9% (-0.4%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 200 lbs. (No Change)</li>\n<li><strong>Squat (Change):</strong> 230 lbs. (No Change)</li>\n<li><strong>Deadlift (Change):</strong> 305 lbs. (No Change)</li>\n<li><strong>Overhead Press (Change):</strong> 125 lbs. (No Change)</li>\n</ul>\n<h3>Year-To-Date Progress:</h3>\n<ul>\n<li><strong>Weight:</strong> -1.6 lbs.</li>\n<li><strong>Body Fat %:</strong> +2.6%</li>\n<li><strong>Bench Press:</strong> +55 lbs.</li>\n<li><strong>Squat:</strong> +65 lbs.</li>\n<li><strong>Deadlift:</strong> +120 lbs.</li>\n<li><strong>Overhead Press:</strong> +40 lbs.</li>\n<li><strong>Total Distance Ran:</strong> 216.53 miles</li>\n<li><strong>Total Distance Biked:</strong> 23.56 miles</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-09-06T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/08/23/about-the-iphone-7/",
      "url": "https://kpwags.com/posts/2016/08/23/about-the-iphone-7/",
      "title": "About the iPhone 7",
      "content_html": "\n\t\t<p>There have been a lot of rumors swirling around about the iPhone 7 coming out in September.</p>\n<p>One of the biggest rumors is that it will lack a 3.5mm headphones port. The more I think about this, the more I feel like this is a mistake on Apple’s part.</p>\n<p>I’ve seen people compare this change to the whole idea of Apple getting rid of the 3.5” floppy drive in the past, and more recently the optical drives. But here’s the difference between the standard headphone jack and the floppy and optical drives, the floppy drive and the optical drives were already on their way out. Apple just decided to be the one of the first to move on from them. I can’t remember the last time I tried to put a DVD in my Macbook Pro only to remember I don’t have one. Simply put, I just don’t miss it.</p>\n<p>This is most definitely not the case when it comes to the headphones port. The 3.5mm headphones jack is still dominantly used with headphones. To simply remove it will make it that much more difficult for people to listen to music, podcasts, video, and anything else with an audio track on their phones.</p>\n<p>There will most likely be a lightning adapter to allow people to plug in their old headphones, one might even come with a lightning port as well so you can charge your phone and listen at the same time. This still misses the point though. People will need to carry one more thing around with them in order to listen.</p>\n<p>Bluetooth headphones are of course a second option but they come with their own drawbacks such as keeping them charged and generally lower sound quality as well. I have two pairs of these for use at the gym, but generally use my earbuds and over the head headphones for most of my listening.</p>\n<p>The other thing to keep in mind is if Apple releases a new type of headphones that interfaces with the lightning port is the whole idea of lock-in. Apple is generally known for keeping people locked into their platform and the lightning port is no exception. The lightning port is only used in Apple devices and to bring lightning headphones into existence means that people who want to use these headphones are pretty much forced to use Apple devices or to possibly get an adapter to make it compatible with Android devices or say a Macbook Pro. Essentially the headphones will work on iPhones and iPads…and not much else.</p>\n<p>Now one thing that could make this whole thing interesting is if Apple continues down the USB-C path. The current Macbook has a USB-C port, which is a standard and from my understanding, a good one too. If Apple decides to use USB-C on the iPhone 7, and opts for USB-C headphones (whatever they might look like), that could make things interesting. Since USB-C is used beyond Apple devices (Android has several USB-C phones), lock-in wouldn’t occur assuming other platforms open up for Audio through the USB port. I’m not exactly holding my breath for this option, but I suppose it’s possible.</p>\n<p>Could whatever Apple is coming up with be better than the 3.5mm headphones jack? Given its age, it’s certainly due for disruption. I just question forcing it over right now when the 3.5mm jack is such widely used on a regular basis is a good idea. I’m currently in a holding pattern trying to decide what I want to do for my next phone. I’m not sold on something new, but will go into the upcoming announcement with an open mind. If the headphones port is removed and its replacement isn’t something that seems workable, I might end up moving back to Android before I end up getting locked into a single platform and ecosystem.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-08-23T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/08/04/fitness-progress-july-2016/",
      "url": "https://kpwags.com/posts/2016/08/04/fitness-progress-july-2016/",
      "title": "Fitness Progress - July 2016",
      "content_html": "\n\t\t<p>This month was pretty much a complete wash. I didn't really progress at all.</p>\n<p>Granted I didn't really regress so I guess I'll count it as a win. Between 2 weddings, the dining room, plans every weekend, I just couldn't get into a routine. At the end of the day though, I should have tried harder to maintain some kind of consistency.</p>\n<p>My weight has been ticking up a little bit and I’m not quite sure what my actual body fat percentage is. I use a Fitbit Aria scale every morning to weigh myself and all of a sudden it’s really just jumping around. Some days it’s in the 25% range, the next it’s down below 23%. I know the bioelectrical impedance it uses to measure isn’t the most accurate, but before I felt like it was at least consistent enough to give myself a good idea of where I’m at. Now, I’m not sure. I did buy calipers to help, but I need to learn the best way to use them. The instructions they came with weren’t completely clear.</p>\n<p>Here's my progress for the month of July compared with the end of June</p>\n<ul>\n<li><strong>Days Active:</strong> 19</li>\n<li><strong>Trips to the Gym:</strong> 11</li>\n<li><strong>Number of Runs:</strong> 6</li>\n<li><strong>Distance Ran:</strong>: 18.34 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 181.2 lbs. (+6.1 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 25.3% (+2.7%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 200 lbs. (No Change)</li>\n<li><strong>Squat (Change):</strong> 230 lbs. (No Change)</li>\n<li><strong>Deadlift (Change):</strong> 305 lbs. (No Change)</li>\n<li><strong>Overhead Press (Change):</strong> 125 lbs. (No Change)</li>\n</ul>\n<h3>Year-To-Date Progress:</h3>\n<ul>\n<li><strong>Weight:</strong> -0.4 lbs.</li>\n<li><strong>Body Fat %:</strong> +3.0%</li>\n<li><strong>Bench Press:</strong> +55 lbs.</li>\n<li><strong>Squat:</strong> +65 lbs.</li>\n<li><strong>Deadlift:</strong> +120 lbs.</li>\n<li><strong>Overhead Press:</strong> +40 lbs.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-08-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/07/11/fitness-progress-june-2016/",
      "url": "https://kpwags.com/posts/2016/07/11/fitness-progress-june-2016/",
      "title": "Fitness Progress - June 2016",
      "content_html": "\n\t\t<p>June wasn't quite as much of a waste as the numbers seem to show. I want quite as active as previous months due to work on my dining room. In March I started gutting it and now I'm finally making some real progress...at the cost of trips to the gym. I've been playing a lot of hockey as well including 3 straight weeks of Sunday-Monday-Tuesday games back-to-back-to-back. It's been tiring as well given the late start times. As much as I love playing hockey, I think I'm looking forward to dropping down to 2 teams come fall.</p>\n<p>My lifts haven't changed much this month as I've adjusted the routine I've been doing. Instead of doing a 4-day split, I've adjusted to a PPL (Pull-Push-Legs) routine. This has tweaked the number of sets/reps I do for the different exercises so I've had to adjust the weight levels. Happily though, I've actually started to near my highs.</p>\n<p>My diet hasn't been too bad actually. During the week it's pretty easy to follow. I do still struggle a bit on the weekend so I will need to work on that.</p>\n<p>Here's my progress for the month of June compared with the end of May</p>\n<ul>\n<li><strong>Days Active:</strong> 18</li>\n<li><strong>Trips to the Gym:</strong> 9</li>\n<li><strong>Number of Runs:</strong> 6</li>\n<li><strong>Distance Ran:</strong>: 16.12 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 175.1 lbs. (-5.1 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 22.6% (+0.3%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 200 lbs. (No Change)</li>\n<li><strong>Squat (Change):</strong> 230 lbs. (No Change)</li>\n<li><strong>Deadlift (Change):</strong> 305 lbs. (+10 lbs.)</li>\n<li><strong>Overhead Press (Change):</strong> 125 lbs. (No Change)</li>\n</ul>\n<h3>Year-To-Date Progress:</h3>\n<ul>\n<li><strong>Weight:</strong> -6.5 lbs.</li>\n<li><strong>Body Fat %:</strong> -0.3%</li>\n<li><strong>Bench Press:</strong> +55 lbs.</li>\n<li><strong>Squat:</strong> +65 lbs.</li>\n<li><strong>Deadlift:</strong> +120 lbs.</li>\n<li><strong>Overhead Press:</strong> +40 lbs.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-07-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/06/12/fitness-progress-may-2016/",
      "url": "https://kpwags.com/posts/2016/06/12/fitness-progress-may-2016/",
      "title": "Fitness Progress - May 2016",
      "content_html": "\n\t\t<p>I really need to figure out the whole diet thing. Other than that, I feel good about how the month of May went. I was more active, between gym trips and hockey, I stayed busy.</p>\n<p>In terms of lifting, I switched to a Pull-Push-Legs routine and so far I have to say I like it. My gym trips are now a little shorter, but I feel like they’re more intense. Prior to the change in routines, I was able to get my bench press to 200 pounds which is a big milestone for me. I ended up dropping it 15 pounds to handle the additional sets, but I’m confident I’ll get the weight back up and surpass 200 on my way to a two-plate bench press (225 lbs.).</p>\n<p>Weight-wise, I’ve really just been hovering, but I’m hoping once my kitchen is back up and running, it will be a little bit easier for me to handle meals and keep myself under my caloric intake goal.</p>\n<p>Here's my progress for the month of May compared with the end of April</p>\n<ul>\n<li><strong>Days Active:</strong> 23</li>\n<li><strong>Trips to the Gym:</strong> 15</li>\n<li><strong>Number of Runs:</strong> 10</li>\n<li><strong>Distance Ran:</strong>: 22.75 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 180.2 lbs. (0.9 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 22.9% (+0.1%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 200 lbs. (+10 lbs.)</li>\n<li><strong>Squat (Change):</strong> 230 lbs. (No Change)</li>\n<li><strong>Deadlift (Change):</strong> 295 lbs. (+20 lbs.)</li>\n<li><strong>Overhead Press (Change):</strong> 125 lbs. (+10 lbs.)</li>\n</ul>\n<h3>Year-To-Date Progress:</h3>\n<ul>\n<li><strong>Weight:</strong> -1.4 lbs.</li>\n<li><strong>Body Fat %:</strong> No Change</li>\n<li><strong>Bench Press:</strong> +55 lbs.</li>\n<li><strong>Squat:</strong> +65 lbs.</li>\n<li><strong>Deadlift:</strong> +110 lbs.</li>\n<li><strong>Overhead Press:</strong> +40 lbs.</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-06-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/05/02/fitness-progress-april-2016/",
      "url": "https://kpwags.com/posts/2016/05/02/fitness-progress-april-2016/",
      "title": "Fitness Progress - April 2016",
      "content_html": "\n\t\t<p>April was not a good month for me. I was far less active than I wanted to be and wasn’t able to make it to the gym as often as I planned and generally have this year so far.</p>\n<p>The only real excuse I have is that I was busy working on the house. A little over a month ago, I ended up gutting my dining room to re-do it so I was spending some of my evenings working on that in lieu of the gym since I’d be exhausted and unable to work if I went to the gym. I mean it’s not the end of the world as I do want to have the dining room finished as soon as possible, but I could have been better.</p>\n<p>The destruction of the dining room has also impacted my kitchen as they’re right next to each other. In an attempt to lessen the constant cleaning of the kitchen, my wife and I have been making crockpot meals since they require less cooking and are generally easier to make. While most of them are healthy, some of them could probably be healthier. Again, combined with the lower activity levels, my diet really needs to be cleaned up some. I’ve been trying to cut, but my cravings all too often get the better of me.</p>\n<p>The nicer weather has allowed me to get out and run a little bit. I was going to run Broad Street, Philly’s popular 10 mile run May 1st, but it was pouring and a little chilly so I decided to pass on it this year as I didn't want to get myself sick. I think I’m still going to keep my focus on the gym as I’ve been making progress on my lifts, and want to keep doing so. I’m going to be on 3 hockey teams over the summer and that might limit my ability to make it to the gym as often as I’d like, but I’m still going to keep on trying.</p>\n<p>Here’s hoping that May is a better month for me.</p>\n<p>Here's my progress for the month of April compared with the end of March</p>\n<ul>\n<li><strong>Days Active:</strong> 17</li>\n<li><strong>Trips to the Gym:</strong> 8</li>\n<li><strong>Number of Runs:</strong> 8</li>\n<li><strong>Distance Ran:</strong>: 18.68 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 181.1 lbs. (No Change)</li>\n<li><strong>Body Fat % (Change):</strong> 22.8% (+0.8%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 190 lbs. (+5 lbs.)</li>\n<li><strong>Squat (Change):</strong> 230 lbs. (+5 lbs.)</li>\n<li><strong>Deadlift (Change):</strong> 275 lbs. (+20 lbs.)</li>\n<li><strong>Overhead Press (Change):</strong> 115 lbs. (No Change)</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-05-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/04/16/fitness-progress-march-2016/",
      "url": "https://kpwags.com/posts/2016/04/16/fitness-progress-march-2016/",
      "title": "Fitness Progress - March 2016",
      "content_html": "\n\t\t<p>I feel like I had a 'meh' March.</p>\n<p>I made it to the gym often enough, but felt like I've been stalling a bit with my lifts. I figured it would end up happening now that the weight is starting to get up there. I've had to increase my rest time for the big exercises to 2 minutes to ensure I have more oomph for each set. I will say though that each time I am able to move up in weight feels much better as it's harder to reach and now each one is a new PR for me.</p>\n<p>My diet is still a struggle. All too often I give in and reach for snacks that I should probably avoid. Working out helps prevent this from really hurting, but it's preventing me from reaching my goals.</p>\n<p>Here's my progress for the month of March compared with the end of February</p>\n<ul>\n<li><strong>Days Active:</strong> 24</li>\n<li><strong>Trips to the Gym:</strong> 19</li>\n<li><strong>Number of Runs:</strong> 19</li>\n<li><strong>Distance Ran:</strong>: 42.2 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 181.1 lbs. (+2 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 22.0% (-0.4%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 185 lbs. (+5 lbs.)</li>\n<li><strong>Squat (Change):</strong> 225 lbs. (+10 lbs.)</li>\n<li><strong>Deadlift (Change):</strong> 255 lbs. (+20 lbs.)</li>\n<li><strong>Overhead Press (Change):</strong> 115 lbs. (No Change)</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-04-16T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/03/04/fitness-progress-february-2016/",
      "url": "https://kpwags.com/posts/2016/03/04/fitness-progress-february-2016/",
      "title": "Fitness Progress - February 2016",
      "content_html": "\n\t\t<p>I feel like I had a good February.</p>\n<p>I managed to regularly make it to the gym and really noticed some gains in my strength. I was able to bring all of my major lifts up, and feel good about my progress there. I made some tweaks early in the month spreading my workouts out a little bit to cut down my time at the gym. I am now doing a 4 day split which is nice because it does keep the time at the gym lifting around 1 hour which I feel is the sweet spot for my life as a whole. I still do add cardio to some of the workouts, normally in the form of a 10 minute High-Intensity Interval Training (HIIT) Treadmill Run. This is essentially why the total distance ran has decreased for February as I've been focusing on higher intensity rather than distance.</p>\n<p>The whole diet factor still is an issue I'm trying to correct, but I'm getting a little better.</p>\n<p>I am running Broad Street (10 miles) at the beginning of May and will likely be running a 15k at the beginning of April so I'll probably be adding in some runs to my workouts.</p>\n<p>Here's my progress for the month of February compared with the end of January</p>\n<ul>\n<li><strong>Days Active:</strong> 23</li>\n<li><strong>Trips to the Gym:</strong> 21</li>\n<li><strong>Number of Runs:</strong> 14</li>\n<li><strong>Distance Ran:</strong>: 29.31 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 179.1 lbs. (-1.5 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 22.4% (-0.8%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 180 lbs. (+25 lbs.)</li>\n<li><strong>Squat (Change):</strong> 215 lbs. (+10 lbs.)</li>\n<li><strong>Deadlift (Change):</strong> 235 lbs. (+40 lbs.)</li>\n<li><strong>Overhead Press (Change):</strong> 115 lbs. (+15 lbs.)</li>\n</ul>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-03-04T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/02/19/i-made-a-thing/",
      "url": "https://kpwags.com/posts/2016/02/19/i-made-a-thing/",
      "title": "I Made A Thing!",
      "content_html": "\n\t\t<p>So I was in a &quot;I want to develop something mood&quot; recently, but didn't feel like digging into a big project, so I came up with an idea for a new project.</p>\n<p>My wife and I, more often than I would care to admit, fail to come to a consensus on where we would like to go to eat should it not be a night we're cooking. I decided I would put a stop to this, or at least create a tool that would help put a stop to this. I created a tool that randomly chose where we went to eat. I broke local restaurants into 3 categories: Order Out, Fast Food &amp; Dine In. I then broke them out by type of food such as Mexican, Italian, etc. I put all of the recipes into a JSON file and with a tool to choose the filters and then a click of a button, it would tell us where we're going to get food. It worked great!</p>\n<p>Thinking about it a little more, I decided that I'd try my hand at something a little more universal that other people can use. A JSON file is all nice for what Lauren and I need, but the list of restaurants probably isn't all that useful for someone living in New York or California. In the end, I decided to use Google's Places API to randomly choose a restaurant for anyone.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/AoGcXYX08g-1600.webp 1600w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/AoGcXYX08g-1600.gif 1600w\" /><img alt=\"A screenshot of my Where Do You Want to Eat website\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/AoGcXYX08g-1600.jpeg\" width=\"1600\" height=\"1000\" /></picture></p>\n<p>All the person would need to do would be to enter their zip code and boom, a restaurant would be chosen. It worked out pretty well. But then I realized that it didn't really give much flexibility to the result. I then decided to give the user the option to enter in a custom query to randomly choose from. In the first version of it, I defaulted the query to &quot;restaurant&quot; which works well enough, but it's not the most specific. So I added a new textbox for users to enter their custom query to replace the default. So now, it's even possible for users to randomly decide which shoe store to go to. Not quite the intention of the tool, but hey, it still works.</p>\n<p>The next improvement I made was to add the ability for users to choose the distance for which to look. Again, this is more to make it a little bit more granular so people can choose how far away they're willing to go.</p>\n<p>I even decided to take it one step further and use Google's API to help geolocate where the person using the site is. The site now asks the user to share his/her location and then extrapolates the zip code. I figured this is one less step the user has to do and could be useful if the person is out of their normal area and doesn't know what zip code they're in. I don't know about the rest of you, but I don't know many zip codes other than the ones I use on a regular basis.</p>\n<p>In the end, it was a pretty fun project to work on. Simple, yet satisfying. You can check it out at <a href=\"http://wheredoyouwanttoeat.xyz/\" target=\"_blank\" rel=\"noopener\">wheredoyouwanttoeat.xyz</a> and view the source on <a href=\"https://github.com/kpwags/Where-Do-You-Want-To-Eat\" target=\"_blank\" rel=\"noopener\">GitHub</a></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-02-19T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/02/11/fitness-progress-january-2016/",
      "url": "https://kpwags.com/posts/2016/02/11/fitness-progress-january-2016/",
      "title": "Fitness Progress - January 2016",
      "content_html": "\n\t\t<p>I've decided this year that I really want to rid myself of my gut. I think it's shrunk over the last year or two and I have gone down in pants size, but I've always wanted to get rid of it in its entirety. I don't know if that will happen this year, but I definitely want to see the majority of it go away. To that end, I've been making a concerted effort to go to the gym more with what I feel is a good lifting plan, and to generally just stay active.</p>\n<p>The biggest issue I've had with it is diet. I unfortunately love food, and I love beer. It's not exactly a great combination. My increased activity level has most certainly helped keep myself at my current weight (hovering just below 180 lbs.) but it hasn't allowed me to lose more weight, or decrease my body fat percentage an in turn my gut. I've also started to do some meal prep for work lunches. Between chili, pork and carrots, and chicken and broccoli, my lunches have generally stayed healthy. My dinners haven't been too bad either. My biggest weakness has been weekends. Part of my issue is that during the week, I'm generally on a 3 meal schedule, whereas on the weekend, the schedule isn't always set so rigidly. Hopefully once I can square some of it away, it will get easier, and I'll get better with things.</p>\n<p>Life's too short to completely give up beer, good food, and spending time out with friends and family, but it's definitely something I can get better with.</p>\n<p>To help keep me honest, I'm going to be including the following information on my previous month's activities and changes. For the record, when I count active days, I'm counting days where I've done a notable physical activity whether it be a run, a trip to the gym, playing hockey, or going for a walk.</p>\n<p>Here are my stats for January 2016. The changes are compared to January 1.</p>\n<ul>\n<li><strong>Days Active:</strong> 24</li>\n<li><strong>Trips to the Gym:</strong> 19</li>\n<li><strong>Number of Runs:</strong> 15</li>\n<li><strong>Distance Ran:</strong>: 45.07 miles</li>\n</ul>\n<h3>Body Composition</h3>\n<ul>\n<li><strong>Weight (Change):</strong> 180.6 lbs. (-1 lbs.)</li>\n<li><strong>Body Fat % (Change):</strong> 23.2% (+0.8%)</li>\n</ul>\n<h3>Weight Lifting Benchmarks</h3>\n<ul>\n<li><strong>Bench Press (Change):</strong> 155 lbs. (+10 lbs.)</li>\n<li><strong>Squat (Change):</strong> 205 lbs. (+40 lbs.)</li>\n<li><strong>Deadlift (Change):</strong> 195 lbs. (+15 lbs.)</li>\n<li><strong>Overhead Press (Change):</strong> 100 lbs. (+15 lbs.)</li>\n</ul>\n<p><em>Edit: Corrected the number of runs</em></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-02-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2016/02/07/podcasts-galore-part-ii/",
      "url": "https://kpwags.com/posts/2016/02/07/podcasts-galore-part-ii/",
      "title": "Podcasts Galore, Part II",
      "content_html": "\n\t\t<p>If you've read my blog at all, you know that I'm a big fan of <a href=\"http://kpwags.com/2014/02/05/podcasts-galore.html\">podcasts</a>. They're a great way to learn about a whole variety of subjects to fit your tastes. I listen to so many podcasts I unfortunately have to pick and choose which episodes I listen to based on interest levels, which for me is fine. It'd be nice to be able to listen to everything, but there just isn't enough time in the day.</p>\n<p>At work, I've generally switched over to podcasts most days to help pass the time. The only time this becomes an issue is when I'm working on more complicated problems and really need to focus on what I'm doing. In this case, it's not so much that the podcast is distracting me, but it's that I'm not really paying attention to it as much so if there's a story involved, which generally is the case, I hear something and have almost no context for it.</p>\n<p>The one thing I did find is that podcasts are great for running, especially distance running. Music is great to keep you pumped up and going, but what I've found is that when I'm running longer distances, listening to a story or dialogue distracts me just enough to keep my focus off of any pain or the drudgery of pushing myself to go that final mile. The best way to put it I guess is that I'm so focused on the podcasts, I don't realize I'm running.</p>\n<p>I listen to podcasts primarily on my phone, but also on my iPad and Nexus 7. I use the Pocket Casts app and find that it works great for what I need. It syncs my podcasts, podcast playlists, which podcasts I've listened to, and best of all, where I'm at in the current podcast I'm listening to in case I switch devices. It's available on both <a href=\"https://play.google.com/store/apps/details?id=au.com.shiftyjelly.pocketcasts\" target=\"_blank\" rel=\"noopener\">Android</a> and <a href=\"https://itunes.apple.com/us/app/pocket-casts/id414834813?mt=8\" target=\"_blank\" rel=\"noopener\">iOS</a>, and it has a web version. Both the Android and iOS apps are great, but I've found the web version to be a bit buggy. It's not a free app, but it's definitely worth the cost.</p>\n<p>In case you're interested, here is the current list of podcasts I listen to</p>\n<ul>\n<li>\n<a href=\"http://99percentinvisible.org/\" target=\"_blank\" rel=\"noopener\">\n    99% Invisible\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/sections/allsongs/\" target=\"_blank\" rel=\"noopener\">\n    All Songs Considered\n</a>\n</li>\n<li>\n<a href=\"http://daily.barbellshrugged.com/\" target=\"_blank\" rel=\"noopener\">\n    Barbell Shrugged\n</a>\n</li>\n<li>\n<a href=\"http://www.baseballamerica.com/\" target=\"_blank\" rel=\"noopener\">\n    Baseball America\n</a>\n</li>\n<li>\n<a href=\"http://www.wnyc.org/shows/bl/\" target=\"_blank\" rel=\"noopener\">\n    The Brian Lehrer Show\n</a>\n</li>\n<li>\n<a href=\"http://content.codebreaker.codes/episodes\" target=\"_blank\" rel=\"noopener\">\n    Code Breaker\n</a>\n</li>\n<li>\n<a href=\"http://www.marketplace.org/topics/business/corner-office\" target=\"_blank\" rel=\"noopener\">\n    Corner Office\n</a>\n</li>\n<li>\n<a href=\"http://www.dancarlin.com/common-sense-home-landing-page/\" target=\"_blank\" rel=\"noopener\">\n    Dan Carlin's Common Sense\n</a>\n</li>\n<li>\n<a href=\"http://www.dancarlin.com/hardcore-history-series/\" target=\"_blank\" rel=\"noopener\">\n    Dan Carlin's Hardcore History\n</a>\n</li>\n<li>\n<a href=\"http://developeronfire.com/\" target=\"_blank\" rel=\"noopener\">\n    Developer on Fire\n</a>\n</li>\n<li>\n<a href=\"http://developertea.com/\" target=\"_blank\" rel=\"noopener\">\n    Developer Tea\n</a>\n</li>\n<li>\n<a href=\"https://thedianerehmshow.org/\" target=\"_blank\" rel=\"noopener\">\n    Diane Rehm Show\n</a>\n</li>\n<li>\n<a href=\"http://www.baseballprospectus.com/blog/daily_podcast/\" target=\"_blank\" rel=\"noopener\">\n    Effectively Wild\n</a>\n</li>\n<li>\n<a href=\"http://espn.go.com/espnradio/podcast/archive?id=2386164\" target=\"_blank\" rel=\"noopener\">\n    ESPN Baseball Tonight\n</a>\n</li>\n<li>\n<a href=\"http://www.fangraphs.com/blogs/category/podcast/\" target=\"_blank\" rel=\"noopener\">\n    Fan graphs Audio\n</a>\n</li>\n<li>\n<a href=\"http://fivethirtyeight.com/tag/fivethirtyeight-podcasts/\" target=\"_blank\" rel=\"noopener\">\n    FiveThirtyEight Elections\n</a>\n</li>\n<li>\n<a href=\"http://freakonomics.com/\" target=\"_blank\" rel=\"noopener\">\n    Freakonomics\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/programs/fresh-air/\" target=\"_blank\" rel=\"noopener\">\n    Fresh Air\n</a>\n</li>\n<li>\n<a href=\"http://fivethirtyeight.com/tag/fivethirtyeight-podcasts/\" target=\"_blank\" rel=\"noopener\">\n    Hot Takedown by FiveThirtyEight\n</a>\n</li>\n<li>\n<a href=\"http://howtodoeverything.org/\" target=\"_blank\" rel=\"noopener\">\n    How To Do Everything\n</a>\n</li>\n<li>\n<a href=\"http://www.intelligencesquaredus.org/\" target=\"_blank\" rel=\"noopener\">\n    Intelligence Squared Debates\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/podcasts/510307/invisibilia\" target=\"_blank\" rel=\"noopener\">\n    Invisibilia\n</a>\n</li>\n<li>\n<a href=\"http://krpoliticaljunkie.com/\" target=\"_blank\" rel=\"noopener\">\n    Ken Rudin's Political Junkie\n</a>\n</li>\n<li>\n<a href=\"http://www.wnyc.org/shows/lopate/\" target=\"_blank\" rel=\"noopener\">\n    The Leonard Lopate Show\n</a>\n</li>\n<li>\n<a href=\"http://longform.org/podcast\" target=\"_blank\" rel=\"noopener\">\n    Longform Podcast\n</a>\n</li>\n<li>\n<a href=\"http://www.marketplace.org/\" target=\"_blank\" rel=\"noopener\">\n    Marketplace\n</a>\n</li>\n<li>\n<a href=\"http://www.muscleforlife.com/\" target=\"_blank\" rel=\"noopener\">\n    Muscle for Life\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/podcasts/510310/npr-politics-podcast\" target=\"_blank\" rel=\"noopener\">\n    NPR Politics\n</a>\n</li>\n<li>\n<a href=\"http://onpoint.wbur.org/\" target=\"_blank\" rel=\"noopener\">\n    On Point with Tom Ashbrook\n</a>\n</li>\n<li>\n<a href=\"http://www.onthemedia.org/\" target=\"_blank\" rel=\"noopener\">\n    On The Media\n</a>\n</li>\n<li>\n<a href=\"http://onlyagame.wbur.org/\" target=\"_blank\" rel=\"noopener\">\n    Only a Game\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/sections/money/\" target=\"_blank\" rel=\"noopener\">\n    Planet Money\n</a>\n</li>\n<li>\n<a href=\"https://soundcloud.com/polygon-longform\" target=\"_blank\" rel=\"noopener\">\n    Polygon Longform\n</a>\n</li>\n<li>\n<a href=\"http://www.puckpodcast.com/\" target=\"_blank\" rel=\"noopener\">\n    Puck Podcast\n</a>\n</li>\n<li>\n<a href=\"http://www.radiolab.org/\" target=\"_blank\" rel=\"noopener\">\n    Radiolab\n</a>\n</li>\n<li>\n<a href=\"https://gimletmedia.com/show/reply-all/\" target=\"_blank\" rel=\"noopener\">\n    ReplyAll\n</a>\n</li>\n<li>\n<a href=\"http://www.sciencefriday.com/\" target=\"_blank\" rel=\"noopener\">\n    SciFri\n</a>\n</li>\n<li>\n<a href=\"https://serialpodcast.org/\" target=\"_blank\" rel=\"noopener\">\n    Serial\n</a>\n</li>\n<li>\n<a href=\"http://snapjudgment.org/\" target=\"_blank\" rel=\"noopener\">\n    Snap Judgement\n</a>\n</li>\n<li>\n<a href=\"http://www.soundopinions.org/\" target=\"_blank\" rel=\"noopener\">\n    Sound Opinions\n</a>\n</li>\n<li>\n<a href=\"http://www.startalkradio.net/\" target=\"_blank\" rel=\"noopener\">\n    StarTalk Radio\n</a>\n</li>\n<li>\n<a href=\"https://gimletmedia.com/show/startup/\" target=\"_blank\" rel=\"noopener\">\n    Startup\n</a>\n</li>\n<li>\n<a href=\"https://gimletmedia.com/show/surprisingly-awesome/\" target=\"_blank\" rel=\"noopener\">\n    Surprisingly Awesome\n</a>\n</li>\n<li>\n<a href=\"http://www.thetakeaway.org/\" target=\"_blank\" rel=\"noopener\">\n    The Takeaway\n</a>\n</li>\n<li>\n<a href=\"http://www.thisamericanlife.org/\" target=\"_blank\" rel=\"noopener\">\n    This American Life\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/programs/ted-radio-hour/\" target=\"_blank\" rel=\"noopener\">\n    TED Radio Hour\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/programs/wait-wait-dont-tell-me/\" target=\"_blank\" rel=\"noopener\">\n    Wait Wait...Don't Tell Me\n</a>\n</li>\n<li>\n<a href=\"http://fivethirtyeight.com/tag/fivethirtyeight-podcasts/\" target=\"_blank\" rel=\"noopener\">\n    What's the Point?\n</a>\n</li>\n<li>\n<a href=\"http://whyy.org/cms/radiotimes/\" target=\"_blank\" rel=\"noopener\">\n    WHYY Radio Times\n</a>\n</li>\n</ul>\n<p>Quite the list, huh? I wish I could say I listen to all of them, but alas I often have to pick and choose. Either way, I generally leave knowing more than I did previously.</p>\n<p>Any other recommendations?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2016-02-07T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2015/12/17/i-finally-ran-a-marathon/",
      "url": "https://kpwags.com/posts/2015/12/17/i-finally-ran-a-marathon/",
      "title": "I Finally Ran a Marathon",
      "content_html": "\n\t\t<p>I did it. I actually did it. Even almost a month later it sometimes dawns on me how amazing it is that I was able to run a full marathon (26.2 miles).</p>\n<p>In March 2010, I tried to run a 5k and failed miserably not even really able to run a mile. I finished the 5k, mostly by walking and probably annoying those running it, but it wasn't one of my proudest moments. That was actually what sparked my decision to get myself in better shape. I started going for walks, and in June to July 2010 after I moved to Plymouth Meeting, I started going for 2-3 mile runs. Granted most of these runs included plenty of walking breaks, I was starting out well and was on my way. Slowly these runs had less and less walking breaks and my average pace started to creep down to the 12 minute mile range. In late July, I joined LA Fitness with my buddy LJ and started working on my strength training as well. I didn't really know what I was doing with regards to strength training, but I also didn't really have much in terms of muscle, so I had to start somewhere. Well I continued to run both at the gym and around my apartment and in March 2011, 1 year later, I ran the same 5k in 34:03.</p>\n<p>Fast forward to 2013, I had just hurt my shoulder playing Baseball, so really, the only thing I could really do was run. Lifting weights was notably limited as my right arm was causing me pain. I went through physical therapy to fix the shoulder, but in the meantime I started running more. After successfully running almost 11 miles one Saturday, I decided to sign up for the Philadelphia Half Marathon in November 2013 and successfully ran that in 2:15:38.</p>\n<p>Not to be outdone, in 2014 I signed up for the Philadelphia Full Marathon in November 2014. In the meantime, I ended up running Broad Street (10 miles), and 2 half marathons during the spring and summer. Unfortunately, my left knee started giving me problems and I was unable to run the marathon in November. I went through physical therapy, got exercises to help prepare me for another try and in April 2015, I signed up to run the 2015 Philadelphia Marathon.</p>\n<p>My training started at the end of July, right after vacation, and right as my wife and I decided to buy a house. The next month was hectic with me running 4 days a week and working on the house. Training was going well until the end of September, beginning of October. I had hit a new record high of 16 miles, but started to feel pain in my right foot. I tried again a week later, and sure enough the pain was still there. I thought it was a stress fracture, but it turned out to just be inflammation thankfully (sorta). It unfortunately kept me from running for 2 weeks right in the middle of the longest runs of my training. I went to the gym and spent time on the elliptical and stationary bike in an attempt to try to keep myself active and my cardiovascular system active. Late October, early November I started running again and was able to hit 10+ miles without pain in my foot so I was hopeful I might be able to pull the marathon off after all. I probably should have trained a little more, but on November 22nd, I gave the Philadelphia Marathon my best effort and was able to complete it in 5:12:16.</p>\n<p>The pain was excruciating. Around mile 2, my right knee started hurting. At mile 17, my foot started hurting. At mile 23, I developed a blister on one of my toes. But I can proudly say I was able to persevere and finish. I like to think it was my determination to not have to train to run another marathon that helped me finish, but running 24 miles with some pretty sharp pain in my right knee was not fun. My cousin Tim met up with me in Manyunk and thankfully I had him to run the last 6-7 miles with. It made the pain a lot easier to bear. I did have to take a few more walking breaks than I would have liked, but at the end of the days, who cares, I did it! My parents, sister &amp; her boyfriend, as well as my best friend all showed up and I was in tears as I crossed the finish line.</p>\n<p>I wanted to say I ran a marathon in my lifetime, and now I can say I did so.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/kHQ6KX0E2M-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/kHQ6KX0E2M-1920.gif 1920w\" /><img alt=\"Me finishing the 2015 Philadelphia Marathon\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/kHQ6KX0E2M-1920.jpeg\" width=\"1920\" height=\"979\" /></picture></p>\n<p><strong>TL;DR:</strong> Ran 26.2 miles after a long journey.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2015-12-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2015/12/11/redesigned-again/",
      "url": "https://kpwags.com/posts/2015/12/11/redesigned-again/",
      "title": "Redesigned Again",
      "content_html": "\n\t\t<p>Over the course of the last several months, I’ve been busy building out my website utilizing <a href=\"https://jekyllrb.com/\" target=\"_blank\" rel=\"noopener\">Jekyll</a> instead of Wordpress. It’s not my first time moving away from Wordpress, but I think it will end up being permanent.</p>\n<p>I do want to write more and I do hope to do so soon, but the fact of the matter is that in all honesty, I really don't blog as much as I want. This lack of posts has the distinct advantage of trying in with what was the biggest difference to me between Jekyll and WordPress. Jekyll does not use or require a database.</p>\n<p>Instead, it uses files to identify the individual pages and posts. Want to add a new post? Just add a file to the posts folder with a given filename format. Jekyll is part of a new <a href=\"http://www.smashingmagazine.com/2015/11/modern-static-website-generators-next-big-thing/\" target=\"_blank\" rel=\"noopener\">trend with static website generators</a> and I have to say that for my current needs, this works out perfectly.</p>\n<p>Because Jekyll just uses files to handle the posts, it makes backing up much simpler. Hell, I can just keep everything in a Git repository and I'm good to go...which is exactly what I do.</p>\n<p>As for the design, I decided I wanted something a little more simple. I do love the cover images, but decided that want really what I wanted for the new look. I decided I liked the idea of a short summary about myself in a sidebar with the main content in the main section. It's simple, and in my humble opinion, elegant. I didn't want to get rid of images completely and I wanted to keep something there to continue the &quot;feel&quot; of a cover image without actually having a cover image. To do this, I decided to add an image header to pages and posts that was easily able to be customized, but yet still compelling. I actually like it because I can change it between a 1, 2 or 3 image header very easily.</p>\n<p>I still have a few things I want to do to improve it. It is responsive, and looks good on both desktop and mobile. The images however, could be better optimized, so I’ll probably do what I can to improve that for mobile once the holiday season is over and things calm down some. I want to make a few CSS tweaks here and there as well, but nothing major. The only thing I’m still debating on is whether I want to bother with comments. I’m leaning against it at the moment figuring people can get a hold of me on <a href=\"https://www.twitter.com/kpwags\" target=\"_blank\" rel=\"noopener\">Twitter</a> or other social media channels if they want, but of course I could change my mind down the road.</p>\n<p>As part of this change I also ended up moving my hosting from Rackspace to Amazon Web Services. I've been meaning to look into AWS and finally decided to give it a try. Having your own server is convenient, but there's something to be said to not have to worry about it when you're only running a simple blog. I still have other sites on Rackspace, but we'll see how long they remain there.</p>\n<p>Let me know what you think.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2015-12-11T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2015/04/17/what-ive-been-up-to/",
      "url": "https://kpwags.com/posts/2015/04/17/what-ive-been-up-to/",
      "title": "What I&#39;ve Been Up To",
      "content_html": "\n\t\t<p>It's been a while since the last time I've posted anything on here so I figured I'd give a little bit of an update as to what I've been up to.</p>\n<p>Starting in January, I decided I really wanted to focus on getting back into better shape. This meant that I needed to start going back to the gym. Well, my normal gym routine generally has been 30 minutes of cardio followed by about 1 hour on the weights. It's actually a workout that I've been enjoying. The only downside, is that I don't get back home until around 8pm. By the time I get home, shower and eat, it's close to 9pm and I'm tired and don't really want to do much other than rest, relax and spend time with my wife.</p>\n<p>The other thing that's been taking up my time is hockey. I'm in 2 leagues which has been keeping me quite busy. My C-League team didn't have that many games to start the season, which meant that in the latter half of the season, there are plenty of games. That, in addition to my I-League season, I'm playing 2-3 times a week. Don't get me wrong, I absolutely love it, but it's been keeping me occupied. At one point I've had hockey 3 nights in a row. Come to think of it, it's going to happen again this Sunday, Monday &amp; Tuesday. Oh boy…</p>\n<p>I also signed up for the 2015 Philadelphia Marathon so I'm going to be starting to train for that pretty soon. I'm excited because the physical therapy and exercises they gave me to do have seemed to help. A couple weeks ago I was able to run 9 miles without knee pain which is a good sign as my 2014 marathon was derailed by knee pain at the 7 mile mark. I found a training program that should be doable and it's already entered into my calendar.</p>\n<p>I also have 2 new projects I've been working on that I'll go into details about soon, but for now, I'll just say that I'm excited about it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2015-04-17T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/11/14/the-redesign/",
      "url": "https://kpwags.com/posts/2014/11/14/the-redesign/",
      "title": "The Redesign",
      "content_html": "\n\t\t<p>This has been in the works for some time now.</p>\n<p>I decided I wanted a better <a href=\"http://kpwags.com/photography\">photography site</a> first, and then along the way I decided that maybe I should short of unite the two. My blog had its own simplistic look, and my photography site was just out there with no real tie to my blog other than my name being in the header.</p>\n<p>The first thing that really made me want to move past my old photography site was The Daily Shot. It was a good idea, at least I think it was, but I found that I never really found all that much to take photos of. That, and I felt like the photos I were taking were becoming more and more repetitive.</p>\n<p>The second thing was that the site just felt clunky to me. I developed it to try and keep it as a one page site more or less, but never really felt that it worked all that well, especially factoring in the responsiveness of the website.</p>\n<p>So I decided to scrap The Daily Shot and start from scratch with building a new site. I wanted something that was visual and really stood out. I figured all I really needed was two pages. An index to give a little blurb about me and my journey into photography, and a dynamic album page to display each album.</p>\n<p>The index page wasn't all that hard to figure out, but I decided that breaking the albums down by year might be helpful especially with tracking the journey and my improvement (hopefully) with my picture taking skills.</p>\n<p>The next part was building the individual album page. I wanted something that would stand out and really grab the attention of the visitor. I decided to go with a cover image since they're both visual and a great way to describe the album.</p>\n<p>Once I got the cover idea nailed down, it was onto laying out the grid of photos which was super simple in comparison to figuring out the best way to do the cover responsively. The only decision I had was what do I want to have happen when a user clicks on a photo. I was thinking about adding a page for the photo but figured that would be overkill since it's not like I'm adding the ability to comment on them, so I just went with a lightbox to make out simple.</p>\n<p>I really do like the way it turned out. I feel like the visuals really stand out and sort of draw the eyes in.</p>\n<p>This led to the blog itself, I liked how the photography portion turned out so much, I decided that while I was at it, I would give my blog a facelift.</p>\n<p>The first thing I decided to do was get rid of the categories. I originally liked that idea, but over time and really not writing all that much, I decided that they really didn't work for what I was focusing on. I also decided that I really liked the cover look of my photography redesign so I wanted to keep up the theme. Having a full screen image for the homepage made perfect sense. Having a full screen image for the about and contact pages didn't make as much sense so I decided to just have the images take up roughly one third of the screen. The biggest challenge I had was for posts. I wanted to do full screen, but figured I wouldn't always have a good image for each post or that maybe some posts wouldn't really be long enough or even warrant one.</p>\n<p>My solution I think was a good one. I essentially have two “categories” right now. I put categories in quotes because they aren't categories that you would think. They're really just a type of post. One is called a Post, the other a Blurb. Posts are the longer, posts (like this one) while Blurbs are there for entries that tend to be shorter and maybe not as lengthy. Posts will have full screen covers, while blurbs will just have the smaller header image. I felt like this was a nice compromise that gave me the best of both worlds.</p>\n<p>I did my best to test this across devices, so if you see something wonky or something that doesn't look right, please let me know. Just let me know what browser/device you're using so I can try to narrow down where the issue is.</p>\n<p>You can check out my photography site <a href=\"https://kpwags.com/photography\">here</a>.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-11-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/05/27/tracking-my-runs/",
      "url": "https://kpwags.com/posts/2014/05/27/tracking-my-runs/",
      "title": "Tracking My Runs",
      "content_html": "\n\t\t<p>This year, I'm really starting to do some longer races. I've already run Broad Street (10 miles), and have 2 more half-marathons and then a full marathon in November. Since I've started running back in 2010, I've been using <a href=\"http://www.runkeeper.com/\" target=\"_blank\" rel=\"noopener\">Runkeeper</a> on my phone to track my runs to give myself an idea how far and how fast I'm running. It's a pretty nice little app and service using your phone's GPS to track how you're doing and overlaying your path over Google Maps. But as I've been running more and participating in some longer races, I've noticed that its accuracy was starting to become questionable.</p>\n<p>When I ran the Philadelphia Half-Marathon in 2013, I used Runkeeper and found that it had me running around 14.5 miles. Given that a half-marathon is 13.1, I couldn't imagine the officials at the Philly Marathon measured the course so far off from the official distance. Looking at the map, I found that the GPS had me sort of all over the course of the run. Rather than being in a relatively straight line across the course, it had me zigging and zagging across the course. Over the course of a 13.1 mile race, that zigging and zagging added up. I ended up having to go in and edit the map and the GPS points to make it closer to what I actually ran. I was disappointed in it, but it gave me a mostly-decent idea how I've been doing, and since it's a free app and service (with a paid premium option), I can't really complain. Plus I didn't know how much of it was the app and how much was the phone's GPS antenna.</p>\n<p>Fast forward to the Broad Street Run and I used my phone and Runkeeper again to track my run. After finishing the race, I happened to look at the map on Runkeeper and it was pretty far off from the actual run. At one point it had me 2-3 blocks away from where I actually was. For anyone who is not familiar with Philadelphia, Broad Street is a major north-south road in Philadelphia. It is around 13 miles and it is pretty much completely straight. The fact that Runkeeper put me 2-3 blocks away, even in areas outside of Center City where there are no skyscrapers to interfere with GPS satellite reception was disappointing. Again though, I can't say that the problem is Runkeeper or the GPS antenna in my phone.</p>\n<p>After Broad Street and with several big races coming up, I decided I wanted to find something that was a little better at tracking my runs. My friend Brian recommended a Garmin GPS watch and I ended up getting the <a href=\"http://www.amazon.com/Garmin-Forerunner-GPS-Enabled-Sport-Monitor/dp/B003J2V8AC\" target=\"_blank\" rel=\"noopener\">Garmin Forerunner 110</a> with a Heart Rate monitor. I've used it for 4 runs so far and am actually pretty happy with the results. None of the runs have been incredibly far, but looking at the maps, it seems that the watch is pretty accurate GPS-wise. The only thing I miss is the automatic uploading to the cloud. Runkeeper automatically uploads your activities to the cloud for you to review and see how you did, the model I have requires me to plug the watch into my computer to upload the activities to <a href=\"http://www.garminconnect.com/\" target=\"_blank\" rel=\"noopener\">Garmin Connect</a> to review. All in all it's minor and doesn't bother me as it really only takes 5 minutes to complete, but it's still something I miss.</p>\n<p>Garmin Connect actually does a pretty good job at displaying the information to you as well. It gives you a map showing your run as well as graphs showing the elevation, pace, and if you wore your heart rate monitor, your heart rate as well. You can click below for an example of what a run looks like through the Garmin interface.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/CShwh9eFQQ-1294.webp 1294w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/CShwh9eFQQ-1294.gif 1294w\" /><img alt=\"A screenshot of the run view for Garmin Connect\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/CShwh9eFQQ-1294.jpeg\" width=\"1294\" height=\"1920\" /></picture></p>\n<p>You can see that it gives you a pretty good idea of how I did based on elevation, how I was able to maintain or lose my pace as well as where my heart rate was. I'm looking forward to using this as I ramp up my runs over the next 2 weeks as I prepare for the ODDyssey Half-Marathon June 8th.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-05-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/04/12/back-with-wordpress/",
      "url": "https://kpwags.com/posts/2014/04/12/back-with-wordpress/",
      "title": "Back with Wordpress",
      "content_html": "\n\t\t<p>At the end of January I decided to make the switch to the Ghost blogging platform. I had heard good things about it and decided to move over to it. Well, this past week I decided I wanted to expand a bit more with how I blog and realized that Ghost really wasn't going to work for what I needed. Given that and my limited knowledge of node.js, I decided that I'd be better served moving back to WordPress as my platform since I am familiar with PHP and its inner workings.</p>\n<p>It wasn't an easy decision and I'd be lying if I said that I wasn't second guessing myself, but for the moment, I'm happy with where I'm at. I backed up my Ghost install, database and all so if down the line I feel like Ghost would be better suited for what I'm looking for, I should be able to move back with limited problems.</p>\n<p>At the end of the day, this blog still gives me the space I need to express myself and that is what's most important.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-04-12T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/04/01/run-forest-run/",
      "url": "https://kpwags.com/posts/2014/04/01/run-forest-run/",
      "title": "Run Forest Run!",
      "content_html": "\n\t\t<p>Well, it's official, this November I will be running my first full marathon. On November 23, 2014 I will be running the Philadelphia Marathon.</p>\n<p>Last year I ran the Philadelphia Half-Marathon which was a huge accomplishment for me and I'm looking forward to pushing myself to the next level. 4 years ago I could barely run a mile and last year I was able to hit 13.1 miles. Now I get to see if I can run 26.2 miles.</p>\n<p>The marathon will actually be the end of a big running year for me. I'm going to be running the Broad Street Run in Philly (10 miles) and two half-marathons. I'm looking forward to running all of these races and am really hoping to get in better shape.</p>\n<p>Now to start training.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/gCy4ykSz_Q-640.webp 640w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/gCy4ykSz_Q-640.gif 640w\" /><img alt=\"Me running the Phillies 5k\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/gCy4ykSz_Q-640.jpeg\" width=\"640\" height=\"640\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-04-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/03/24/full-steam-ahead/",
      "url": "https://kpwags.com/posts/2014/03/24/full-steam-ahead/",
      "title": "Full Steam Ahead",
      "content_html": "\n\t\t<p>A week or so ago I decided that I needed a new programming project to work on. I haven't really had something like this since I closed the book on OpenVoter.</p>\n<p>Originally I was planning on building a project tracking tool in .NET but I decided that I wanted to do something a little less “corporate”, at least right now. Instead, I've come up with going back to an older project idea that I abandoned but am now thinking I'll go back to.</p>\n<p>I'm not going to go too much into it right now, but I will say it's something that I'm actually excited to build and feel like it's a product that I would use on an everyday basis.</p>\n<p>I've already designed the logo and have been working on the wireframes. I'm hoping to get into actual layout over the next week or so.</p>\n<p>I'm planning on building it in Ruby on Rails and have mobile apps planned for development as well.</p>\n<p>I haven't been this excited about a project for a while and am looking forward to seeing this move forward and becoming a reality.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-03-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/02/10/my-thoughts-on-ghost-so-far/",
      "url": "https://kpwags.com/posts/2014/02/10/my-thoughts-on-ghost-so-far/",
      "title": "My Thoughts on Ghost so Far",
      "content_html": "\n\t\t<p>Two weeks ago, I decided to make the switch from WordPress to Ghost as my blogging platform. For me it was a figuratively big jump as I have been using WordPress for years and hadn't really thought of switching to any other platform.</p>\n<p>For me, it was also a challenge to figure out enough about Node.js to be able to set up and configure my blog with Ghost. I ended up getting it up and running on my development server, played around with it, worked on porting my theme over, and finally decided I liked it enough to switch over.</p>\n<p>I'm still playing around with it, though not as much now that it's stable. The only thing I'm trying to get working is the 404 page. Whenever I try to add my custom error page, the site constantly gives me a 503 error. One day, I'll figure this out!</p>\n<p>I really like the writing tool. I'm still getting used to the markdown syntax, but I love the simplicity of it. It's also nice because you can mix in HTML code with it as well to get the additional features you miss with markdown. You can just start writing and not think twice about it.</p>\n<p>I also like the overall simplicity of the platform itself. Not to knock WordPress, but there is a lot of functionality there that is not really needed for a blog. That doesn't mean that it is a bad thing as some sites could definitely benefit from the added features, but for my needs, Ghost provides all the functionality I need.</p>\n<p>One feature that I'm waiting for Ghost to implement is scheduled posting. I would like to be able to schedule a post for the future which I was able to do with WordPress, but not with Ghost. That said, this does seem to be in the feature list for Ghost so I'm hopeful I'll see it in the next release.</p>\n<p>I would also like to see archives functionality. I do miss the ability to view a specific month or year's posts which doesn't seem to be available currently, but it might be available in a later release.</p>\n<p>Overall I'm quite happy with my decision to switch over to Ghost. It seems to be a solid platform that works great for me. If you're considering it, I'd highly recommend giving it a shot.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-02-10T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/02/05/podcasts-galore/",
      "url": "https://kpwags.com/posts/2014/02/05/podcasts-galore/",
      "title": "Podcasts galore!",
      "content_html": "\n\t\t<p>Many times while I am working, I often listen to podcasts. I find that they're a great way to keep myself up to date with what's going on around the world, or just to learn something new.</p>\n<p>I used to listen to NPR a lot more, and I still do, but with all the meetings I'm called into, I seldomly get to listen to a full story or full episode. Now this is part of working so I'm not compaining, it just means that podcasts make a little more sense to me since I can pause the episode and come back to it at the point where I left off.</p>\n<p>The app I use to listen to podcasts is called PocketCasts. It has both an Android and an iOS app. I like it because it syncs across my devices. I switch back and forth between my Nexus 7 and my Galaxy S4, so it's nice to have the episodes sync across the two. It's also nice because it will automatically download the episodes I generally listen to.</p>\n<p>The only downside is that sometimes the counts go up to the point where it is difficult to keep up with them, even when I filter them down to the episodes I am interested in. That being said, I find that it does keep me up to date with what is going on in various different areas such as politics, tech, news, hockey, and more.</p>\n<p>Here's a list of the podcasts I listen to:</p>\n<ul>\n<li>\n<a href=\"http://99percentinvisible.org/\" target=\"_blank\" rel=\"noopener\">\n    99% Invisible\n</a>\n</li>\n<li>\n<a href=\"http://www.androidpolice.com/\" target=\"_blank\" rel=\"noopener\">\n    Android Police Podcast\n</a>\n</li>\n<li>\n<a href=\"http://www.arstechnica.com/\" target=\"_blank\" rel=\"noopener\">\n    Ars Technica Podcast\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/podcasts/510299/ask-me-another\" target=\"_blank\" rel=\"noopener\">\n    Ask Me Another\n</a>\n</li>\n<li>\n<a href=\"http://www.wnyc.org/shows/bl/\" target=\"_blank\" rel=\"noopener\">\n    The Brian Lehrer Show\n</a>\n</li>\n<li>\n<a href=\"http://www.dancarlin.com/hardcore-history-series/\" target=\"_blank\" rel=\"noopener\">\n    Dan Carlin's Hardcore History\n</a>\n</li>\n<li>\n<a href=\"http://freakonomics.com/\" target=\"_blank\" rel=\"noopener\">\n    Freakonomics\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/programs/fresh-air/\" target=\"_blank\" rel=\"noopener\">\n    Fresh Air\n</a>\n</li>\n<li>\n<a href=\"http://www.marketplace.org/\" target=\"_blank\" rel=\"noopener\">\n    Marketplace\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/rss/podcast/podcast_detail.php?siteId=4819382\" target=\"_blank\" rel=\"noopener\">\n    NPR: Technology\n</a>\n</li>\n<li>\n<a href=\"http://www.onthemedia.org/\" target=\"_blank\" rel=\"noopener\">\n    On The Media\n</a>\n</li>\n<li>\n<a href=\"http://onpoint.wbur.org/\" target=\"_blank\" rel=\"noopener\">\n    On Point with Tom Ashbrook\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/blogs/money/\" target=\"_blank\" rel=\"noopener\">\n    Planet Money\n</a>\n</li>\n<li>\n<a href=\"http://krpoliticaljunkie.com/\" target=\"_blank\" rel=\"noopener\">\n    Political Junkie with Ken Rudin\n</a>\n</li>\n<li>\n<a href=\"http://www.puckpodcast.com/\" target=\"_blank\" rel=\"noopener\">\n    The Puck Podcast\n</a>\n</li>\n<li>\n<a href=\"http://www.radiolab.org/\" target=\"_blank\" rel=\"noopener\">\n    Radiolab\n</a>\n</li>\n<li>\n<a href=\"http://sciencefriday.com/\" target=\"_blank\" rel=\"noopener\">\n    Science Friday\n</a>\n</li>\n<li>\n<a href=\"http://www.startalkradio.net/\" target=\"_blank\" rel=\"noopener\">\n    Star Talk with Neil DeGrasse Tyson\n</a>\n</li>\n<li>\n<a href=\"http://www.stuffyoushouldknow.com/podcasts/\" target=\"_blank\" rel=\"noopener\">\n    Stuff You Should Know\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/programs/ted-radio-hour/\" target=\"_blank\" rel=\"noopener\">\n    TED Radio Hour\n</a>\n</li>\n<li>\n<a href=\"http://www.thisamericanlife.org/\" target=\"_blank\" rel=\"noopener\">\n    This American Life\n</a>\n</li>\n<li>\n<a href=\"http://twit.tv/\" target=\"_blank\" rel=\"noopener\">\n    TWit: This Week in Tech\n</a>\n</li>\n<li>\n<a href=\"http://www.npr.org/programs/wait-wait-dont-tell-me/\" target=\"_blank\" rel=\"noopener\">\n    Wait, Wait&#8230;Don&#8217;t Tell Me\n</a>\n</li>\n<li>\n<a href=\"http://whyy.org/cms/radiotimes/\" target=\"_blank\" rel=\"noopener\">\n    WHYY Radio Times\n</a>\n</li>\n</ul>\n<p>Do you listen to podcasts? If so, what podcasts do you subscribe to?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-02-05T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/01/27/now-running-on-ghost/",
      "url": "https://kpwags.com/posts/2014/01/27/now-running-on-ghost/",
      "title": "Now Running on Ghost",
      "content_html": "\n\t\t<p>Despite my initial skepticism about switching over to Ghost as my blogging platform, I still pushed ahead and made my blog theme for Ghost. As you can tell, the look isn't all that different from it's previous look, but the backend is completely different.</p>\n<p>I have to say, the way it handles editing is slightly different, but in a good way. I'll write more once I get more into the nitty-gritty.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-01-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/01/24/making-a-switch-to-ghost/",
      "url": "https://kpwags.com/posts/2014/01/24/making-a-switch-to-ghost/",
      "title": "Making a Switch to Ghost?",
      "content_html": "\n\t\t<p>Several months ago, when Ghost was first released to the public, I took a look at it and made a note to give it a look-see. Over the past week, I finally got it running on my dev server playing nicely with my Apache setup. So far I've been playing around with it and am contemplating whether I want to switch my blog platform over to it from WordPress, which is what I currently use.</p>\n<p>I've been blogging off and on since 2007. My first blog was actually a custom blog that I first built to help myself learn PHP. Since then, I've generally used WordPress with various different looks. WordPress has worked well for me. I've gotten a decent understanding of how it works so I can build themes for it and maintain it properly. I can post from my phone and my tablet with ease through the WordPress app. Simply put, WordPress just works.</p>\n<p>So why should I even contemplate a switch? Truth be told, I still can't come up with a great answer for this. I see other people raving about it and its simplicity for simply writing does have a certain draw to it. One of the reasons for this blog was to get me into the habit of writing and Ghost seems to do a great job at doing just that. It doesn't yet seem to have the same support that WordPress has for plugins and whatnot, though that's apparently in the works. Still though, I don't really use any plugins for my blog at all except for Disqus so it probably isn't all that big of a deal.</p>\n<p>I guess one of the biggest drawbacks (for me) I see for it is that it's written in node.js. I have no problem with node.js, its just that I haven't really played around with it much and would like a better understanding of it before I'm willing to run my site on it. That in itself wouldn't be so bad if it weren't for the fact that I'm busy enough the way it is. Now I feel like I'm just complaining about nothing or maybe I just have too much on my plate at the moment.</p>\n<p>Either way, it's something I am still considering, but I can't help but to think…if it ain't broke, don't fix it.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-01-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/01/24/delays-delays/",
      "url": "https://kpwags.com/posts/2014/01/24/delays-delays/",
      "title": "Delays, Delays...",
      "content_html": "\n\t\t<p>This week, I was hoping to get back into my gym routine. I went so far as to do a double session on Monday in hockey (2.5 hours of drills) and was all ready to start on Tuesday after a few false starts over the last month.</p>\n<p>Life unfortunately, doesn't always go so easy. Tuesday there was a pretty big snowstorm and did not feel comfortable to drive to the gym. Wednesday I was all ready to go…but then I got sick. Stupid virus or something knocked me on my ass until today, and even today I don't feel 100%.</p>\n<p>Oh well, maybe tomorrow.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-01-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/01/14/exploring-new-york-city/",
      "url": "https://kpwags.com/posts/2014/01/14/exploring-new-york-city/",
      "title": "Exploring New York City",
      "content_html": "\n\t\t<p>This past weekend, Lauren and I went to New York City. It wasn't the best weather for the trip, but overall I feel we lucked out as we only needed umbrellas twice. Most of the time it was just gray or misting which isn't too bad in the grand scheme of things.</p>\n<p>The weekend was relatively low-key, we spent a lot of time watching hockey both at Madison Square Garden and at sports bars. We got tickets to the Harvard-Yale game at MSG and it was a fun time. We had no real stake in the game, but it was an amazing arena and a fun game to watch.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/iNz6Yi6f0y-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/iNz6Yi6f0y-1920.gif 1920w\" /><img alt=\"The Harvard and Yale Hockey teams facing off in Madison Square Garden in New York City\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/iNz6Yi6f0y-1920.jpeg\" width=\"1920\" height=\"1080\" /></picture></p>\n<p>We had pretty good seats for it too as you can see.</p>\n<p>The other thing we did was spent Saturday afternoon at Museum of Natural History. I went there once in elementary school and was bored out of my mind. I think there were two parts to why I was so bored. The first was that I was so used to the Franklin Institute in Philadelphia and how many of their exhibits were interactive. The second was that it was around the time when it was &quot;not cool&quot; to really read and study the exhibits, so trying to fit in with my peers, I opted not to care. Fast forward 10 or so years later and I've been wanting to go back to the museum and actually explore the museum for real this time. Needless to say, I'm glad I did. We didn't see the entire museum, but we saw a Dark Matter planetarium show, explored the ocean, and the dinosaurs.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/ei-PPoNYLX-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/ei-PPoNYLX-1920.gif 1920w\" /><img alt=\"The skeleton of a Tyrannosarus Rex at the Museum of Natural History in New York City\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/ei-PPoNYLX-1920.jpeg\" width=\"1920\" height=\"1080\" /></picture></p>\n<p>I already miss NYC.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-01-14T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/01/02/setting-up-financial-goals/",
      "url": "https://kpwags.com/posts/2014/01/02/setting-up-financial-goals/",
      "title": "Setting Up Financial Goals",
      "content_html": "\n\t\t<p>So as part of my goals for 2014, I want to buy a house.</p>\n<p>Buying a house means you need to save up money for a down payment. Saving money means limiting your expenses. Limiting your expenses means budgeting and that is where we begin. I've been using a spreadsheet for the past 2 years to help with this and it's done a decent job. I played around with Mint a while back, but could never get the hang of it enough to really utilize it. This year, I figure I'd try again.</p>\n<p>For some reason Mint can no longer connect and sync with my bank account (which I am now locked out of, so I need to call them…sigh) and it's handling of budgets &amp; categories still seems clunky. I decided to budget money for &quot;fun&quot;, which could include trips to the movies, dinners, etc. Mint wants to put them all over the place in different categories and it doesn't really seem easy to group them all together for my budgeting goals since some months might be more movie heavy while the next might be more 'out-to-dinner' heavy. As far as I see them, they're both in the same group but I'm having to go into each transaction to adjust them.</p>\n<p>The other complaint I have is goals. I'm sure the goals they have defaulted work fine. I, however just want a simple, &quot;I want to save $X a month&quot; and it is so difficult to configure. I can go into the custom goals, but even this is not set up nicely. It wants me to set up a saved goal so I set that to $X x 12, but then it takes into account how much money is already in the savings account…it's a complete mess for what I want. What I want is a monthly recurring goal, that takes into account the money moved from checking into savings, being completely ignorant to what is already in savings. Just track the money moved. In the end, I just added my savings goal as a budget line-item and got rid of the goals altogether.</p>\n<p>I really don't know if I'll be sticking with Mint as it really seems to be completely off for what I want. I'm sure they're great for some people, but for me I feel like it's so much extra work to get it to be the tool I'm looking for.</p>\n<p>Do you use Mint or is there another tool you'd recommend as an alternative?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-01-02T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2014/01/01/2014-is-here/",
      "url": "https://kpwags.com/posts/2014/01/01/2014-is-here/",
      "title": "2014 Is Here!",
      "content_html": "\n\t\t<p>Happy New Year everyone! Hope you all had a good, safe, fun New Year's Eve. Lauren and I spent it bundled up watching the Flyers game and Netflix which is just what we wanted.</p>\n<p>Here's to a great and productive 2014!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2014-01-01T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/12/29/whats-on-the-horizon-for-2014/",
      "url": "https://kpwags.com/posts/2013/12/29/whats-on-the-horizon-for-2014/",
      "title": "What&#39;s on the Horizon for 2014?",
      "content_html": "\n\t\t<p>I still can't believe that 2013 is almost over. It really seems like the year just flew by. I guess part of it was all the wedding preparation and the wedding itself. There are still some days where I can't believe I'm married, though I'm definitely happy I am...just seems so surreal.</p>\n<p>With that said, 2014 is fast approaching and I have several goals I would like to accomplish in the next year. I'm hoping that I can successfully accomplish most, if not all of them. I'm going to try to set them to be realistic because too many times I've seen people fail to accomplish their goals due to setting the bar too high. You don't want to underachieve, but there's still such a thing as going overboard.</p>\n<ol>\n<li>The first goal I have is to complete my first novel which I've titled Glitch'd, and to write more in general. I'm around 20,000 words so far, though I've slacked off a bit recently. I'm using this blog though to help keep me writing figuring it will help keep my creative juices flowing.</li>\n<li>The second goal I have is to train for, and complete a full marathon. There's 2 I'm looking at entering. The first is the Lehigh Valley Marathon September 7. This is supposed to be a nice course that isn't too difficult, but I'm worried about training during July and August. I was able to do some runs this past summer in the high heat and humidity, but I kept them shorter between 3 and 5 miles…a pretty big difference to the 26.2 a full marathon is. The other one, which I will most likely enter regardless, is the Philadelphia Marathon. This is in November, so I'd have a cooler September and October to train. I might end up doing the half at Lehigh Valley and the full in Philly too, so we'll see.</li>\n<li>The third goal I have for myself I figure will fit in with number 2. I would finally like to lose my gut. I don't need a six pack or sculpted abs, I just want to be slimmer in my belly. Considering I've lost the weight I already have, I think this is definitely attainable. That being said, I don't know how much I'm looking forward to the influx of people at the gym after January 1st.</li>\n<li>I would also like to take a chunk out of my video games list. I've gotten so many games through Steam sales, and I would like to beat more of them. I've actually limited my game purchases to help with this goal.</li>\n<li>My fifth goal is to find a new project for me to work on and get off the ground. I've been bouncing around a lot recently with different ideas, and I'd like to find a single good idea to focus on and bring to fruition. I think I have one, but it needs some more thought with it.</li>\n</ol>\n<p>I think that all of these goals are definitely attainable and time will tell how much I can accomplish. I feel like I've been able to increase my productivity over the last week or two, so I'm hopeful.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-12-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/12/27/hope-everyone-had-a-good-christmas/",
      "url": "https://kpwags.com/posts/2013/12/27/hope-everyone-had-a-good-christmas/",
      "title": "Hope Everyone Had a Good Christmas",
      "content_html": "\n\t\t<p>Hope everyone had a good Christmas. Mine was definitely a good one. It was nice to be able to spend the day with my family. For a first Christmas (well, Married Christmas) with Lauren, I couldn’t have asked for a better Christmas.</p>\n<p>Christmas Eve Lauren and I had a delicious seafood dinner, a tradition we started last year. We had crab cakes (homemade of course), scallops, clams, and asparagus which were all delicious. After dinner we went over to Lauren’s parents to spend time with them and exchange gifts.</p>\n<p>Christmas morning, I made us a delicious breakfast which was followed by Lauren and I exchanging gifts. I also was floored by what Lauren got me. I ran my first half marathon in November which for me was a big accomplishment so to get this, was absolutely amazing.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/zB6voqnJET-1394.webp 1394w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/zB6voqnJET-1394.gif 1394w\" /><img alt=\"My half marathon bib and medal framed\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/zB6voqnJET-1394.jpeg\" width=\"1394\" height=\"1920\" /></picture></p>\n<p>It is amazing to have a nice remembrance of it. It was an amazing gift from the best wife ever.</p>\n<p>We spent the early afternoon with Lauren’s family and dinner with my family. It was a great day overall, mostly for its simplicity. We didn’t do anything fancy, just spend quiet time with family. Those always seem to be the best times.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-12-27T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/12/24/ohhhh-the-holidays/",
      "url": "https://kpwags.com/posts/2013/12/24/ohhhh-the-holidays/",
      "title": "Ohhhh, the Holidays",
      "content_html": "\n\t\t<p>Every year, it seems the holidays come up on me faster and faster. It really feels like it was just Halloween yesterday. Maybe it's because I was so occupied with planning my wedding this year, but it really seems like the whole year has just flown by. I guess it doesn't help that I've just been so busy this December. With everything going on, this is the first year that Lauren and I ended up getting a fake tree. I've always been far more preferential to real trees because I love their look, and their smell. The fun is also going out and finding the tree and cutting it down. The weather never really cooperated for us going to cut one down, and we realized that we just didn't have the room. On the plus side, there's less of a worry that our cat Cookie will eat the Christmas tree and get sick.</p>\n<p>Even with all the craziness of the last several months, I'm really looking forward to Christmas tomorrow. This will be my first Christmas married to Lauren (our 3rd Christmas together as a whole) and I'm looking forward to spending time with both of the families.</p>\n<p>I wish everyone a safe and Merry Christmas.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-12-24T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/12/18/recipe-tuna-marinated-orange-pepper-garlic-sauce/",
      "url": "https://kpwags.com/posts/2013/12/18/recipe-tuna-marinated-orange-pepper-garlic-sauce/",
      "title": "Recipe - Tuna Marinated in an Orange Pepper Garlic Sauce",
      "content_html": "\n\t\t<p>So this was my first attempt at making my own recipe. My first time taking basic ingredients and putting them together, hoping that it turns into something edible. Well, it was most definitely successful and the tuna was absolutely delicious. So, with my glee, I figured I'd share the recipe.</p>\n<h2>Ingredients</h2>\n<ul>\n<li>2 tuna steaks</li>\n<li>4 cloves of garlic, minced</li>\n<li>1 green bell pepper, diced</li>\n<li>2 oranges</li>\n<li>1 tsp. garlic &amp; pepper spice blend</li>\n<li>2 tbsp. olive oil</li>\n</ul>\n<h2>Instructions</h2>\n<ol>\n<li>In a medium bowl combine the garlic, bell pepper, the spice blend, and juice of the 2 oranges</li>\n<li>Pour mixture into a seal-able plastic bag</li>\n<li>Place tuna steaks in bag and spread marinade around</li>\n<li>Let marinade for at least 1-2 hours</li>\n<li>Heat the olive oil in a skillet (I prefer using a cast iron skillet for this, but you can use any skillet really.)</li>\n<li>Cook the tuna undisturbed for 3-4 minutes, flip and cook undisturbed for another 3-4 minutes (It will have a nice pink center. If you prefer your tuna cooked a little bit more, just leave it on longer.)</li>\n<li>Serve with rice and/or veggies</li>\n</ol>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-12-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/11/18/i-did-it-half-marathon-complete/",
      "url": "https://kpwags.com/posts/2013/11/18/i-did-it-half-marathon-complete/",
      "title": "I Did It! Half Marathon Complete!",
      "content_html": "\n\t\t<p>I did it. After all the hard work and exercise, I ran a half marathon yesterday! From barely being able to run a mile three and a half years ago, to 13.1 miles…it's a journey I am incredibly proud of.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/2Xx8NjhLe0-1980.webp 1980w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/2Xx8NjhLe0-1980.gif 1980w\" /><img alt=\"Me running in the 2013 Philadelphia Half Marathon\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/2Xx8NjhLe0-1980.jpeg\" width=\"1980\" height=\"620\" /></picture></p>\n<p>My finishing time was 2:15:15 with an average pace of 10:18/mile. I was doing really well to start, but the last 4 or so miles really kicked my ass. Either way though, I'm proud of my accomplishment and would encourage everyone to give something like this a try. It's an amazing feeling.</p>\n<p>My next goal…a full marathon…maybe next year.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/2LW2V34pSI-1920.webp 1920w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/2LW2V34pSI-1920.gif 1920w\" /><img alt=\"Lauren and I after I finished running the 2013 Philadelphia Marathon\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/2LW2V34pSI-1920.jpeg\" width=\"1920\" height=\"1440\" /></picture></p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-11-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/10/30/geeking-out/",
      "url": "https://kpwags.com/posts/2013/10/30/geeking-out/",
      "title": "Geeking Out",
      "content_html": "\n\t\t<p>So, almost 2 weeks ago, I got married to the most wonderful woman I know. It was amazing, but this is another story.\nWe went to Aruba for our honeymoon which obviously requires flying. Well on the flight from Atlanta to Aruba, we ended up flying off the east coast of Florida. I had the window seat and was sort of blankly staring out the window staring down at the ground when all of a sudden I happen to notice a long runway. The first thing that came to mind, being the geek I am, is me wondering if that runway is the Space Shuttle landing strip. So, I take a quick look around and what do you know, there are Launch Pads 39A and 39B where the Space Shuttle and Saturn V rockets took off from. Looking further I was even able to see the Vehicle Assembly Building and the other launch pads situated south of 39A &amp; B. I even had a chance to see what I believe was the new crawler and tower for the launch system that NASA is currently working on.</p>\n<p>The whole time staring down at the ground I'm completely geeking out. Here is something that I love right beneath me by about 40,000 feet. I've always been interested in NASA and space travel and exploration so to be able to see it from above with my own eyes was amazing. I'll have to go back there again one day.</p>\n<p>Lauren definitely understood my reaction, and was happy I was able to see something I love, but those around me probably thought I was nuts. Oh well.</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-10-30T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/10/03/a-new-mini-project-is-brewing-daily-shots/",
      "url": "https://kpwags.com/posts/2013/10/03/a-new-mini-project-is-brewing-daily-shots/",
      "title": "A New Mini-Project is Brewing: Daily Shots",
      "content_html": "\n\t\t<p>In November of 2011, after really getting into photography, I decided to finally take the plunge and get myself a DSLR camera. I chose the Canon EOS 60D because I liked what it offered, and my girlfriend (now my fiancee) also had it and recommended it to me. I should add that it also is nice since we'll be able to share lenses. Fast forward to now, I've gotten better with photography, but don't always have the time to go out with my Canon and find those awesome shots.\nAbout a week ago, I was thinking about this and have come up with an idea for helping fix this. I'm going to design and build a new website off of this blog where I will post a photo every day. These photos might not necessarily be taken with my Canon, but I figure by training myself to take a photo everyday, I'll find some fun angles or even subjects that I wouldn't have thought to see otherwise.</p>\n<p>With my wedding coming up soon, I'm not sure when this will come into fruition, but I've already gotten some wires laid out as to how I want the site to look like. It will really just be a matter of designing it and figuring out the technology behind it. Should be fun!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-10-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/09/03/uncluttered/",
      "url": "https://kpwags.com/posts/2013/09/03/uncluttered/",
      "title": "Uncluttered",
      "content_html": "\n\t\t<p>One of the biggest things I try to do is keep my desk uncluttered. I find that it helps me stay organized. As an example, here's my desk at work.</p>\n<p><picture><source type=\"image/webp\" srcset=\"https://kpwags.com/img/5UzBpPC0Yi-1024.webp 1024w\" /><source type=\"image/gif\" srcset=\"https://kpwags.com/img/5UzBpPC0Yi-1024.gif 1024w\" /><img alt=\"My clean desk at work\" loading=\"lazy\" decoding=\"async\" src=\"https://kpwags.com/img/5UzBpPC0Yi-1024.jpeg\" width=\"1024\" height=\"576\" /></picture></p>\n<p>You can see that there's not much on my desk. I have a few decorative items around my desk, but not much with regards to loose papers and other clutter. What is normally out for me is my iPad and my Moleskin notebook.</p>\n<p>So what about you? What do you keep on your desk? How do you stay organized?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-09-03T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/08/29/killing-a-project-is-never-easy/",
      "url": "https://kpwags.com/posts/2013/08/29/killing-a-project-is-never-easy/",
      "title": "Killing a Project is Never Easy",
      "content_html": "\n\t\t<p>About 1-2 years ago, I decided to stop development work on OpenVoter. It's still there, you can still download and use it, but it just hasn't been updated. Kind of sad too, because some updates were actually pretty far along for the next version. That said, if I ever end up going back to work on it, it might very well take a fair amount of time to figure out where exactly I left off. But going back to the time that I decided to move on from OpenVoter, I remember debating what I wanted to do somewhat heavily. I really liked what I was able to accomplish with it, but at the same time, it wasn't really used by anyone that I knew of and didn't really see it moving anywhere else. In the end, I begrudgingly decided to shelve it and find something else to work on.\nI've come up with a few ideas since then, the latest of which I've been on the fence about. I've been contemplating building an RSS reader to replace Google Reader, but I'm worried that the market has already been rather saturated and is too crowded for a little guy to get in. I have some cool ideas for it, some of them might even give it the differentiation it would need to work if I'm able to pull it off. It would definitely be a huge undertaking for me and probably more ambitious than OpenVoter. At the end of the day though, I'm not sure I want to pour my heart and soul into a project that may indeed have no real chance of succeeding. If I can get it to work, I'd definitely use it though so maybe it still would be worth pursuing. 2 years later, I'm now faced with the same decision I had with OpenVoter, only now with a different project. Do I continue on, or do I move onto something else? Even though I'm not all that far along, it's still hard to just abandon something.</p>\n<p>I've been contemplating with getting into game development. I have an idea for a pretty cool game that I think I could probably pull off so maybe I'll just move onto that. The future is unknown, and I love these challenges…just need to make the time for them and stay focused!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-08-29T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/08/18/never-enough-time-in-the-day/",
      "url": "https://kpwags.com/posts/2013/08/18/never-enough-time-in-the-day/",
      "title": "Never Enough Time in the Day",
      "content_html": "\n\t\t<p>There never seems to be enough hours in the day to get everything I want to done. Part of that is me failing to motivate myself to focus, the other is just me being busy. Take today for example. I meant to spend a good portion of the afternoon working on teaching myself libGDX for the game idea I have. What did I do? Get myself distracted so much I only got through a very little bit of the one tutorial I was going through. That being said, I can proudly say that it wasn't Reddit, Twitter, Facebook, or the Internet that distracted me. It was really just my lack of being able to focus that led to me getting up to go sit out on the couch with Lauren, or just roam around aimlessly. Today was not going to be my day to focus.\nThings should hopefully end up calming down a bit once the wedding is over...did I mention I'm getting married in 2 months? Right now I'm busy with working out at the gym, running, hockey, wedding stuff, and of course work. There really just doesn't seem to be enough time in the day to focus on everything.</p>\n<ul>\n<li>Writing my first novel</li>\n<li>Hockey</li>\n<li>Gym &amp; Running (trying to lose my gut)</li>\n<li>Borderlands 2</li>\n<li>RSS Reader</li>\n<li>Game idea</li>\n<li>Game challenge (go through and complete all the games in my rather large library)</li>\n</ul>\n<p>This list is what I currently have on my plate. And that doesn't even include wedding planning stuff, spending time with friends, and of course spending time with Lauren. None of it I want to really give up, so it's really a challenge to balance it all.</p>\n<p>Motivation &amp; focus are also key here and it always seems to be lacking when I have the time to work on my development projects especially.</p>\n<p>I'm really hoping I can soon make progress here. I'm still not quite sure what I want to do about my idea for a new RSS reader, but I have an idea for what could be a pretty cool game. I just would need to teach myself how to build the game, and how to build a functioning AI. It will be a challenge, but challenges can be fun.</p>\n<p>Any recommendations on how to improve one's focus?</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-08-18T00:00:00Z"
    }
    ,
    {
      "id": "https://kpwags.com/posts/2013/08/14/new-domain-new-look-more-posts/",
      "url": "https://kpwags.com/posts/2013/08/14/new-domain-new-look-more-posts/",
      "title": "New Domain, New Look, More Posts (Hopefully)",
      "content_html": "\n\t\t<p>Over the last couple months, I've been seriously considering doing a rebranding. I felt that DarkNemesis and Darker Nemesis just didn't really feel like 'me' anymore. So I went about trying to find a new moniker. &quot;Wags&quot; has always been sort of a nickname for me given my last name being Wagner and &quot;kpwags&quot; was available so after some thought, I ended up liking it and now here we are.\nThe main reason I wanted to re-make my blog is that I've been wanting to write a lot more and figure this gives me a venue to write about this and that without having to focus so much on an overarching story like in the novel I'm writing.</p>\n<p>So welcome!</p>\n\n\t\t<p>Thank you for reading this with RSS and keeping RSS alive! You're awesome!</p>\n\t\t<p><strong>Reply via:</strong> <a href=\"mailto:hello@kpwags.com\">Email</a> &bull; <a href=\"https://hachyderm.io/@kpwags\" target=\"_blank\" rel=\"noreferrer nofollow\">Mastodon</a> &bull; <a href=\"https://bsky.app/profile/kpwags.com\" target=\"_blank\" rel=\"noreferrer nofollow\">Bluesky</a></p>\n\t",
      "date_published": "2013-08-14T00:00:00Z"
    }
    
  ]
}