<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Eon - Blog and stuff</title>
    <link>https://eon.dev/posts/</link>
    <description>Recent content in Posts on Eon - Blog and stuff</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 06 Mar 2025 08:19:23 +0000</lastBuildDate>
    <atom:link href="https://eon.dev/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Journey with AT Protocol: Part 3</title>
      <link>https://eon.dev/posts/journey-with-at-protocol-part-3/</link>
      <pubDate>Thu, 06 Mar 2025 08:19:23 +0000</pubDate>
      <guid>https://eon.dev/posts/journey-with-at-protocol-part-3/</guid>
      <description>&lt;p&gt;I am on a journey to understand the AT Protocol better by implementing it from scratch in the Elixir programming language. I have a running PDS, I&amp;rsquo;ve generated working code from the official set of Lexicons, and I can stream in repo events over a websocket connection. But that event data is a bunch of DAG-CBOR binary data, CID references, and CAR file exports! This means it is a good time to talk about &lt;a href=&#34;https://github.com/multiformats/multiformats&#34;&gt;multiformats&lt;/a&gt;, a set of protocols for self-describing values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Journey with AT Protocol: Part 2</title>
      <link>https://eon.dev/posts/journey-with-at-protocol-part-2/</link>
      <pubDate>Tue, 04 Mar 2025 06:19:13 +0000</pubDate>
      <guid>https://eon.dev/posts/journey-with-at-protocol-part-2/</guid>
      <description>&lt;p&gt;I am on a journey to understand the AT Protocol better by implementing it from scratch in the Elixir programming language. I did &lt;em&gt;not&lt;/em&gt; implement a custom PDS, however. I already discussed my project setup and the PDS in Part 1. This part will now focus on lexicons and generating usable code from them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eon.dev/my-journey-with-at-protocol/&#34;&gt;Part 1: Setup/PDS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 2: Lexicons/Event Streams (you&amp;rsquo;re here!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eon.dev/journey-with-at-protocol-part-3/&#34;&gt;Part 3: Multiformats Madness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: Public vs Private&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of the magic covered in this part is handled by the code generator, which turns Lexicon JSON files into Elixir source code. You can find the source code for it &lt;a href=&#34;https://github.com/tyler-eon/lexgen&#34;&gt;on my GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Journey with AT Protocol: Part 1</title>
      <link>https://eon.dev/posts/my-journey-with-at-protocol/</link>
      <pubDate>Mon, 03 Mar 2025 06:35:38 +0000</pubDate>
      <guid>https://eon.dev/posts/my-journey-with-at-protocol/</guid>
      <description>&lt;p&gt;I read about the &lt;a href=&#34;https://atproto.com&#34;&gt;AT Protocol&lt;/a&gt; (Authenticated Transfer Protocol), made popular by Bluesky, a couple years ago. But more recently, I decided to do a side project so I could deep dive into it. About five years ago I did a side project with Activity Pub, which I thought would potentially take over how social media platforms are built, but that didn&amp;rsquo;t quite pan out. Part of it was certainly that Mastodon just didn&amp;rsquo;t have the same brand clout as Bluesky, the latter being founded by Twitter&amp;rsquo;s ex-CEO Jake Dorsey. This means that anyone which builds upon the AT Protocol has access to the content of over 30 million registered Bluesky users (as of the time I&amp;rsquo;m writing this).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Story: What does strtolower do?</title>
      <link>https://eon.dev/posts/story-what-does-strtolower-do/</link>
      <pubDate>Thu, 10 Oct 2024 18:56:21 +0000</pubDate>
      <guid>https://eon.dev/posts/story-what-does-strtolower-do/</guid>
      <description>&lt;p&gt;Gather round everyone, it&amp;rsquo;s Story Corner Time! This story is from &lt;em&gt;way back&lt;/em&gt; to my earliest of days as a full-time software developer. I was working for Sony Online Entertainment, which later became Daybreak Games Studio. But at the time it was an online PC gaming company that Sony bought and it made and maintained games such as EverQuest 1 &amp;amp; 2, PlanetSide 1 &amp;amp; 2, Star Wars Galaxies Online, Free Realms, and more. I&amp;rsquo;ve got tons of stories from my relatively brief tenure there but today it&amp;rsquo;s just short and simple: who would win between a college-graduate computer science major and a single PHP function? Spoiler: it&amp;rsquo;s not the college grad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing the Interview Process</title>
      <link>https://eon.dev/posts/fixing-the-interview-process/</link>
      <pubDate>Tue, 23 Jul 2024 18:53:52 +0000</pubDate>
      <guid>https://eon.dev/posts/fixing-the-interview-process/</guid>
      <description>&lt;p&gt;I think most people looking for a job in 2024, especially those in the tech industry, feel like the application and the interview processes are both broken. And they are right, both of them objectively work worse than they did previously. And while the issue of fielding an avalanche-worth of applications is a little more difficult to define good all-purpose solutions for, I believe that the interview process could be made significantly better with one rather small change.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Adventure with NATS</title>
      <link>https://eon.dev/posts/my-adventure-with-nats/</link>
      <pubDate>Sun, 23 Jun 2024 07:00:25 +0000</pubDate>
      <guid>https://eon.dev/posts/my-adventure-with-nats/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://nats.io/&#34;&gt;NATS&lt;/a&gt; likes to call itself the &amp;ldquo;central nervous system of distributed computing&amp;rdquo; but really it&amp;rsquo;s just a modern take on traditional message queues such as Kafka, RabbitMQ, and so on. Still, the design principles and the configurability of NATS made it a compelling choice for a recent project I worked on. Unfortunately, the hyper-flexibility of NATS also makes it harder to implement correctly when you have little experience with it, and so if anyone else is looking to get started with NATS then I hope this helps to avoid some pitfalls.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Check Out My Portfolio</title>
      <link>https://eon.dev/posts/check-out-my-portfolio/</link>
      <pubDate>Tue, 18 Jun 2024 20:41:20 +0000</pubDate>
      <guid>https://eon.dev/posts/check-out-my-portfolio/</guid>
      <description>&lt;p&gt;A &amp;ldquo;portfolio&amp;rdquo; hasn&amp;rsquo;t been necessary nor requested for most of my career, but it feels like more and more I&amp;rsquo;m seeing places that prioritize candidates with a visible, public portfolio of work or ask explicitly for snippets of recent production code to demonstrate recent professional output.&lt;/p&gt;
&lt;p&gt;I put a lot of my time and effort into whatever job I&amp;rsquo;m performing, and so usually I don&amp;rsquo;t have a lot of work that ends up publicly visible. And since most of my work is on backend systems, I can&amp;rsquo;t even usually point to a web page or something to say &amp;ldquo;I did that&amp;rdquo;. Many times you have to sign up or otherwise interact with a service in significant ways to see the impact of my work, so it&amp;rsquo;s also not necessarily something you could experience in a short period of time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding True Microservices</title>
      <link>https://eon.dev/posts/understanding-true-microservices/</link>
      <pubDate>Mon, 18 Oct 2021 17:08:00 +0000</pubDate>
      <guid>https://eon.dev/posts/understanding-true-microservices/</guid>
      <description>&lt;p&gt;When people say “microservices” I feel like they imagine a fleet of VMs or container pods running a bunch of small and “compartmentalized” applications that communicate with each other in vast and complex manners. But honestly, that’s not what microservices is supposed to be about. Companies like Netflix certainly popularized the concept of creating the smallest possible version of an application so that you have hundreds of unique services that all talk to each other in this manner. But that’s not the core concept behind microservices. A microservices architecture, or what I’ll call &lt;em&gt;MSA&lt;/em&gt; for brevity, can be present even in a monolithic application. It’s antithesis, which I’ll reference as well, is the “single service architecture”, or &lt;em&gt;SSA&lt;/em&gt; for brevity. In the context of this post, &lt;em&gt;MSA&lt;/em&gt; good and &lt;em&gt;SSA&lt;/em&gt; bad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Backer Journey: A Kickstarter Tale</title>
      <link>https://eon.dev/posts/my-backer-journey-a-kickstarter-tale/</link>
      <pubDate>Fri, 24 Sep 2021 20:14:00 +0000</pubDate>
      <guid>https://eon.dev/posts/my-backer-journey-a-kickstarter-tale/</guid>
      <description>&lt;p&gt;I’ve recently been reflecting on the many investments I’ve made through Kickstarter over the last decade. I backed my first campaign shortly after Kickstarter had turned 1. At the time I was primarily interested in giving video game developers that had worked on previous games a chance to make sequels and spiritual successors.&lt;/p&gt;
&lt;p&gt;Since then I’ve branched out to all manner of projects, though typically still within the realm of video games or physical products. I thought it would be nice to go over my own personal journey as what Kickstarter is labeling a “Super Backer”, which kind of feels like a backhanded compliment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker and Kubernetes</title>
      <link>https://eon.dev/posts/docker-and-kubernetes/</link>
      <pubDate>Mon, 02 Mar 2020 21:53:00 +0000</pubDate>
      <guid>https://eon.dev/posts/docker-and-kubernetes/</guid>
      <description>&lt;p&gt;It’s possible to now have Docker Desktop run a single-node Kubernetes cluster, which is wonderful for anyone that needs to emulate the Kubernetes environment for their development purposes. After all, if you’re building an application that will be deployed via Kubernetes, it is helpful to have your development environment mirror your production environment when testing certain features. However, it’s not all sunshine and roses…&lt;/p&gt;
&lt;h2 id=&#34;first-docker-compose&#34;&gt;First, Docker Compose&lt;/h2&gt;
&lt;p&gt;I am a huge fan of &lt;strong&gt;Docker Compose&lt;/strong&gt;. I advocate its use whole-heartedly for local development. My career has primarily been backend development, meaning that I have to deal with at least the application and a database, sometimes a caching service. And that’s just the baseline. There are times when I’ve also needed to run elasticsearch, Kafka, and others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Stadia: Update</title>
      <link>https://eon.dev/posts/google-stadia-update/</link>
      <pubDate>Thu, 09 Jan 2020 17:39:00 +0000</pubDate>
      <guid>https://eon.dev/posts/google-stadia-update/</guid>
      <description>&lt;p&gt;&lt;em&gt;Update 2024-06-16: Google Stadia sunset after only a couple years of operation. The unfortunate part is that there were legitimately some great &amp;ldquo;first-party&amp;rdquo; games that had launched on it and I really did enjoy being able to just carry my Stadia controller to any TV or computer in the house that had a Chromecast or Chrome browser and just start playing. It was actually a wonderful experience 99% of the time, but ultimately the lack of ownership, high prices, and lack of consistency from ISPs killed it.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab Managed App: Cert Manager</title>
      <link>https://eon.dev/posts/gitlab-managed-app-cert-manager/</link>
      <pubDate>Tue, 31 Dec 2019 05:26:00 +0000</pubDate>
      <guid>https://eon.dev/posts/gitlab-managed-app-cert-manager/</guid>
      <description>&lt;p&gt;For anyone using GitLab’s Managed Apps, specifically the &lt;code&gt;cert-manager&lt;/code&gt;, be advised that you need to re-install (uninstall/install) the app if you first installed it &lt;strong&gt;prior to September 22, 2019&lt;/strong&gt;. Most people that need to have probably already done so, but my cert was active until right around Christmas, so by the time I realized my cert hadn’t renewed it was the holiday season. And, to my added frustration, the re-installation process was not smooth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Stadia Review</title>
      <link>https://eon.dev/posts/google-stadia-review/</link>
      <pubDate>Sat, 23 Nov 2019 04:33:00 +0000</pubDate>
      <guid>https://eon.dev/posts/google-stadia-review/</guid>
      <description>&lt;p&gt;I had a $150 credit on my Google Store account after my purchase of a Pixel 3 XL and there is nothing on the Google Store, beside the Pixel phones, that is really worth spending any money on. Except maybe a Chromecast. But then Google Stadia came out for pre-order, it was around $150, so I said “why not?” And I bought it.&lt;/p&gt;
&lt;p&gt;I received my order on November 21, 2019, and so far I’ve only played Destiny 2 on it, but I feel it makes for a great test game since it’s an online multiplayer game that deals in fast-paced first-person shooting. Although I don’t typically post reviews for things, I felt like posting this one because I was originally a huge proponent for &lt;strong&gt;OnLive&lt;/strong&gt;, which I consider to be the spiritual precursor to Stadia.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elixir &#43; GitLab AutoDevOps</title>
      <link>https://eon.dev/posts/elixir-gitlab-autodevops/</link>
      <pubDate>Wed, 09 Oct 2019 13:13:00 +0000</pubDate>
      <guid>https://eon.dev/posts/elixir-gitlab-autodevops/</guid>
      <description>&lt;p&gt;For those unaware of GitLab’s AutoDevOps feature, I would recommend &lt;a href=&#34;https://docs.gitlab.com/ee/topics/autodevops&#34;&gt;checking out the official documentation&lt;/a&gt;. &lt;strong&gt;TL;DR&lt;/strong&gt; GitLab is trying to make a CI/CD pipeline that’s as simple as deploying applications is with Heroku. Essentially, you “flip a switch” and any &lt;code&gt;git push&lt;/code&gt; you do to the repo runs the pipeline (assuming the branch/tag meets certain prerequisites). It’s actually a very wonderful feature… in theory. But the devil, as they say, is in the details.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Experience vs Expertise</title>
      <link>https://eon.dev/posts/experience-vs-expertise/</link>
      <pubDate>Tue, 07 May 2019 17:32:00 +0000</pubDate>
      <guid>https://eon.dev/posts/experience-vs-expertise/</guid>
      <description>&lt;p&gt;There are jokes aplenty about how jobs want you to have 10 years of experience (or some other absurd number) by the time you’ve graduated college, generally implying that you need to have started on your career even prior to high school in order to have enough experience to get an entry-level position. The sad part is that these jokes are born from a kernel of truth.&lt;/p&gt;
&lt;p&gt;And I understand the cognitive dissonance here: college degrees are mostly meaningless in determining whether you can do a particular job. They are primarily a tool for filtering out potential candidates so there are fewer applications to manually process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Discordant Journey: Elixir &#43; Discord</title>
      <link>https://eon.dev/posts/a-discordant-journey-elixir-discord/</link>
      <pubDate>Wed, 30 Jan 2019 16:52:00 +0000</pubDate>
      <guid>https://eon.dev/posts/a-discordant-journey-elixir-discord/</guid>
      <description>&lt;p&gt;A few months ago I decided to embark on some personal programming using Elixir. I loved Erlang when I first played around with it many years ago and have enjoyed Elixir since the initial release (long before it hit 1.0). Around this same time I was setting up to host a Dungeons and Dragons campaign for my friends and wanted some way to record our sessions for personal enjoyment and reminiscing. We chose &lt;a href=&#34;https://discordapp.com/&#34;&gt;Discord&lt;/a&gt; for our voice chat service and &lt;a href=&#34;https://roll20.net/&#34;&gt;Roll20&lt;/a&gt; for our map viewer, dice roller, etc. I was having an awful time trying to get my computer set up to record both my incoming audio from Discord and my outgoing audio from the microphone, and so I looked to see if Discord had any voice recording bots, and they did. I had stumbled upon &lt;a href=&#34;https://craig.chat/home/&#34;&gt;Craig&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Composing Victory with docker-compose</title>
      <link>https://eon.dev/posts/composing-victory-with-docker-compose/</link>
      <pubDate>Thu, 20 Sep 2018 18:18:00 +0000</pubDate>
      <guid>https://eon.dev/posts/composing-victory-with-docker-compose/</guid>
      <description>&lt;p&gt;This article assumes you have at least basic knowledge of Docker and &lt;code&gt;docker-compose&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;docker-good-docker-compose-better&#34;&gt;Docker good, docker-compose better&lt;/h2&gt;
&lt;p&gt;For small projects where you don’t need a collection of services that speak to each other, Docker is great. It’s all you really need to get a reliable app environment up and running and deployed. But most projects, especially those for for businesses, are not isolated applications that don’t communicate with others.&lt;/p&gt;
&lt;p&gt;At some point you will almost definitely need to have at least one service that needs to communicate with another service. Most commonly that would be an application interacting with a database. So at a minimum you now have two containers to run: your main application and your database. You &lt;em&gt;could&lt;/em&gt; use &lt;code&gt;docker build&lt;/code&gt; and &lt;code&gt;docker run&lt;/code&gt; to launch both containers, but then you would need to perform a little extra effort to ensure both containers can speak to each other, especially since the IP address and exposed ports can change depending on your configurations. Thankfully you can bypass the manual effort with &lt;code&gt;docker-compose&lt;/code&gt;!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes and Containerization</title>
      <link>https://eon.dev/posts/kubernetes-and-containerization/</link>
      <pubDate>Thu, 21 Dec 2017 03:35:00 +0000</pubDate>
      <guid>https://eon.dev/posts/kubernetes-and-containerization/</guid>
      <description>&lt;p&gt;This is designed to be a multi-part article. This first post, the introduction, talks about what the plan was and how it came to be along with some of the concerns and questions we had prior to starting implementation. The following parts discuss the exact details behind each of the particular goals we were trying to achieve.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; While there are multiple parts to this &amp;ldquo;series&amp;rdquo;, I didn&amp;rsquo;t end up writing all of the individual pieces I had intended to originally. So instead, this article is really more of just a general overview of the planning and the design of a new system I was building at Loot Crate during this time (2016/2017). It focused on containerization, Kubernetes, and an event-driven architecture.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
