<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Micah Parks on Medium]]></title>
        <description><![CDATA[Stories by Micah Parks on Medium]]></description>
        <link>https://medium.com/@micahparks?source=rss-8a001669197f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*ItunJ8rgqAnARyWgSjX2yQ.jpeg</url>
            <title>Stories by Micah Parks on Medium</title>
            <link>https://medium.com/@micahparks?source=rss-8a001669197f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 24 Jun 2026 04:35:01 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@micahparks/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Convert PEM keys to JWK and back]]></title>
            <link>https://micahparks.medium.com/convert-pem-to-jwk-and-back-8b422779b922?source=rss-8a001669197f------2</link>
            <guid isPermaLink="false">https://medium.com/p/8b422779b922</guid>
            <category><![CDATA[json-web-key]]></category>
            <category><![CDATA[pem]]></category>
            <category><![CDATA[jwks]]></category>
            <category><![CDATA[x509]]></category>
            <dc:creator><![CDATA[Micah Parks]]></dc:creator>
            <pubDate>Wed, 13 Dec 2023 00:07:44 GMT</pubDate>
            <atom:updated>2025-04-16T14:57:53.556Z</atom:updated>
            <cc:license>https://creativecommons.org/publicdomain/mark/1.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VJBf6OgiUTggLubFmr7Lfw.png" /><figcaption>Generated by DALLE 3</figcaption></figure><p>PEM encoding is a commonly used format to store and transmit cryptographic keys. Typically these keys are PEM encoded as ASN.1 DER data for SEC 1, PKCS #1, PKCS #8, PKIX, or X.509 certificates.</p><p>JSON Web Keys (JWK) are another popular way to represent cryptographic keys and metadata. Notably, OAuth 2.0 and OpenID connect use JWK Sets to communicate cryptographic keys for authentication and authorization.</p><p>I have updated my <a href="https://github.com/MicahParks/jwkset">JWK Set Golang GitHub project</a> to include an <a href="https://github.com/MicahParks/jwkset/tree/master/website">open-source website</a> to convert between these formats. You can find this website deployed to jwkset.com, linked below.</p><p>The website and project aim to be the most complete implementation of a JWK Set possible using the Golang standard library.</p><p><a href="https://jwkset.com">Home - JWK Set</a></p><p>The JWK generator accepts PEM encoded assets, including certificates. It can also create new keys from the selected options.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-L5JHguslT8IJtnq3togCw.png" /><figcaption>Screenshot of jwkset.com/generate</figcaption></figure><p>The JWK inspector validates and extracts the key material to PKIX (public key) and PKCS #8 (private key) formats.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S1yxEp6t3Y-GQKK0V49ElQ.png" /><figcaption>Screenshot of jwkset.com/inspect</figcaption></figure><p>If you are working with private key material, self-host this website with the below <a href="https://docs.docker.com/engine/install/">Docker</a> command. Then visit http://localhost:8080</p><pre>docker run --rm -p 8080:8080 micahparks/jwksetcom</pre><p>Alternatively, use the jwkset CLI tool to convert between PEM and JWK. Install it with the <a href="https://go.dev/doc/install">Golang toolchain</a>:</p><pre>go install github.com/MicahParks/jwkset/cmd/jwkset@latest</pre><p>Use the CLI tool to turn PEM encoded assets into a JWK Set:</p><pre>jwkset mykey.pem mycert.crt</pre><p>I hope these tools have helped you convert between PEM encoded keys and JSON Web Keys. If you have other JWK Set needs, be sure to check out the <a href="https://github.com/MicahParks/jwkset">GitHub project</a> for a JWK Set client and <a href="https://github.com/MicahParks/jwkset?tab=readme-ov-file#related-projects">related projects</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8b422779b922" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Get a Free Bluesky Invite Code Today]]></title>
            <link>https://micahparks.medium.com/how-to-get-a-free-bluesky-invite-code-today-4aba2e12bd7d?source=rss-8a001669197f------2</link>
            <guid isPermaLink="false">https://medium.com/p/4aba2e12bd7d</guid>
            <category><![CDATA[social-media]]></category>
            <category><![CDATA[blue-sky]]></category>
            <category><![CDATA[jack-dorsey]]></category>
            <category><![CDATA[bluesky-social]]></category>
            <category><![CDATA[twitter]]></category>
            <dc:creator><![CDATA[Micah Parks]]></dc:creator>
            <pubDate>Tue, 14 Nov 2023 22:31:59 GMT</pubDate>
            <atom:updated>2024-02-07T23:16:20.854Z</atom:updated>
            <cc:license>http://creativecommons.org/publicdomain/zero/1.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Rwq6hP2t-kFhELz1oVwZyA.png" /><figcaption>Generated by DALLE 3</figcaption></figure><p>Edit:</p><p>Bluesky has removed the waitlist. Anyone can sign up now.</p><p><a href="https://bsky.app/profile/bsky.app/post/3kktuiwidw22d">Bluesky (@bsky.app)</a></p><p>Bluesky’s waitlist is broken, but you shouldn’t pay for a invite code!</p><p>Table of Contents:</p><ul><li>Introduction and hustlers/scammers</li><li>Where to find free Bluesky invite codes</li><li>Conclusion</li></ul><h3>Introduction and hustlers/scammers</h3><p>Elon Musk’s X (Twitter) is in decline, yet no competitor has emerged victorious in capturing its fleeing user base. The competitors with the widest name recognition appear to be Instagram Threads, Mastodon, and Bluesky.</p><p>Bluesky is particularly interesting because it started as a project internal to Twitter, but became an independent entity this year. Contrary to other popular social media platforms, new user sign-up is restricted to a seemingly never-ending waitlist and invite codes from existing users.</p><p>The Bluesky waitlist is opaque, meaning once you sign up for the waitlist, you get no information about when you will get off the waitlist. Most people on the waitlist, including myself, complain about being on the waitlist for upwards of six months with no end in sight. Existing users get to invite one new user per week with an invite code.</p><p>This makes Bluesky invite codes a relatively scarce resource that hustlers and scammers are capitalizing on. A prime example of this is the subreddit called <a href="https://www.reddit.com/r/blueskyinvites/">r/blueskyinvites</a>. <strong>Do not bother with this subreddit.</strong> There’s no real guarantee that you will receive an invite code.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*ROJ3SFXMEP6XIJi7J5F2Gw.png" /><figcaption>A hustler/scammer subreddit for Bluesky invite codes</figcaption></figure><p>This subreddit is primarily focused on making you pay directly for an invite code or redirecting you off-platform to pay for access to a Discord server.</p><p>Unfortunately, the person running this operation has excellent SEO. The next result on Google for “Bluesky invite code” is this same hustler/scammer community <a href="https://medium.com/@felixjosemon/looking-for-twitter-bluesky-invite-codes-pay-it-forward-bluesky-community-could-help-you-3e6e1d44ffd8">here on Medium</a>. <strong>Do not bother paying to join </strong>a “community” of people “paying it forward”. People in this community are paying a hustler to join Bluesky or simply getting ripped off by a scammer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/589/1*bcPWPhAP4NQeQcMySN4hoA.png" /><figcaption>“Pay it forward” hustler/scammer product for Bluesky invite codes</figcaption></figure><h3>Where to find free Bluesky invite codes</h3><p>The first place to start is with the official waitlist or your personal network of friends that may already be on Bluesky. If you don’t like those options, here are some ways to get a Bluesky invite code for free today:</p><ul><li>Mastodon’s <a href="https://mastodon.social/tags/bluesky">#bluesky</a> and <a href="https://mastodon.social/tags/blueskyinvite">#blueskyinvite</a> tags</li><li><a href="https://www.reddit.com/r/BlueskySocial/comments/17nvlxy/invite_code_megathread_4/">r/BlueskySocial</a> via megathread comments and DMs</li></ul><p>I got my Bluesky invite code on <a href="https://mastodon.social/tags/bluesky">Mastodon’s #bluesky tag</a>. I saw people were politely asking for invite codes and receiving them, so I drafted the below post:</p><blockquote>I’m looking to check out #bluesky. Does anyone have an invite code they’d be willing to share with me? Thanks! 😄</blockquote><p>But I never had to post that message. I scrolled through the existing messages and people are simply posting their invite codes for free. It took less than 5 minutes after looking for free Bluesky invite codes on Mastodon. Here’s what <a href="https://masto.evelynyap.com/@evelyn/111406021343924815">my interaction</a> was like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/589/1*QHKRGGBftvuRh2iJEbz74w.png" /><figcaption>My Mastodon interaction for a free Bluesky invite code</figcaption></figure><p>If you do this too, make sure to comment with a thank you if you end up using a posted code. This will let other people know it’s taken and it is a courtesy to the person posting it.</p><p>The subreddit <a href="https://www.reddit.com/r/BlueskySocial/comments/17nvlxy/invite_code_megathread_4/">r/BlueskySocial</a> is also an option. There is a megathread about giving invite codes away for free. It looks like this happens primarily through the comments and DMs. You can find the <a href="https://www.reddit.com/r/BlueskySocial/comments/17nvlxy/invite_code_megathread_4/">latest megathread here</a>. It is against the rules of this megathread to to sell invite codes.</p><p>After you have an invite code, head over to <a href="https://bsky.app/">https://bsky.app/</a> to sign up. It didn’t take me long to find a free Bluesky invite code. With this guide, I hope it takes less than 10 minutes for you.</p><h3>Conclusion</h3><p>The exclusive nature of Bluesky invite codes makes them seem enticing, but don’t pay a hustler/scammer for a code that may or may not work. In my opinion, the Bluesky experience isn’t currently worth the time it takes to sign up for an account. Paying money to join will likely lead to disappointment in multiple ways.</p><p>That being said, I’ll drop my own Bluesky invite codes in the comments as I get them. That is, until I get bored with it 😄</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4aba2e12bd7d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlimited Email Addresses for Your Domain: AWS SES and Registrar Forwarding]]></title>
            <link>https://micahparks.medium.com/unlimited-email-addresses-for-your-domain-aws-ses-and-registrar-forwarding-43dbc15b422c?source=rss-8a001669197f------2</link>
            <guid isPermaLink="false">https://medium.com/p/43dbc15b422c</guid>
            <category><![CDATA[email-productivity]]></category>
            <category><![CDATA[email]]></category>
            <category><![CDATA[open-source]]></category>
            <dc:creator><![CDATA[Micah Parks]]></dc:creator>
            <pubDate>Tue, 07 Nov 2023 04:09:38 GMT</pubDate>
            <atom:updated>2023-11-07T14:14:35.018Z</atom:updated>
            <cc:license>http://creativecommons.org/publicdomain/zero/1.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZWeypZOAOKQENMeqNgbZ9Q.png" /><figcaption>Generated by DALLE 3</figcaption></figure><p>A cheapskate’s guide to obtaining unlimited incoming and outgoing email addresses for a domain you own.</p><h4>Requirements</h4><p>In order to have unlimited incoming email addresses you will need:</p><ul><li>A domain registrar with catch-all forwarding (Ex: <a href="https://namecheap.com">NameCheap</a>)</li></ul><p>In order to have unlimited outgoing email addresses you will need:</p><ul><li>Edit access to your domain’s DNS records</li><li>An AWS account</li><li>Ability to use git</li><li>Ability to use Docker Compose</li></ul><p>This guide is split into three parts:</p><ol><li>Introduction</li><li>Unlimited incoming</li><li>Unlimited outgoing</li></ol><h3>Introduction</h3><p>I have personal and business domains. For professionalism, I prefer to send and receive business emails from an address linked to the business’ domain. On the personal side, it’s nice to shield my Gmail account when dealing with untrustworthy sources. For example, under Florida law, <a href="https://www.flsenate.gov/Laws/Statutes/2011/668.6076">email addresses are public record</a>. Scammers use these public records to make email lists. When interacting with the state government, I use a unique Florida-specific email from my personal domain to track the source of incoming messages. Typically, emails sent to this address are spam, making them easy to filter out.</p><p>I’ve been using the solution described in this guide to achieve unlimited incoming and outgoing email address for about a year. Other than domain registration fees, I have yet to be charged even a penny. After my AWS free tier has expired, I anticipate the bill being $0.10 per month. This guide’s solution is aimed at achieving these goals for an individual extremely cheaply without the need to host a mail server.</p><p>Before continuing with this guide, please know that high quality services like <a href="https://workspace.google.com/">Google Workspace</a> or <a href="https://aws.amazon.com/workmail/">AWS Workmail</a> can solve this, but these solutions can be pricey and typically charge per email address.</p><p>Another route is to self-host an email server. Even for the technically minded, this nightmare consists of high maintenance costs and email deliverability issues.</p><p>This guide’s solution is to use domain registrar email forwarding for incoming emails. For outgoing emails there is an open source AWS SES client web interface that can be run from a personal computer.</p><p>AWS SES is Amazon Web Service’s Simple Email Service. It’s one of the cheapest, if not the cheapest, programmatic email sending services. At the time of writing this guide, it is 10 cents to send 1,000 emails. AWS SES removes the need to maintain an email server and worry about deliverability problems.</p><h3>Unlimited incoming</h3><p>If you own a domain, it’s relatively simple to forward all incoming email to a single email address using a catch-all. The email address can be any address, I use my personal Gmail.</p><p>Here’s how to enable a catch-all email for a domain hosted on <a href="https://namecheap.com">NameCheap</a>:</p><p>Log into <a href="https://namecheap.com">NameCheap</a> and navigate to the <em>Domain List </em>page. Click to manage the domain. This will redirect you to the <em>Domain Details</em> page. On this page, reference the below screenshot to find the button to add a catch-all address. This screenshot has the ADD CATCH-ALL button grayed out because there is already a row containing a catch-all.</p><figure><img alt="NameCheap’s domain details page with an arrow pointing to the button that adds a catch-all email address." src="https://cdn-images-1.medium.com/max/1024/1*UGjUjVNhJPvQ5AA7TYPtMQ.png" /></figure><p>Now, any email sent to any address at this domain will be automatically redirected to example@gmail.com. For example, any email sent to john.doe@example.com or jane.doe@example.com will end up in the inbox of example@gmail.com.</p><p>This does not allow emails to be sent <em>from</em> any address at this domain, yet. In order to set that up, continue on with this guide.</p><h3>Unlimited outgoing</h3><h4>Set up AWS SES</h4><p>You must have an AWS account with SES enabled to use the method described in this guide. Instructions for setting this up may change over time. So in order to future-proof this guide, here is a <a href="https://docs.aws.amazon.com/ses/latest/dg/setting-up.html">link to the AWS documentation’s guide</a> on this.</p><p>After SES is enabled and setup, create a verified identity for your domain. This will require editing the DNS records for your domain. The SES web interface that is about to be introduced will also work with single email addresses, provided they are verified identities.</p><figure><img alt="The AWS SES page to add a domain verified identity." src="https://cdn-images-1.medium.com/max/821/1*Bm7cHbY27GFoLdFcE9nZQQ.png" /></figure><h4>Set up the SES client web interface</h4><p>Before setting up the SES client web interface, ensure you have the latest version of Docker Compose installed. Docker Compose is now bundled with Docker, which is included in Docker Desktop.</p><p>Here are Docker Desktop installation links for:</p><ul><li><a href="https://docs.docker.com/desktop/install/mac-install/">MacOS</a></li><li><a href="https://docs.docker.com/desktop/install/windows-install/">Windows</a></li></ul><p>On Ubuntu or other Linux distributions,, I recommend the <a href="https://docs.docker.com/engine/install/ubuntu/">Docker CLI installation</a>.</p><p>After the latest version of Docker Compose is installed, it’s time to install the open source AWS SES client web interface. The project is located at <a href="https://github.com/MicahParks/aws-ses-web-ui">https://github.com/MicahParks/aws-ses-web-ui</a>. Clone the repository to your personal computer.</p><pre>git clone https://github.com/MicahParks/aws-ses-web-ui.git</pre><p>In the root directory of the project, create a new file called config.json. Edit the below JSON and write it to config.json:</p><ul><li>Replace @example.com with your domain preceded by an @ symbol.</li><li>A default address to send emails from.</li><li>Your AWS credentials.</li></ul><p>Remember your AWS credentials are highly sensitive, do not share them with anyone else.</p><pre>{<br>  &quot;aswu&quot;: {<br>    &quot;allowedFrom&quot;: [<br>      &quot;@example.com&quot;<br>    ],<br>    &quot;defaultFrom&quot;: &quot;John Doe &lt;john.doe@example.com&gt;&quot;<br>  },<br>  &quot;ses&quot;: {<br>    &quot;awsRegion&quot;: &quot;us-east-1&quot;,<br>    &quot;accessKeyID&quot;: &quot;my-access-key-id&quot;,<br>    &quot;secretKey&quot;: &quot;my-secret-key&quot;<br>  }<br>}</pre><p>After the config.json file is complete, run the docker-compose.yml file. To do this via the CLI, run the following command:</p><pre>docker compose up</pre><p>Once the containers are running, visit <a href="http://localhost:8080">http://localhost:8080</a> to be greeted with the AWS SES client web interface. Use this simple web form to send emails from any of your verified identities.</p><figure><img alt="The AWS SES client web interface email sending form." src="https://cdn-images-1.medium.com/max/993/1*qbuO-HV9awquzYgUKQD_Hw.png" /></figure><p>Further improvements to this project could include using a persistent PostgreSQL database. The Docker Compose configuration is not sufficiently persistent. The web form only supports text based emails without attachments. Adding support for HTML and attachments would also be an improvement.</p><p>Hosting this project on the public internet should only occur if there is an advantage over running the project on a personal computer. Proper encryption and authentication is essential. For a simple solution, I would recommend a TLS <a href="https://caddyserver.com/">reverse proxy</a> with basic HTTP authentication using a strong password.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=43dbc15b422c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>