<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Sean Boult</title>
    <description>The latest articles on Forem by Sean Boult (@hacksore).</description>
    <link>https://forem.com/hacksore</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png</url>
      <title>Forem: Sean Boult</title>
      <link>https://forem.com/hacksore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hacksore"/>
    <language>en</language>
    <item>
      <title>Embed These Websites In Your Blog Today</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 07 May 2026 18:34:41 +0000</pubDate>
      <link>https://forem.com/aws/embed-these-websites-in-your-blog-today-286p</link>
      <guid>https://forem.com/aws/embed-these-websites-in-your-blog-today-286p</guid>
      <description>&lt;p&gt;I stumbled onto the DEV &lt;a href="https://dev.to/p/editor_guide#supported-url-embeds-list"&gt;supported URL embeds list&lt;/a&gt;, which revealed some interesting supported platforms.&lt;/p&gt;

&lt;p&gt;You'll want to refer to the link above to figure out the syntax for the DEV specific ones but most are just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;embed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;url&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you would like to jump around.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asciinema&lt;/li&gt;
&lt;li&gt;StackBlitz&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;X/Twitter&lt;/li&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;DEV specific&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://asciinema.org" rel="noopener noreferrer"&gt;asciinema&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A video-like player which is so cool because you can actually pause it and copy the text from it.&lt;/p&gt;


&lt;div class="ltag_asciinema"&gt;
  
&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://stackblitz.com" rel="noopener noreferrer"&gt;StackBlitz&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Interactive code editor right in a blog post 😍. Seems like the embedded terminal and preview will fail due to some &lt;code&gt;postMessage&lt;/code&gt; shenanigans, but perhaps it can be fixed.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/vitejs-vite-48u9w2no?file=src%2FApp.tsx&amp;amp;view=editor" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;It supports rendering the README to give some brief context with a CTA to open the repo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/strands-agents" rel="noopener noreferrer"&gt;
        strands-agents
      &lt;/a&gt; / &lt;a href="https://github.com/strands-agents/sdk-typescript" rel="noopener noreferrer"&gt;
        sdk-typescript
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A model-driven approach to building AI agents in just a few lines of code. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;div&gt;
    &lt;a href="https://strandsagents.com" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/1cf2d94f5ad881d696cc58b3ffad81acf923846f6c5132f56d6a355ebbb9d6a5/68747470733a2f2f737472616e64736167656e74732e636f6d2f6c61746573742f6173736574732f6c6f676f2d6769746875622e737667" alt="Strands Agents" width="55px" height="105px"&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
    Strands Agents - TypeScript SDK
  &lt;/h1&gt;
&lt;/div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;
    A model-driven approach to building AI agents in TypeScript/JavaScript
  &lt;/h2&gt;
&lt;/div&gt;
  &lt;div&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/graphs/commit-activity" rel="noopener noreferrer"&gt;&lt;img alt="GitHub commit activity" src="https://camo.githubusercontent.com/8821bd0b3888f85c4a98c53352d041c4f739503a337ee8c8a4875cd3188b998f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/issues" rel="noopener noreferrer"&gt;&lt;img alt="GitHub open issues" src="https://camo.githubusercontent.com/cda88797d49d9b5fbdc6adf4b2653ab119f098575d4cd890075e2ede90d39a76/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/pulls" rel="noopener noreferrer"&gt;&lt;img alt="GitHub open pull requests" src="https://camo.githubusercontent.com/b97af830b461ced88f0c8d3a1131e8e97ef484357fc50cc9207bb80b40661893/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d70722f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/blob/main/LICENSE.APACHE" rel="noopener noreferrer"&gt;&lt;img alt="License" src="https://camo.githubusercontent.com/0c123f3b067b77f5b9daffb5702a6465f7b31a8592c15b115f0ff751dfb21300/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://www.npmjs.com/package/@strands-agents/sdk" rel="nofollow noopener noreferrer"&gt;&lt;img alt="NPM Version" src="https://camo.githubusercontent.com/f5536192be00821a49a2cef74506f8a603018b1ff32f3bd3fc1c257d64b74e64/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f40737472616e64732d6167656e74732f73646b"&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;p&gt;
    &lt;a href="https://strandsagents.com/" rel="nofollow noopener noreferrer"&gt;Documentation&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/samples" rel="noopener noreferrer"&gt;Samples&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/sdk-python" rel="noopener noreferrer"&gt;Python SDK&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/tools" rel="noopener noreferrer"&gt;Tools&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/agent-builder" rel="noopener noreferrer"&gt;Agent Builder&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/mcp-server" rel="noopener noreferrer"&gt;MCP Server&lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Strands Agents is a simple yet powerful SDK that takes a model-driven approach to building and running AI agents. The TypeScript SDK brings key features from the Python Strands framework to Node.js environments, enabling type-safe agent development for everything from simple assistants to complex workflows.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Key Features&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🪶 Lightweight &amp;amp; Flexible&lt;/strong&gt;: Simple agent loop that works seamlessly in Node.js and browser environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔒 Type-Safe Tools&lt;/strong&gt;: Define tools easily using Zod schemas for robust input validation and type inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📋 Structured Output&lt;/strong&gt;: Get type-safe, validated responses from LLMs using Zod schemas with automatic retry on validation errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔌 Model Agnostic&lt;/strong&gt;: First-class support for Amazon Bedrock and OpenAI, with extensible architecture for custom providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔗 Built-in MCP&lt;/strong&gt;: Native…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/strands-agents/sdk-typescript" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  &lt;a href="https://x.com" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Useful when a tweet has some context you want to reference.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2052162536301072643-10" src="https://platform.twitter.com/embed/Tweet.html?id=2052162536301072643"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2052162536301072643-10');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2052162536301072643&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Video is king 👑. However, I'd probably reach for the "Cover Video Link" feature, where you can have the video be your banner instead of an image.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/NJ6F0atWKpM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  DEV specific
&lt;/h2&gt;

&lt;p&gt;These are some of the custom things that DEV supports outside of third party site embeds.&lt;/p&gt;

&lt;p&gt;Article Link:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" class="crayons-story__hidden-navigation-link"&gt;Stop Reaching for Python: Strands Agents TypeScript SDK Just Hit 1.0&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/aws"&gt;
            &lt;img alt="AWS logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" class="crayons-logo__image" width="320" height="320"&gt;
          &lt;/a&gt;

          &lt;a href="/erikch" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1994%2F0j84YwMs.jpeg" alt="erikch profile" class="crayons-avatar__image" width="208" height="208"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/erikch" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Erik Hanchett
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Erik Hanchett
                
              
              &lt;div id="story-author-preview-content-3610948" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/erikch" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1994%2F0j84YwMs.jpeg" class="crayons-avatar__image" alt="" width="208" height="208"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Erik Hanchett&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/aws" class="crayons-story__secondary fw-medium"&gt;AWS&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 4&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" id="article-link-3610948"&gt;
          Stop Reaching for Python: Strands Agents TypeScript SDK Just Hit 1.0
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;18&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;User Profile:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__735825"&gt;
    &lt;a href="/brooke_jamieson" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F735825%2F6ede452c-440e-4a66-af2f-7ef5ab91eaa2.jpeg" alt="brooke_jamieson image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/brooke_jamieson"&gt;Brooke Jamieson&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/brooke_jamieson"&gt;🌥️ I’ll teach you tech tips in bite sized videos
📣 Keynote Speaker
👩🏻‍💻 AI/ML Specialist
💼 AWS Sr Developer Advocate (views are my own)
🇦🇺AU ➡️ NYC🗽&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Tag Profile:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__tag ltag__tag__id__397"&gt;
    &lt;div class="ltag__tag__content"&gt;
      &lt;h2&gt;#&lt;a href="https://dev.to/t/aws" class="ltag__tag__link"&gt;aws&lt;/a&gt; Follow
&lt;/h2&gt;
      &lt;div class="ltag__tag__summary"&gt;
        Amazon Web Services (AWS) is a collection of web services for computing, storage, machine learning, security, and more

There are over 200+ AWS services as of 2023.
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Comment:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__comment crayons-card my-2 p-0 overflow-hidden"&gt;
    &lt;a href="https://dev.to/aws/what-even-is-ai-i-took-a-break-had-to-relearn-everything-3dpj" class="flex items-center gap-2 p-3 fs-s color-base-60 hover:color-base-90"&gt;
      

      &lt;span&gt;Comment on &lt;strong class="fw-medium color-base-90"&gt;What Even Is AI? (I Took a Break &amp;amp; Had to Relearn Everything)&lt;/strong&gt;&lt;/span&gt;
    &lt;/a&gt;
  &lt;div class="p-4"&gt;
    &lt;div class="flex items-center gap-2 mb-3"&gt;
      &lt;a href="/jess" class="crayons-avatar crayons-avatar--l"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess" class="crayons-avatar__image" width="400" height="400"&gt;
      &lt;/a&gt;
      &lt;div&gt;
        &lt;a href="/jess" class="crayons-link fw-medium"&gt;Jess Lee&lt;/a&gt;
        &lt;span class="fs-xs color-base-60 ml-1"&gt;May 5&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="text-styles"&gt;
      &lt;blockquote&gt;
&lt;p&gt;I just came back from maternity leave. And honestly? I felt like I'd missed a decade in six months.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I feel this so hard.&lt;/p&gt;

&lt;p&gt;Looking forward to your series!&lt;/p&gt;


    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Podcast Episode:&lt;br&gt;
&lt;/p&gt;
&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/awsbites/120-lambda-best-practices"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;120. Lambda Best Practices&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/awsbites"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        AWS Bites
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-120-lambda-best-practices" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-120-lambda-best-practices" src="https://assets.dev.to/assets/playbutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-120-lambda-best-practices" src="https://assets.dev.to/assets/pausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-120-lambda-best-practices" alt="AWS Bites" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F674%2F056236bd-d6bf-4665-9ef1-ec6e3009420d.png"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-120-lambda-best-practices"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/awsbites/120-lambda-best-practices"&gt;
      &lt;img id="episode-profile-image" alt="120. Lambda Best Practices" width="420" height="420" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F674%2F056236bd-d6bf-4665-9ef1-ec6e3009420d.png"&gt;
      &lt;img id="animated-bars" src="https://assets.dev.to/assets/animated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://assets.dev.to/assets/playbutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://assets.dev.to/assets/pausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://assets.dev.to/assets/volume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://assets.dev.to/assets/volume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Organization:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Well, this one is not a website, but it's useful when you want to add some CTA at the end of a blog.&lt;/p&gt;

&lt;p&gt;Buttons:&lt;br&gt;
&lt;a href="https://x.com/AWSDevelopers" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;View @AWSDevelopers on X/Twitter 💻&lt;/a&gt;
&lt;br&gt;
—&lt;br&gt;
&lt;a href="https://builder.aws.com/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Visit AWS Builder Center&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;Let me know what your favorite embed is or if I'm missing any amazing ones in the comments. &lt;/p&gt;

&lt;p&gt;Happy coding 👨‍💻!&lt;/p&gt;

</description>
      <category>devto</category>
      <category>todayilearned</category>
      <category>howtodev</category>
    </item>
    <item>
      <title>{% embed https://dev.to/hacksore %}</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 07 May 2026 02:18:21 +0000</pubDate>
      <link>https://forem.com/hacksore/-embed-httpsdevtohacksore--ho1</link>
      <guid>https://forem.com/hacksore/-embed-httpsdevtohacksore--ho1</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://dev.to/hacksore" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3otvb2z646ytpt1hl2rv.jpg" height="400" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://dev.to/hacksore" rel="noopener noreferrer" class="c-link"&gt;
            Sean Boult - DEV Community
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Developer. Hacker. Creator.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png" width="300" height="299"&gt;
          dev.to
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>automation</category>
      <category>github</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>1Password, GitHub, and Git CLI with Multiple Users</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 01 May 2026 23:03:23 +0000</pubDate>
      <link>https://forem.com/hacksore/1password-github-and-git-cli-with-multiple-users-a0j</link>
      <guid>https://forem.com/hacksore/1password-github-and-git-cli-with-multiple-users-a0j</guid>
      <description>&lt;p&gt;Do you use the &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git&lt;/a&gt;, &lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;github&lt;/a&gt;, and &lt;a href="https://developer.1password.com/docs/cli/" rel="noopener noreferrer"&gt;1password&lt;/a&gt; CLI? I do!&lt;/p&gt;

&lt;p&gt;I want to be able to act as different users in certain directories to support my personal projects (&lt;code&gt;~/code&lt;/code&gt;) and my work projects (&lt;code&gt;~/oss&lt;/code&gt;) automatically, because, you know, developers automate everything.&lt;/p&gt;

&lt;p&gt;This means I want to be able to run &lt;code&gt;gh&lt;/code&gt; commands as the correct user, as well as have &lt;code&gt;git&lt;/code&gt; commands pick the correct SSH key.&lt;/p&gt;

&lt;p&gt;If you want to have a single dotfiles repo for both work and personal development, this should give you something to follow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ If you use a single GitHub account for everything, this article might not be very helpful for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Tools you’ll need to make all this work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.1password.com/docs/cli/" rel="noopener noreferrer"&gt;1Password CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/install" rel="noopener noreferrer"&gt;Git CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll also want to designate some folders to hold projects. This guide will use the following structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~/code&lt;/code&gt; - where I do personal development on my personal machine&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~/oss&lt;/code&gt; - where I do all my work open source code (repros, demos, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1) Set a global default (personal)
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;~/.gitconfig&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[user]&lt;/span&gt;
    &lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;Sean Boult&lt;/span&gt;
    &lt;span class="py"&gt;email&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;996134+Hacksore@users.noreply.github.com&lt;/span&gt;

&lt;span class="nn"&gt;[includeIf "gitdir:~/oss/"]&lt;/span&gt;
    &lt;span class="py"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;~/.gitconfig-work&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we’ve added the default user in the &lt;code&gt;[user]&lt;/code&gt; block and added an &lt;code&gt;includeIf&lt;/code&gt; (&lt;a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-includeIfconditionpath" rel="noopener noreferrer"&gt;docs&lt;/a&gt;) block that specifies that inside &lt;code&gt;~/oss&lt;/code&gt; we’ll make sure to load the config options in &lt;code&gt;~/.gitconfig-work&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Given that you need to be “inside a git directory” based on the &lt;code&gt;gitdir&lt;/code&gt; clause, it means that &lt;code&gt;~/oss&lt;/code&gt; should be a valid Git directory.&lt;/p&gt;

&lt;p&gt;To do that, run this in &lt;code&gt;~/oss&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# make ~/oss a valid git repo&lt;/span&gt;
git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will also want to create a &lt;code&gt;.gitignore&lt;/code&gt; file to not track anything in this directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ~/oss/.gitignore&lt;/span&gt;
&lt;span class="c"&gt;# Sentinel repo: exists only so includeIf matches when cwd is ~/oss&lt;/span&gt;
&lt;span class="c"&gt;# Ignore all subdirs (they're separate repos)&lt;/span&gt;
&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2) Put work identity in a separate config
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;~/.gitconfig-work&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;user]
    name &lt;span class="o"&gt;=&lt;/span&gt; Sean Boult
    email &lt;span class="o"&gt;=&lt;/span&gt; &amp;lt;yourWorkEmail&amp;gt; &lt;span class="c"&gt;# replace this with your email&lt;/span&gt;
    &lt;span class="c"&gt;# optional ssh key signing&lt;/span&gt;
    &lt;span class="c"&gt;# signingkey = ~/.ssh/id_rsa.pub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) Make SSH key selection automatic
&lt;/h3&gt;

&lt;p&gt;Now configure SSH so Git will pick the right key based on the repo you are in.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;~/.ssh/config&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Github and we default personal&lt;/span&gt;
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa.personal
    IdentitiesOnly &lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in &lt;code&gt;~/.gitconfig-work&lt;/code&gt;, add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;core]
    sshCommand &lt;span class="o"&gt;=&lt;/span&gt; ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_rsa &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;IdentitiesOnly&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any repo elsewhere uses your personal Git identity and personal SSH key.&lt;/li&gt;
&lt;li&gt;Any repo under &lt;code&gt;~/oss&lt;/code&gt; uses your work Git identity and work SSH key.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1Password CLI Plugin
&lt;/h2&gt;

&lt;p&gt;The next step is to allow the &lt;code&gt;gh&lt;/code&gt; CLI to know what directory you’re in and use the right GitHub PAT (personal access token).&lt;/p&gt;

&lt;p&gt;To put it simply, I have two PATs in my 1Password vault: &lt;code&gt;gh-pat-cli&lt;/code&gt; (personal) and &lt;code&gt;gh-pat-cli-sboult&lt;/code&gt; (work/oss). In the &lt;code&gt;op&lt;/code&gt; setup, instruct 1Password to use the &lt;code&gt;gh-pat-cli-sboult&lt;/code&gt; PAT so that when you’re in &lt;code&gt;~/oss&lt;/code&gt;, it uses the correct PAT to authenticate with the GitHub CLI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijf02e26r6nvqaxt18q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijf02e26r6nvqaxt18q1.png" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.1password.com/docs/cli/shell-plugins/github/" rel="noopener noreferrer"&gt;Use 1Password to securely authenticate the GitHub CLI&lt;/a&gt; is a helpful doc if you get stuck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work repos (&lt;code&gt;~/oss&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/oss

git clone git@github.com:awslabs/mcp.git
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="c"&gt;# gh repo clone awslabs/mcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the repo is under &lt;code&gt;~/oss/&lt;/code&gt;, Git uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your work &lt;code&gt;user.name&lt;/code&gt; / &lt;code&gt;user.email&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;your work SSH key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then normal commands work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
git push

gh &lt;span class="nb"&gt;pr &lt;/span&gt;list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Personal repos
&lt;/h2&gt;

&lt;p&gt;Outside of &lt;code&gt;~/oss&lt;/code&gt;, everything uses your default (personal) identity.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:Hacksore/test.git
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="c"&gt;# gh repo clone test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;That’s it! You should now be able to reproduce the setup I have.&lt;/p&gt;

&lt;p&gt;Happy coding 😊!&lt;/p&gt;

</description>
      <category>github</category>
      <category>cli</category>
      <category>1password</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Hide regions and services in the AWS console</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Wed, 15 Apr 2026 21:26:43 +0000</pubDate>
      <link>https://forem.com/aws/hide-regions-and-services-in-the-aws-console-1m09</link>
      <guid>https://forem.com/aws/hide-regions-and-services-in-the-aws-console-1m09</guid>
      <description>&lt;p&gt;Tired of scrolling through regions and services you'll never use?&lt;/p&gt;

&lt;p&gt;You just want to...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbswyi3rgrkoso9ep0f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbswyi3rgrkoso9ep0f6.png" alt=" " width="576" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS now lets you hide regions and services from your console. Here's how.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; This is a visual preference, not a security control. Users can still access hidden regions and services directly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Hide Regions
&lt;/h2&gt;

&lt;p&gt;That region dropdown doesn't need to show every region AWS offers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3lv5j0ibchnon2gu8rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3lv5j0ibchnon2gu8rp.png" alt=" " width="800" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://us-east-1.console.aws.amazon.com/settings/home?region=us-east-1" rel="noopener noreferrer"&gt;Unified Settings → Account settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;Visible Regions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Deselect the regions you don't use. Keep the ones where you actually run workloads.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvggpjvfsdnaskk1nscm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvggpjvfsdnaskk1nscm.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Done. Your region dropdown now only shows what matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hide Services
&lt;/h2&gt;

&lt;p&gt;Same place, different setting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://us-east-1.console.aws.amazon.com/settings/home?region=us-east-1" rel="noopener noreferrer"&gt;Unified Settings → Account settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;Visible Services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Deselect the services you don't need. I'd recommend keeping &lt;strong&gt;Billing&lt;/strong&gt; so you can still manage costs.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85ge6syjpmn6z9twyh2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85ge6syjpmn6z9twyh2u.png" alt=" " width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens When You Access Something Hidden?
&lt;/h2&gt;

&lt;p&gt;You'll see a page like this if you navigate to a hidden region/service directly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8os34ulrswigxdakdb9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8os34ulrswigxdakdb9t.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And some parts of the console will show a restricted indicator:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r765sixs8odrrkl0yfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r765sixs8odrrkl0yfz.png" alt=" " width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, nothing is actually blocked. It's just hidden from the default navigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/customize-your-aws-management-console-experience-with-visual-settings-including-account-color-region-and-service-visibility/" rel="noopener noreferrer"&gt;AWS Blog: Customize your console experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/03/account-customizations-console/" rel="noopener noreferrer"&gt;What's New: Account customizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/visible-regions-services.html" rel="noopener noreferrer"&gt;Docs: Visible regions and services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>Reading a blog post about blog posts is so meta 😂</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 09 Apr 2026 12:26:43 +0000</pubDate>
      <link>https://forem.com/hacksore/reading-a-blog-post-about-blog-posts-is-so-meta-16g7</link>
      <guid>https://forem.com/hacksore/reading-a-blog-post-about-blog-posts-is-so-meta-16g7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-story__hidden-navigation-link"&gt;Top 7 Featured DEV Posts of the Week&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Beaver-powered databases and ancient AI&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image" width="800" height="800"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3461619" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" id="article-link-3461619"&gt;
          Top 7 Featured DEV Posts of the Week
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/top7"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;top7&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;80&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              20&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 22 Mar 2026 16:52:56 +0000</pubDate>
      <link>https://forem.com/hacksore/-25il</link>
      <guid>https://forem.com/hacksore/-25il</guid>
      <description></description>
    </item>
    <item>
      <title>Every AWS S3 Compatible API Provider EVER</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 22 Mar 2026 16:46:29 +0000</pubDate>
      <link>https://forem.com/aws/every-aws-s3-compatible-api-provider-ever-6fc</link>
      <guid>https://forem.com/aws/every-aws-s3-compatible-api-provider-ever-6fc</guid>
      <description>&lt;p&gt;You've probably heard of &lt;a href="https://aws.amazon.com/pm/serv-s3" rel="noopener noreferrer"&gt;AWS Simple Storage Service (Amazon S3)&lt;/a&gt;, which allows you to store objects in buckets.&lt;/p&gt;

&lt;p&gt;The AWS S3 API was the original blob storage interface, and many storage providers and technology companies have reverse-engineered or emulated it to ensure compatibility.&lt;/p&gt;

&lt;p&gt;Some notable examples include services like Cloudflare R2 and Backblaze B2, but there are countless others, as you'll see below.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;S3-Compatible Offering&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;Amazon S3&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.cloudflare.com/r2/" rel="noopener noreferrer"&gt;R2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backblaze&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.backblaze.com/cloud-storage" rel="noopener noreferrer"&gt;B2 Cloud Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wasabi&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wasabi.com/cloud-object-storage" rel="noopener noreferrer"&gt;Hot Cloud Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.digitalocean.com/products/spaces" rel="noopener noreferrer"&gt;Spaces&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cloud.google.com/storage" rel="noopener noreferrer"&gt;Cloud Storage (XML API)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IBM Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.ibm.com/products/cloud-object-storage" rel="noopener noreferrer"&gt;Cloud Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.oracle.com/cloud/storage/object-storage/" rel="noopener noreferrer"&gt;OCI Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Akamai&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.akamai.com/products/object-storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nebius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://nebius.com/services/storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alibaba Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.alibabacloud.com/en/product/object-storage-service?_p_lc=1" rel="noopener noreferrer"&gt;Object Storage Service (OSS)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tencent Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.tencentcloud.com/products/cos" rel="noopener noreferrer"&gt;Cloud Object Storage (COS)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Huawei Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.huaweicloud.com/intl/en-us/product/obs.html" rel="noopener noreferrer"&gt;Object Storage Service (OBS)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vultr&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.vultr.com/products/cloud-storage/object-storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaleway&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.scaleway.com/en/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hetzner&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.hetzner.com/storage/object-storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OVHcloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://us.ovhcloud.com/public-cloud/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UpCloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://upcloud.com/global/products/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contabo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://contabo.com/en-us/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exoscale&lt;/td&gt;
&lt;td&gt;&lt;a href="https://community.exoscale.com/product/storage/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seagate&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.seagate.com/cloud/object-storage/" rel="noopener noreferrer"&gt;Lyve Cloud Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDrive&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.idrive.com/s3-storage-e2/s3-storage" rel="noopener noreferrer"&gt;e2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoreWeave&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.coreweave.com/products/storage#object-storage" rel="noopener noreferrer"&gt;AI Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gcore&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gcore.com/storage" rel="noopener noreferrer"&gt;Gcore Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Synology&lt;/td&gt;
&lt;td&gt;&lt;a href="https://c2.synology.com/en-us/object-storage/overview" rel="noopener noreferrer"&gt;C2 Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEGA&lt;/td&gt;
&lt;td&gt;&lt;a href="https://mega.io/objectstorage" rel="noopener noreferrer"&gt;S4 Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storj&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.storj.io/cloud-object-storage" rel="noopener noreferrer"&gt;Cloud Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This list is certainly not exhaustive, as there are more services I haven't discovered in my research.&lt;/p&gt;

&lt;p&gt;If I missed any, leave me a comment so I can update the list! Also, don’t be shy and tell me which ones are your favorite to use.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>s3</category>
    </item>
    <item>
      <title>anyone shipping anything on Sunday?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 08 Mar 2026 21:01:16 +0000</pubDate>
      <link>https://forem.com/hacksore/anyone-shipping-anything-on-sunday-36p</link>
      <guid>https://forem.com/hacksore/anyone-shipping-anything-on-sunday-36p</guid>
      <description></description>
    </item>
    <item>
      <title>Neovim Matching Your System Theme 🌚🌞</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Mon, 23 Feb 2026 18:00:00 +0000</pubDate>
      <link>https://forem.com/hacksore/neovim-matching-your-system-theme-ekg</link>
      <guid>https://forem.com/hacksore/neovim-matching-your-system-theme-ekg</guid>
      <description>&lt;p&gt;In this post I'll show you how to get your theme in Neovim to match your system theme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz2vgyzatwgmsfrc90e4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz2vgyzatwgmsfrc90e4.gif" alt=" " width="720" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First you want to install &lt;a href="https://github.com/cormacrelf/dark-notify/issues" rel="noopener noreferrer"&gt;dark-notify&lt;/a&gt;, here is how you'd do that with Homebrew.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install cormacrelf/tap/dark-notify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you can setup the Neovim lazy companion plugin which will watch for changes via the &lt;code&gt;dark-notify&lt;/code&gt; CLI.&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;lightTheme&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;darkTheme&amp;gt;&lt;/code&gt; with your preferred colorschemes (like "catppuccin-latte" and "catppuccin-mocha").&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;---@module "lazy"&lt;/span&gt;
&lt;span class="c1"&gt;---@type LazySpec&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"cormacrelf/dark-notify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"dark_notify"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="n"&gt;schemes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;light&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;colorscheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;lightTheme&amp;gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="n"&gt;dark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;colorscheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;darkTheme&amp;gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you should be able to switch your system theme and it will automagically update your Neovim theme.&lt;/p&gt;

&lt;p&gt;You can take a look at &lt;a href="https://github.com/Hacksore/dotfiles/blob/master/.config/nvim/lua/hacksore/plugins/dark-notify.lua" rel="noopener noreferrer"&gt;my Dotfiles&lt;/a&gt; and how I've configured it. If this article helped you out feel free to follow me for more tips and tricks.&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>lua</category>
    </item>
    <item>
      <title>Safari &amp; Firefox extensions still break &lt;pre&gt;/&lt;code&gt; blocks after page load</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 02 Jan 2026 19:35:11 +0000</pubDate>
      <link>https://forem.com/hacksore/safari-firefox-extensions-still-break-blocks-after-page-load-484a</link>
      <guid>https://forem.com/hacksore/safari-firefox-extensions-still-break-blocks-after-page-load-484a</guid>
      <description></description>
      <category>discuss</category>
      <category>frontend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>1Password Breaks Syntax Highlighting On The Internet</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 02 Jan 2026 18:30:00 +0000</pubDate>
      <link>https://forem.com/hacksore/1password-breaks-syntax-highlighting-on-the-internet-18j6</link>
      <guid>https://forem.com/hacksore/1password-breaks-syntax-highlighting-on-the-internet-18j6</guid>
      <description>&lt;p&gt;&lt;strong&gt;READ FIRST: &lt;a href="https://www.1password.community/discussions/developers/1password-chrome-extension-is-incorrectly-manipulating--blocks/165639/replies/165982" rel="noopener noreferrer"&gt;It has been patched, and the latest official update from the 1Password team&lt;br&gt;
&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Starting sometime in early December of 2025, a change was rolled out to the 1Password browser extension that began injecting &lt;a href="https://prismjs.com/" rel="noopener noreferrer"&gt;prism.js&lt;/a&gt; onto every site and targeting every &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; block it encountered.&lt;/p&gt;

&lt;p&gt;The original discovery was made by &lt;a class="mentioned-user" href="https://dev.to/saltyaom"&gt;@saltyaom&lt;/a&gt; and shared on Twitter to their disbelief.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2005701290870087817-57" src="https://platform.twitter.com/embed/Tweet.html?id=2005701290870087817"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2005701290870087817-57');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2005701290870087817&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;The moment it hit my radar was when &lt;a class="mentioned-user" href="https://dev.to/yyx990803"&gt;@yyx990803&lt;/a&gt; retweeted it, amplifying it to a much larger audience.&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-2005904473332564339-181" src="https://platform.twitter.com/embed/Tweet.html?id=2005904473332564339"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2005904473332564339-181');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2005904473332564339&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;1Password has several forum posts on this topic showing that this bug was introduced to all production users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.1password.community/discussions/developers/re-1password-chrome-extension-is-incorrectly-manipulating--blocks/165329" rel="noopener noreferrer"&gt;Re: 1Password Chrome extension is incorrectly manipulating &lt;code&gt; blocks
&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.1password.community/discussions/developers/safari--firefox-extensions-still-break--blocks-after-page-load/166020" rel="noopener noreferrer"&gt;Safari &amp;amp; Firefox extensions still break &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; blocks after page load&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.1password.community/discussions/developers/1password-chrome-extension-is-incorrectly-manipulating--blocks/165639" rel="noopener noreferrer"&gt;1Password Chrome extension is incorrectly manipulating &lt;code&gt; blocks
&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest question I had was: why are they even injecting Prism.js in the first place?&lt;/p&gt;

&lt;p&gt;It turns out this is for a new &lt;a href="https://1password.com/blog/product-update-features-and-security-q3-2024" rel="noopener noreferrer"&gt;Labs Snippets feature&lt;/a&gt; that allows you to paste snippets from the browser extension. One of the most interesting parts is that it has nothing to do with programming in general and is instead meant for rich text formatting.&lt;/p&gt;

&lt;p&gt;Prism.js was targeting every &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; block on any site, ultimately stripping the correct syntax highlighting theme.&lt;/p&gt;

&lt;p&gt;The snippets feature itself is actually pretty neat. In this example, it replaces what I type — &lt;code&gt;"sig"&lt;/code&gt; — with &lt;strong&gt;console.log(67)&lt;/strong&gt;. It’s not clear to me why this requires highlighting &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; blocks on websites, though, since this feature behaves more like &lt;a href="https://textexpander.com" rel="noopener noreferrer"&gt;TextExpander&lt;/a&gt; or &lt;a href="https://support.apple.com/guide/mac-help/replace-text-punctuation-documents-mac-mh35735/mac" rel="noopener noreferrer"&gt;macOS text replacements&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2007089632660639822-48" src="https://platform.twitter.com/embed/Tweet.html?id=2007089632660639822"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2007089632660639822-48');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2007089632660639822&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;It sucks to have a bug roll out during the holidays when people are on vacation, so I understand the delay in the fix. I’m very excited to read their postmortem to learn how this made it into production and what they plan to do to prevent this from happening again.&lt;/p&gt;

&lt;p&gt;I hope you enjoyed this read, and if you’re interested in deep dives like this, please consider following me.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>is the timeline still ai slop or no?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 30 Nov 2025 00:01:04 +0000</pubDate>
      <link>https://forem.com/hacksore/is-the-timeline-still-ai-slop-or-no-2215</link>
      <guid>https://forem.com/hacksore/is-the-timeline-still-ai-slop-or-no-2215</guid>
      <description></description>
    </item>
  </channel>
</rss>
