<?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"><channel><title><![CDATA[Build It => Deploy 🚀]]></title><description><![CDATA[Tips + Tricks + Riffs devoted to my experiences building modern full-stack AI products and applications.]]></description><link>https://blog.aiengineer.work</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 23:10:23 GMT</lastBuildDate><atom:link href="https://blog.aiengineer.work/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Join Me in UC Berkeley's RDI Advanced LLM Agents MOOC]]></title><description><![CDATA[Learning the Why Behind the How
My previous article talks to AI Agents going mainstream in 2025. Part of this series is explaining the Why Behind the How. As you progress through your AI/ML learning journey, you will need to maintain some level of un...]]></description><link>https://blog.aiengineer.work/join-me-in-uc-berkeleys-rdi-advanced-llm-agents-mooc</link><guid isPermaLink="true">https://blog.aiengineer.work/join-me-in-uc-berkeleys-rdi-advanced-llm-agents-mooc</guid><category><![CDATA[agentic AI]]></category><category><![CDATA[AI]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Frontend Development]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Mon, 03 Feb 2025 23:34:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738615859607/199569ce-330d-44e9-a596-8aa39f2bea8c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-learning-the-why-behind-the-how">Learning the Why Behind the How</h2>
<p>My previous article talks to <a target="_blank" href="https://builditdeploy.hashnode.dev/agentic-ai-agents-go-mainstream-in-2025-with-coherent-persistence">AI Agents going mainstream in 2025</a>. Part of this series is explaining the <strong><em>Why Behind the How</em></strong>. As you progress through your AI/ML learning journey, you will need to maintain some level of understanding as to where the larger corpus of Machine Learning and Artificial Intelligence research is progressing.</p>
<p><a target="_blank" href="https://rdi.berkeley.edu">UC Berkeley’s RDI</a> is providing such an opportunity for all of us through their <a target="_blank" href="https://llmagents-learning.org/sp25">Advanced Large Language Model Agents MOOC</a>. Their mission:</p>
<blockquote>
<p>The Berkeley Center for Responsible, Decentralized Intelligence (RDI) is a new multi-disciplinary campus-wide initiative, focusing on advancing the science, technology and education of decentralization and empowering a responsible digital economy. The RDI Center currently includes faculty and students from computer science, finance/economics, and law, and will support 3 pillars: research, education, and community / entrepreneurship.</p>
</blockquote>
<h2 id="heading-what-youll-learn">What You’ll Learn</h2>
<p>From January to April, you'll learn from world-class researchers at the forefront of AI innovation. You will learn inference-time techniques from Xinyun Chen at Google DeepMind, reasoning strategies from Jason Weston at Meta, and agent safety and security from Dawn Song at UC Berkeley among many other lectures.</p>
<h3 id="heading-key-learning-outcomes">Key Learning Outcomes</h3>
<p>By the end of this course, you'll understand:</p>
<ul>
<li><p>Advanced inference and post-training techniques</p>
</li>
<li><p>Agentic workflow and tool use</p>
</li>
<li><p>Functional calling strategies</p>
</li>
<li><p>Techniques for mathematical reasoning and theorem proving</p>
</li>
<li><p>Methods for code generation and verification</p>
</li>
<li><p>Inference-time techniques for reasoning</p>
</li>
<li><p>Post-training methods for reasoning</p>
</li>
<li><p>Search and planning</p>
</li>
<li><p>Agentic workflow, tool use, and functional calling</p>
</li>
<li><p>LLMs for code generation and verification</p>
</li>
<li><p>LLMs for mathematics: data curation, continual pretraining, and finetuning</p>
</li>
<li><p>LLM agents for theorem proving and autoformalization</p>
</li>
</ul>
<h2 id="heading-lesson-schedule">Lesson Schedule</h2>
<p>The <a target="_blank" href="https://www.youtube.com/@BerkeleyRDI">weekly livestream</a> meets on Mondays 4pm-6pm PT and 7pm-9pm ET January through April 2025. It's not too late to join. 😄</p>
<p>The current schedule is provided below (clickable screenshot, I'll update with a markdown table soon):</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738624986683/cbca527d-ce07-4810-8501-bfdd2b13cac1.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-complete-coursework-for-a-certificate">Complete Coursework for a Certificate</h2>
<p>You can participate through the <a target="_blank" href="https://llmagents-learning.org/slides/llm-agents-berkeley-intro-sp25.pdf">Application Track or Research Track</a>, which also involves weekly quizzes to apply for a course certificate.</p>
<h3 id="heading-application-track">Application Track:</h3>
<ul>
<li><p>3-4 students per group</p>
</li>
<li><p>Focus on applied use cases of LLMs</p>
</li>
<li><p>Does not necessarily need to contribute novel research</p>
</li>
</ul>
<h3 id="heading-research-track">Research Track:</h3>
<ul>
<li><p>2-3 students per group</p>
</li>
<li><p>Conduct novel research under the supervision of postdocs and graduate students</p>
</li>
<li><p>Goal of publishing in a workshop or conference</p>
</li>
<li><p>Students must apply to participate via a forthcoming Google Form</p>
</li>
</ul>
<h2 id="heading-audit-to-learn">Audit to Learn</h2>
<p>You can also simply follow along at your own pace with the weekly lectures and supplemental readings. You will not receive a certificate for this option.</p>
<p>Whatever your choice, <a target="_blank" href="https://www.linkedin.com/in/james-thompson-ai-engineer/">please let me know</a> if you want to work together on the Application Track or if I can help in any way. Good luck!</p>
]]></content:encoded></item><item><title><![CDATA[Agentic AI Agents Go Mainstream in 2025 with Coherent Persistence]]></title><description><![CDATA[AI Agents in 2025: The Technical Reality Behind the Hype
AI Agents are really going mainstream in 2025, where 2023 was about chatbots and 2024 was about RAG.
The most interesting thing about AI Agents in 2025 isn't what they can do - it's how they're...]]></description><link>https://blog.aiengineer.work/agentic-ai-agents-go-mainstream-in-2025-with-coherent-persistence</link><guid isPermaLink="true">https://blog.aiengineer.work/agentic-ai-agents-go-mainstream-in-2025-with-coherent-persistence</guid><category><![CDATA[agentic AI]]></category><category><![CDATA[AI]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Fri, 31 Jan 2025 23:27:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/nGoCBxiaRO0/upload/f403d83eaebb6daf080ad21409899d2f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-ai-agents-in-2025-the-technical-reality-behind-the-hype">AI Agents in 2025: The Technical Reality Behind the Hype</h2>
<p>AI Agents are <strong><em>really</em></strong> going mainstream in 2025, where 2023 was about chatbots and 2024 was about RAG.</p>
<p>The most interesting thing about AI Agents in 2025 isn't what they can do - it's how they're doing it. I've been digging into the technical architecture of modern AI Agents, and there are some fascinating patterns emerging that deserve more attention.</p>
<p>First, let's clarify what we mean by AI Agents. These aren't just LLMs responding to prompts anymore. Modern agents are stateful systems that maintain context across interactions, manage their own memory, and make autonomous decisions within defined boundaries. The key breakthrough has been in what I'm calling <code>coherent persistence</code> - the ability to maintain consistent behavior patterns across extended interactions.</p>
<h2 id="heading-the-modern-ai-agent-technical-stack">The Modern AI Agent Technical Stack</h2>
<p>Here's what's actually running under the hood of a typical modern agent:</p>
<pre><code class="lang-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ModernAIAgent</span>:</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self</span>):</span>
        self.working_memory = CircularBuffer(max_size=<span class="hljs-number">1000</span>)
        self.long_term_memory = VectorStore()
        self.action_space = ConstrainedActionSpace()
        self.context_manager = HierarchicalContext()
</code></pre>
<p>The interesting part is the <code>HierarchicalContext</code>. Unlike earlier agents that treated each interaction as a flat sequence, modern agents maintain <em>multiple layers of context simultaneously</em>. They're basically running a distributed state machine where different aspects of their behavior can evolve independently, where they are able to offload synchronous and asynchronous actions through AI tools or functions.</p>
<h2 id="heading-multi-agent-architectures">Multi-Agent Architectures</h2>
<p>The real power comes from how these agents interact. I've been experimenting with networks of specialized agents, each handling different aspects of complex tasks. The breakthrough isn't in individual agent capabilities - it's in the protocols they use to coordinate.</p>
<p><strong>Here's a typical agentic interaction flow:</strong></p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eiz4vy5yozm718dvccyw.png" alt="Agentic AI Agents" /></p>
<p><em>The key insight</em>: agents don't need to be general-purpose. They're most effective when they're specialized and coordinated through <strong><em>well-defined protocols</em></strong>. Different AI Agent frameworks vary in their implementation of the above diagram, and the results of their agents and predefined workflows may vary.</p>
<h2 id="heading-sqlite-for-aiheck-yeah">SQLite for AI?…Heck Yeah!</h2>
<p>One pattern I'm particularly excited about is using SQLite as a persistent memory store for AI agents. It's lightweight, reliable, and - most importantly - human-readable. Here's a schema I've been using:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> agent_memory (
    <span class="hljs-built_in">timestamp</span> <span class="hljs-built_in">TEXT</span>,
    context_hash <span class="hljs-built_in">TEXT</span>,
    memory_type <span class="hljs-built_in">TEXT</span>,
    embedding <span class="hljs-built_in">BLOB</span>,
    <span class="hljs-keyword">content</span> <span class="hljs-built_in">TEXT</span>,
    metadata <span class="hljs-keyword">JSON</span>
);
</code></pre>
<p>This makes agent behavior debuggable and allows for interesting queries across their memory space. Want to know how an agent's decision patterns have evolved? Just query the database! Of course, SQLite is not the only option for persistent memory storage. Based on your path from experimenting to prototype to production you may make other Agentic architectural design decisions.</p>
<h2 id="heading-the-observable-pattern">The <code>Observable Pattern</code></h2>
<p>The most successful agent implementations I've seen follow what I'm calling the <code>observable pattern</code> - every action and decision is logged, queryable, and traceable. This isn't just about debugging; it's about understanding how agents actually operate in production. Imagine having 100s if not 1000s of agents in production; you will need a way to measure their performance and determine their predicability. That’s where evals are critical.</p>
<p>Below, is a simplified class for implementing agent decision trees:</p>
<pre><code class="lang-python"><span class="hljs-meta">@dataclass</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AgentDecision</span>:</span>
    timestamp: datetime
    context: dict
    options_considered: list
    chosen_action: str
    confidence: float
</code></pre>
<h2 id="heading-whats-next-for-ai-agents-in-2025">What's Next for AI Agents in 2025?</h2>
<p>The most exciting developments aren't in making agents more powerful - they're in making them more <strong><em>predictable</em></strong> and <strong><em>maintainable</em></strong>. We're seeing the emergence of design patterns that make AI agents behave more like traditional software systems: testable, debuggable, and maintainable.</p>
<p>The future isn't in building bigger models or more complex architectures. It's in developing better patterns for composing and coordinating specialized agents. Think microservices, but for AI.</p>
<p>I’ll be publishing a series of articles presenting different implementations of AI Agents, along with other articles, over the next many months. Subscribe, keep an eye out and please let me know what you think!</p>
<hr />
<p>Article cover image courtesy of <a target="_blank" href="https://unsplash.com/@growtika?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Growtika</a> on <a target="_blank" href="https://unsplash.com/photos/an-abstract-image-of-a-sphere-with-dots-and-lines-nGoCBxiaRO0?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[AITX AI Hackathon - Spark Creativity]]></title><description><![CDATA[AITX AI Hackathon Recap
Hello and hope you’re doing well. The AITX AI Hackathon last weekend was an amazing event bringing together over 50 devs, aspiring ML Engineers, and enthusiasts with Austin AI Tinkerers for a full day of hacking and collaborat...]]></description><link>https://blog.aiengineer.work/aitx-ai-hackathon-spark-creativity</link><guid isPermaLink="true">https://blog.aiengineer.work/aitx-ai-hackathon-spark-creativity</guid><category><![CDATA[AI]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[Machine Learning]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Sat, 27 Jul 2024 05:10:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1722056907160/cca4896f-5e85-485f-b53c-24e311304aee.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-aitx-ai-hackathon-recap">AITX AI Hackathon Recap</h2>
<p>Hello and hope you’re doing well. The <a target="_blank" href="https://builditdeploy.hashnode.dev/austin-this-weekend-join-ai-community-hackathon">AITX AI Hackathon last weekend</a> was an amazing event bringing together over 50 devs, aspiring ML Engineers, and enthusiasts with <a target="_blank" href="https://austin.aitinkerers.org/p/ai-tinkerers-summer-hackathon-2024-austin-tx">Austin AI Tinkerers</a> for a full day of hacking and collaborating.</p>
<p>If you’ve never attended a hackathon, it definitely should be added to your bucket-list. It’s an energetic environment where all are welcome. Last weekend, there were over 16 teams that participated in the event.</p>
<h2 id="heading-spark-creativity">Spark Creativity</h2>
<p>One of the greatest benefits of the focused collaborative effort, is that it sparks creativity when working under the pressure to have something to demo by the afternoon. For me, I built a multi-modal app with speech(voice) to text (STT) and text to speech (TTS). I drew inspiration from a number of talks at last month’s <a target="_blank" href="https://www.ai.engineer/worldsfair">AI Engineer World’s Fair</a> in San Francisco, which was a follow up and much larger <a target="_blank" href="https://www.ai.engineer/summit/2023">AI Engineer Summit</a>. Both events have helped me gain a deeper understanding of the current state of affairs for AI research, startups, and established companies leading the way of Generative AI and Machine Learning, which lead me to a more productive hackathon experience.</p>
<hr />
<p>Photo courtesy of <a target="_blank" href="https://unsplash.com/@anniespratt?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Annie Spratt</a> on <a target="_blank" href="https://unsplash.com/photos/group-of-people-using-laptop-computer-QckxruozjRg?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[In Austin this weekend? Join the AI Community Hackathon!]]></title><description><![CDATA[It has been some time since I’ve dropped digital ink to canvas. I’ve been very busy over the last year diving deeper into Artificial Intelligence (AI) and Machine Learning (ML). This short update is to let you know about the AI Community Hackathon in...]]></description><link>https://blog.aiengineer.work/austin-this-weekend-join-ai-community-hackathon</link><guid isPermaLink="true">https://blog.aiengineer.work/austin-this-weekend-join-ai-community-hackathon</guid><category><![CDATA[hackathon]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[generative ai]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Fri, 19 Jul 2024 09:10:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1721379662226/6ea69f62-6eaa-4fc5-a833-9269390ef265.avif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It has been some time since I’ve dropped digital ink to canvas. I’ve been very busy over the last year diving deeper into Artificial Intelligence (AI) and Machine Learning (ML). This short update is to let you know about the <a target="_blank" href="https://lu.ma/atx-hackathon">AI Community Hackathon in Austin, Texas</a> happening this Saturday, July 20th.</p>
<p>This will be an opportunity to explore the AI landscape in Austin Texas (aka, ATX) while also meeting other like-minded Generative AI/ML tinkerers. I’ll provide a post next week with a write-up about the event and the project I worked on.</p>
<p>If you decide to join the fun, please let me know!</p>
]]></content:encoded></item><item><title><![CDATA[Happy Leap Year  Day...Time for a Reboot]]></title><description><![CDATA[How have you been doing?! 🤔🤗
It’s been awhile since I’ve posted so I figured February 29, 2024…Leap Year Day (or is it Leap Day of the Leap Year??) is a good time to reboot. I’ve taken a few months off from writing so as to mainly focus on learning...]]></description><link>https://blog.aiengineer.work/happy-leap-year-day-time-for-a-reboot</link><guid isPermaLink="true">https://blog.aiengineer.work/happy-leap-year-day-time-for-a-reboot</guid><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[ML]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Fri, 01 Mar 2024 02:20:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/x1CLah6pv6g/upload/6ef43da8561bba2fc0b5ae0c8fae0818.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-have-you-been-doing">How have you been doing?! 🤔🤗</h1>
<p>It’s been awhile since I’ve posted so I figured February 29, 2024…Leap Year Day (or is it Leap Day of the Leap Year??) is a good time to reboot. I’ve taken a few months off from writing so as to mainly focus on learning more about Artificial Intelligence and Machine Learning.</p>
<h2 id="heading-buzzy-hype-or-reality">Buzzy Hype or Reality</h2>
<p><a target="_blank" href="https://openai.com/blog/chatgpt">ChatGPT</a> was released to the world on November 30, 2022. Probably like many of us, I started to wonder if this was buzzy hype or something worth checking out. <a target="_blank" href="https://github.blog/2022-06-21-github-copilot-is-generally-available-to-all-developers/">GitHub Copilot</a> release sparked additional interest in the <a target="_blank" href="https://github.blog/2023-03-22-github-copilot-x-the-ai-powered-developer-experience/">AI technology</a> behind how it works.</p>
<p>Stubbing through my research, my interest was really galvanized by a podcast. 📻🤖</p>
<p><a target="_blank" href="https://www.latent.space/podcast"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1709254993046/27b96923-5a66-4baf-91ec-a6387566f3ec.jpeg" alt="Latent Space Podcast" class="image--center mx-auto" /></a></p>
<p><a target="_blank" href="https://twitter.com/swyx">Swyx</a> and <a target="_blank" href="https://twitter.com/FanaHOVA">Alessio's</a> podcast <a target="_blank" href="https://www.latent.space/podcast">Latent Space</a> provides technical deep dives into AI/ML that is also newbie friendly. I highly recommend tuning in for high signal no noise as they have AI/ML researchers and entrepreneurs leading the <a target="_blank" href="https://paperswithcode.com/sota">SOTA (state-of-the-art) research</a> and burgeoning industry.</p>
<h2 id="heading-where-to-next">Where to next?</h2>
<p>I plan to write more about my journey through Artificial Intelligence and Machine Learning. In the meantime, I hope you enjoy your Happy Leap {{ Year }} Day!</p>
]]></content:encoded></item><item><title><![CDATA[Quick tip: Make Sure Your Work Follows You]]></title><description><![CDATA[Photo by Free Walking Tour Salzburg on Unsplash
Production Matters
This is a quick tip to make sure your commits follow you on GitHub. You can do this by making sure the email associated with your commits is a universal GitHub email address.
Why does...]]></description><link>https://blog.aiengineer.work/quick-tip-make-sure-your-work-follows-you</link><guid isPermaLink="true">https://blog.aiengineer.work/quick-tip-make-sure-your-work-follows-you</guid><category><![CDATA[GitHub]]></category><category><![CDATA[ci-cd]]></category><category><![CDATA[Security]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Fri, 01 Sep 2023 04:56:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/hvQFJhJvfR8/upload/130dbdd303e610345f493f17426ea7dc.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Photo by <a target="_blank" href="https://unsplash.com/@freewalkingtoursalzburg">Free Walking Tour Salzburg</a> on <a target="_blank" href="https://unsplash.com">Unsplash</a></p>
<h2 id="heading-production-matters">Production Matters</h2>
<p>This is a quick tip to make sure your commits follow you on GitHub. You can do this by making sure the email associated with your commits is a universal GitHub email address.</p>
<p>Why does this matter? If you ever push your company’s production code to GitHub using your company’s email address, those commits associated with that email go away when you leave the company. Rather, they go away if you ever delete the email address from your GitHub account. You would want to do this since commit messages will continue to be routed to this email address, or until your company deactivates your account.</p>
<h2 id="heading-dont-reply">Don’t Reply</h2>
<p>GitHub has a built-in feature to associate a no-reply email address for your commits with your GitHub account. It describes it as a way to keep your <a target="_blank" href="https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address#about-commit-email-addresses">email address private</a>, <a target="_blank" href="https://github.blog/2017-04-11-private-emails-now-more-private/">which it does</a>. An additional bonus is that you can use it as a universal email address for all of your personal and professional work.</p>
<p>This is how it will look:</p>
<pre><code class="lang-bash">YOUR_GITHUB_USER_ACCOUNT@users.noreply.github.com
</code></pre>
<p>So in <a target="_blank" href="https://github.com/100stacks">my case</a>, it looks like this:</p>
<pre><code class="lang-bash">100stacks@users.noreply.github.com
</code></pre>
<p>You would configure this from your terminal command line (quotes are required):</p>
<pre><code class="lang-bash">git config --global user.email <span class="hljs-string">"GITHUB_ACCOUNT@users.noreply.github.com"</span>
</code></pre>
<p>Verify it is changed by entering the following command in the terminal:</p>
<pre><code class="lang-bash">git config --global user.email
</code></pre>
<p>That’s it! You’ve made the change.</p>
<h2 id="heading-ok-one-more-thing">Ok, one more thing…</h2>
<p>If you use <a target="_blank" href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh">SSH</a> to access your GitHub account, and <strong>YOU SHOULD</strong> in any production environment 🫣, you will need to complete a few more steps which <a target="_blank" href="https://builditdeploy.hashnode.dev/configure-ssh-keys-for-your-github-account">I covered in another article</a>.</p>
<h2 id="heading-lastly-trust-but-verify">Lastly, Trust But Verify</h2>
<p>Having SSH configured is a great step towards a secure, distributed, CI/CD production environment. If you want to take additional steps for a more secure development environment, I will cover an advanced configuration that most developers do not use in a future article.</p>
]]></content:encoded></item><item><title><![CDATA[Configure SSH Keys for Your GitHub Account]]></title><description><![CDATA[Do it before you need it
In my previous article, I wrote about GitHub's RSA SSH Host Key update. This shows that even enterprise companies that we depend on can have issues that may affect our daily lives.
Mistakes will happen in our profession and t...]]></description><link>https://blog.aiengineer.work/configure-ssh-keys-for-your-github-account</link><guid isPermaLink="true">https://blog.aiengineer.work/configure-ssh-keys-for-your-github-account</guid><category><![CDATA[Security]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Developer]]></category><category><![CDATA[ci-cd]]></category><category><![CDATA[CI/CD]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Mon, 24 Jul 2023 04:41:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/kwzWjTnDPLk/upload/d50d9342dba5eb46eb921633bdd1189d.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-do-it-before-you-need-it">Do it before you need it</h1>
<p>In my previous article, I wrote about <a target="_blank" href="https://builditdeploy.hashnode.dev/github-warning-remote-host-identification-has-changed">GitHub's RSA SSH Host Key update</a>. This shows that even enterprise companies that we depend on can have <a target="_blank" href="https://www.techradar.com/news/live/aws-is-down-again-heres-all-we-know">issues that may affect our daily lives</a>.</p>
<p>Mistakes will happen in our profession and throughout the industry. Adapting a <code>security-first</code> mindset for production environments is important to help minimize potential issues in the future. SSH keys provide a secure way to authenticate and establish a secure connection between your local development machine and GitHub.</p>
<p>In this article, I will discuss how to install an SSH key on GitHub for your local developer environment. I will also explore the pros and cons of using SSH keys for your development environment.</p>
<h2 id="heading-install-ssh-key-for-github">Install SSH Key for GitHub</h2>
<h3 id="heading-prerequisites">Prerequisites</h3>
<p>Before we begin, make sure you have the following prerequisites:</p>
<ul>
<li><p>A GitHub account</p>
</li>
<li><p>Git installed on your local machine</p>
</li>
</ul>
<h3 id="heading-step-1-generate-ssh-key">Step 1: Generate SSH Key</h3>
<ol>
<li><p>Open your terminal.</p>
</li>
<li><p>Run the following command to generate a new SSH key:</p>
</li>
</ol>
<pre><code class="lang-bash">ssh-keygen -t rsa -b 4096 -C <span class="hljs-string">"your_email@example.com"</span>
</code></pre>
<ol>
<li><p>Press <code>Return</code> to accept the default file location and name for your SSH key.</p>
 <div data-node-type="callout">
 <div data-node-type="callout-emoji">❗</div>
 <div data-node-type="callout-text">NOTE: DO NOT skip the next step of generating a passphrase.</div>
 </div>
</li>
<li><p>Enter a <a target="_blank" href="https://www.ssh.com/academy/ssh/passphrase"><code>passphrase for your SSH key</code></a>. This step is important for adding another layer of security.</p>
</li>
</ol>
<h3 id="heading-step-2-add-ssh-key-to-ssh-agent">Step 2: Add SSH Key to SSH Agent</h3>
<p>Start the SSH agent by running the following command:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">eval</span> <span class="hljs-string">"<span class="hljs-subst">$(ssh-agent -s)</span>"</span>
</code></pre>
<p>Add your SSH private key to the SSH agent by running the following command:</p>
<pre><code class="lang-bash">ssh-add ~/.ssh/id_rsa
</code></pre>
<h3 id="heading-step-3-add-ssh-key-to-github">Step 3: Add SSH Key to GitHub</h3>
<p>Copy your SSH public key to the clipboard by running the following command:</p>
<pre><code class="lang-bash">pbcopy &lt; ~/.ssh/id_rsa.pub
</code></pre>
<ol>
<li><p>Go to your GitHub account settings.</p>
</li>
<li><p>Click on "SSH and GPG keys" in the left sidebar.</p>
</li>
<li><p>Click on "New SSH key" or "Add SSH key".</p>
</li>
<li><p>Give your SSH key a title and paste the copied public key into the "Key" field.</p>
</li>
<li><p>Click on "Add SSH key" to save.</p>
</li>
</ol>
<h2 id="heading-step-4-test-ssh-connection">Step 4: Test SSH Connection</h2>
<ol>
<li>Test your SSH connection to GitHub by running the following command:</li>
</ol>
<pre><code class="lang-bash">ssh -T git@github.com
</code></pre>
<ol>
<li>You should see a success message indicating that you've successfully authenticated.</li>
</ol>
<h2 id="heading-ssh-keys-pros-and-cons">SSH Keys: Pros and Cons</h2>
<h3 id="heading-pros">Pros</h3>
<ol>
<li><p><strong>Enhanced Security</strong>: SSH keys provide a more secure way of authentication compared to passwords. They use public-key cryptography, making it difficult for attackers to intercept and decrypt your credentials.</p>
</li>
<li><p><strong>Convenience</strong>: Once set up, SSH keys allow for seamless authentication without the need to enter passwords repeatedly.</p>
</li>
<li><p><strong>Automation</strong>: SSH keys can be used in automated scripts and workflows, enabling seamless integration with various tools and services.</p>
</li>
<li><p><strong>Multiple Accounts</strong>: SSH keys allow you to manage multiple GitHub accounts easily by associating different keys with different accounts.</p>
</li>
</ol>
<h3 id="heading-cons">Cons</h3>
<ol>
<li><p><strong>Initial Setup</strong>: Setting up SSH keys requires generating and managing key pairs, which can be a bit complex for beginners.</p>
</li>
<li><p><strong>Key Management</strong>: If your private key gets compromised, it can lead to unauthorized access. Therefore, it is crucial to protect your private key with a strong passphrase and follow best practices for key management.</p>
</li>
<li><p><strong>Limited Accessibility</strong>: SSH keys are tied to specific machines. If you need to access your GitHub account from a different machine, you'll need to generate and add a new SSH key.</p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Installing an SSH key for GitHub on your local developer environment provides a secure and convenient way to authenticate and interact with your repositories. While there are some complexities involved in the initial setup and key management, the enhanced security and automation benefits make SSH keys a necessary addition to any production development workflow.</p>
]]></content:encoded></item><item><title><![CDATA[Github Warning: Remote Host Identification Has Changed! 😳]]></title><description><![CDATA[I started seeing this warning
A few months back, I came back from the weekend and started seeing the warning below in the terminal. I was working on a GitHub project.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST ...]]></description><link>https://blog.aiengineer.work/github-warning-remote-host-identification-has-changed</link><guid isPermaLink="true">https://blog.aiengineer.work/github-warning-remote-host-identification-has-changed</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Security]]></category><category><![CDATA[Devops]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Mon, 17 Jul 2023 04:54:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/P4vFfdGl_8s/upload/e8b077a435609cd52635d992b21ad206.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-i-started-seeing-this-warning">I started seeing this warning</h1>
<p>A few months back, I came back from the weekend and started seeing the warning below in the <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line">terminal</a>. I was working on a <a target="_blank" href="https://github.com/100stacks">GitHub project</a>.</p>
<pre><code class="lang-bash">@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint <span class="hljs-keyword">for</span> the RSA key sent by the remote host is
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.
Please contact your system administrator.
Add correct host key <span class="hljs-keyword">in</span> ~/.ssh/known_hosts to get rid of this message.
Host key <span class="hljs-keyword">for</span> github.com has changed and you have requested strict checking.
Host key verification failed.
</code></pre>
<p>This was an odd change as I was working on the project a few days prior without issue. This error occurred whenever I tried to push updates to the remote repository.</p>
<p>This was the somewhat cryptic warning that stood out.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">🛑</div>
<div data-node-type="callout-text">The fingerprint for the RSA key sent by the remote host is SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s. Please contact your system administrator.</div>
</div>

<p>It took a few minutes of troubleshooting to finally realize the phrases <code>remote host</code> and <code>please contact your system administrator</code> where important here. After a bit of <a target="_blank" href="https://duckduckgo.com/spread">searching</a>, I came across this article for the potentially comprised GitHub RSA SSH Key - <a target="_blank" href="https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/">https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689569167032/5349b151-4ba0-4be3-adb1-1fae85164cd8.png" alt class="image--center mx-auto" /></p>
<p>I was surprised by the unexpected non-warning, though after reading the article I could see why this happened. Next week, I'll get into why this was such a big deal, especially for automated CI/CD pipelines and distributed teams.</p>
]]></content:encoded></item><item><title><![CDATA[Enable 2FA/MFA For Your Build Process]]></title><description><![CDATA[What is 2FA/MFA?
For modern digital life, it’s hard to avoid Two-Factor Authentication (2FA)/Multi-Factor Authentication (MFA). You may see the term 2FA and/or MFA though both apply to authentication, which is the act of verifying a user can access a...]]></description><link>https://blog.aiengineer.work/enable-2fa-mfa-for-your-build-process</link><guid isPermaLink="true">https://blog.aiengineer.work/enable-2fa-mfa-for-your-build-process</guid><category><![CDATA[Security]]></category><category><![CDATA[CI/CD]]></category><category><![CDATA[software development]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Mon, 10 Jul 2023 04:52:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/RMIsZlv8qv4/upload/b9bb0a182d648b98d8dfa00b8cfe230c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-what-is-2famfa">What is 2FA/MFA?</h2>
<p>For modern digital life, it’s hard to avoid <a target="_blank" href="https://www.investopedia.com/terms/t/twofactor-authentication-2fa.asp">Two-Factor Authentication (2FA)</a>/<a target="_blank" href="https://en.wikipedia.org/wiki/Multi-factor_authentication">Multi-Factor Authentication (MFA)</a>. You may see the term 2FA and/or MFA though both apply to authentication, which is the act of verifying a user can access a website, application, or service.</p>
<p>At minimum, you need a username or email as sign-in credentials, and you need something else:</p>
<ul>
<li><p>you (biometrics)</p>
</li>
<li><p>thing (hard or soft token)</p>
</li>
<li><p>and, something you know (password).</p>
</li>
</ul>
<p>The most common MFA is when a user logs into an app they are prompted to check their email or SMS for a code. This code should be a <a target="_blank" href="https://www.twilio.com/blog/what-does-otp-mean">OTP - one-time password/passcode</a>.</p>
<h2 id="heading-use-2famfa-in-your-build-process">Use 2FA/MFA in your build process</h2>
<ul>
<li><p>First, are you using GitHub, GitLab, or BitBucket to host your code?</p>
</li>
<li><p>Enable 2FA/MFA on your account.</p>
</li>
<li><p>Enable <strong><em>verified commits</em></strong> for your developer laptop/environment.</p>
</li>
</ul>
<h2 id="heading-verified-commits">Verified Commits</h2>
<p>Next week, I’ll show you how to enable verified commits for your developer environment…because even <a target="_blank" href="https://www.bleepingcomputer.com/news/security/github-notifies-owners-of-private-repos-stolen-using-oauth-tokens/">Big Tech</a> makes mistakes. 😳</p>
]]></content:encoded></item><item><title><![CDATA[Next Steps]]></title><description><![CDATA[How I got here
I recently completed the hackathon, and tracked my progress over a series of articles. This also marked the start of my journey on Hashnode, as I am evaluating different writing platforms.
Where to next
In a previous article, I talked ...]]></description><link>https://blog.aiengineer.work/next-steps</link><guid isPermaLink="true">https://blog.aiengineer.work/next-steps</guid><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Sun, 02 Jul 2023 20:34:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/w9h2jQbM24I/upload/02362f82688e41b9912ae0f720ed5f04.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-how-i-got-here">How I got here</h2>
<p>I recently completed the <a target="_blank" href="https://builditdeploy.hashnode.dev/1password-hashnode-hackathon-2023-published-on-github-deployed-to-netlify">hackathon</a>, and tracked my progress over a <a target="_blank" href="https://builditdeploy.hashnode.dev/series/1password-hackathon">series of articles</a>. This also marked the start of my journey on Hashnode, as I am evaluating different writing platforms.</p>
<h2 id="heading-where-to-next">Where to next</h2>
<p>In a previous article, I talked about my typical <a target="_blank" href="https://builditdeploy.hashnode.dev/my-default-environment-netlify-vite-react">go-to default environment</a>. In reality, there are multiple considerations that you and your team would need to address in a production environment. In subsequent articles, I will dive more into the technical aspects, with step-by-step tutorials, of building and deploying an application.</p>
]]></content:encoded></item><item><title><![CDATA[Checking In: Writing for a Week]]></title><description><![CDATA[What's been happening?
I've been writing for about a week, since submitting a project to the 1Password + Hashnode Hackthon. I was able to write a series of articles that has helped me to synthesize different developer experiences.
Keeping it going
TB...]]></description><link>https://blog.aiengineer.work/checking-in-writing-for-a-week</link><guid isPermaLink="true">https://blog.aiengineer.work/checking-in-writing-for-a-week</guid><category><![CDATA[hackathon]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[writing]]></category><category><![CDATA[software development]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Sat, 01 Jul 2023 18:53:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/cckf4TsHAuw/upload/e62bd74c222b8514d3aace0b816882c9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-whats-been-happening">What's been happening?</h2>
<p>I've been writing for about a week, since submitting a project to the <a target="_blank" href="https://builditdeploy.hashnode.dev/1password-hashnode-hackathon-2023-published-on-github-deployed-to-netlify">1Password + Hashnode Hackthon</a>. I was able to write a series of articles that has helped me to synthesize different developer experiences.</p>
<h2 id="heading-keeping-it-going">Keeping it going</h2>
<p>TBH, it's been enjoyable to start taking thoughts and putting them down on paper...well digital paper. I'm working through a few ideas to keep the topics flowing.</p>
]]></content:encoded></item><item><title><![CDATA[1Password + Hashnode Hackathon 2023: Published on GitHub Deployed to Netlify]]></title><description><![CDATA[Finishing up
This has been a great week of learning for me James Thompson. I started writing here on Hashnode, and worked through deploying a basic app for the 1Password + Passage + Hashnode Hackathon 2023.
I published my work on Github at 100stacks ...]]></description><link>https://blog.aiengineer.work/1password-hashnode-hackathon-2023-published-on-github-deployed-to-netlify</link><guid isPermaLink="true">https://blog.aiengineer.work/1password-hashnode-hackathon-2023-published-on-github-deployed-to-netlify</guid><category><![CDATA[1password-hackathon]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[Netlify]]></category><category><![CDATA[vite]]></category><category><![CDATA[BuildWith1Password]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Sat, 01 Jul 2023 00:34:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/B-YSiWO0Z7w/upload/c0794d2684f2d4310d6d6f1d54ad279e.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-finishing-up">Finishing up</h2>
<p>This has been a great week of learning for me <a class="user-mention" href="https://hashnode.com/@builditdeploy">James Thompson</a>. I started writing here on <a target="_blank" href="https://builditdeploy.hashnode.dev/">Hashnode</a>, and worked through deploying a basic app for the 1Password + Passage + Hashnode Hackathon 2023.</p>
<p>I published my work on <a target="_blank" href="https://github.com/100stacks/1password-passage-hashnode-hackathon">Github at 100stacks</a> and deployed the app to <a target="_blank" href="https://1password-passage-hashnode.netlify.app/">Netlify</a>.</p>
<h2 id="heading-next-steps">Next Steps</h2>
<p>I'll take what I learned from this week and expand it into other projects. Thank you for watching! 💻👀</p>
]]></content:encoded></item><item><title><![CDATA[My Default Environment: Netlify + Vite + React]]></title><description><![CDATA[What is Netlify?
Netlify is my go-to build+deploy platform of choice. It's hard to beat the exceptional Developer Experience (DX) and speedy Zero to One deployments from hackathons to side hustles to your next favorite startup idea.

Netlify makes it...]]></description><link>https://blog.aiengineer.work/my-default-environment-netlify-vite-react</link><guid isPermaLink="true">https://blog.aiengineer.work/my-default-environment-netlify-vite-react</guid><category><![CDATA[Netlify]]></category><category><![CDATA[vite]]></category><category><![CDATA[1password-hackathon]]></category><category><![CDATA[React]]></category><category><![CDATA[BuildWith1Password]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Fri, 30 Jun 2023 02:51:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/5b6AfmGN9AE/upload/f9502901ded2626d1566e6732916bc7f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-what-is-netlify">What is Netlify?</h2>
<p><a target="_blank" href="https://www.netlify.com/">Netlify</a> is my go-to build+deploy platform of <a target="_blank" href="https://builditdeploy.hashnode.dev/dont-roll-your-own">choice</a>. It's hard to beat the exceptional <a target="_blank" href="https://github.blog/2023-06-08-developer-experience-what-is-it-and-why-should-you-care/">Developer Experience (DX)</a> and speedy <a target="_blank" href="https://www.goodreads.com/book/show/18050143-zero-to-one">Zero to One</a> deployments from <a target="_blank" href="https://builditdeploy.hashnode.dev/why-am-i-starting-on-hashnode-now-hackathon">hackathons</a> to side hustles to your next favorite startup idea.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1688089802037/3168a2f8-bae3-4a40-8ae3-94473cec0d55.png" alt class="image--center mx-auto" /></p>
<p>Netlify makes it super easy, with minimal configuration, to integrate with multiple platforms and allows you to focus on your code, as opposed to other cloud-native platforms that are more hands-on. Each has its benefits and drawbacks.</p>
<p>Netifly works great for <a target="_blank" href="https://github.com/100stacks">me on GitHub</a>, since they provide a free plan with very reasonable includes without dropping down a credit card.</p>
<h2 id="heading-what-is-vite-rhymes-with-jeep-and-beep">What is Vite? Rhymes with "Jeep" and "Beep"</h2>
<p><a target="_blank" href="https://vitejs.dev/">Vite</a> (<a target="_blank" href="https://vitejs.dev/guide/#overview">rhymes with "Jeep"</a>) is the next-generation build environment. It problem solves for several pain points in the modern build process. It also supports many of your favorite tech stacks today, with a large set of <a target="_blank" href="https://github.com/vitejs/awesome-vite#templates">community-supported templates</a>.</p>
<h2 id="heading-because-you-can">Because you can</h2>
<p>You may not always have an opportunity to change your <a target="_blank" href="https://www.redhat.com/en/topics/devops/what-is-ci-cd">CI/CD</a> environment, so you might have to propose gradual changes based on the complexity of your pipelines and tech stack. Abandon your current build environment and give this a try...you'll thank me later. 🙌</p>
<hr />
<p>Another article in the <a target="_blank" href="https://builditdeploy.hashnode.dev/series/1password-hackathon">1Password Hackathon</a> series by <a class="user-mention" href="https://hashnode.com/@builditdeploy">James Thompson</a></p>
]]></content:encoded></item><item><title><![CDATA[Don't Roll Your Own]]></title><description><![CDATA[Project scaffolding
When starting a new project, you can roll-your-own application build process, or start with where the general tech community has migrated towards. I hesitate to use the word "standard" build process as it has an overloaded, heavy-...]]></description><link>https://blog.aiengineer.work/dont-roll-your-own</link><guid isPermaLink="true">https://blog.aiengineer.work/dont-roll-your-own</guid><category><![CDATA[Passage]]></category><category><![CDATA[1password-hackathon]]></category><category><![CDATA[Security]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[BuildWith1Password]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Thu, 29 Jun 2023 04:21:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/mvbtVeRVJzg/upload/c6189a694918c573d1d902f3d79bece0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-project-scaffolding">Project scaffolding</h2>
<p>When starting a new project, you can <strong><em>roll-your-own</em></strong> application build process, or start with where the general tech community has migrated towards. I hesitate to use the word "standard" build process as it has an overloaded, heavy-handed connotation.</p>
<p><a target="_blank" href="https://imgs.xkcd.com/comics/standards.png"><img src="https://imgs.xkcd.com/comics/standards.png" alt="xkcd - Standards" class="image--center mx-auto" /></a></p>
<p>Instead of "standard", I prefer the term "adopted". The open-source community has adopted modern build environment practices. Don't get me wrong, we need <a target="_blank" href="https://www.w3.org/">web standards</a>, our beloved <a target="_blank" href="https://www.ecma-international.org/publications-and-standards/standards/ecma-262/">ECMA-262</a> maintained by TC39, <a target="_blank" href="https://www.ietf.org/rfc/rfc9293.html">IETF RFC 9293 - Transmission Control Protocol (TCP)</a>, and many others. Standards bodies help pave the path for interoperability across industries.</p>
<p>Tomorrow, I will provide my chosen build environment for the <a target="_blank" href="https://builditdeploy.hashnode.dev/why-am-i-starting-on-hashnode-now-hackathon">hackathon</a>.</p>
<hr />
<p>Comic "Standards" by <a target="_blank" href="https://xkcd.com/927/">xkcd</a></p>
]]></content:encoded></item><item><title><![CDATA[Flex your muscles 🧠💪]]></title><description><![CDATA[Setting up the hackathon repo
While setting up my GitHub, where I go by @100stacks => https://github.com/100stacks, repo for the hackathon => https://github.com/100stacks/1password-passage-hashnode-hackathon.
I came across this error when I pushed an...]]></description><link>https://blog.aiengineer.work/flex-your-muscles</link><guid isPermaLink="true">https://blog.aiengineer.work/flex-your-muscles</guid><category><![CDATA[1password]]></category><category><![CDATA[1password-hackathon]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[BuildWith1Password]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Tue, 27 Jun 2023 19:44:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/nLXOatvTaLo/upload/1dde1d6e3e70efbc52d0f4ee72328fc5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-setting-up-the-hackathon-repo">Setting up the hackathon repo</h2>
<p>While setting up my GitHub, where I go by <code>@100stacks</code> =&gt; <a target="_blank" href="https://github.com/100stacks">https://github.com/100stacks</a>, repo for the <a target="_blank" href="https://builditdeploy.hashnode.dev/why-am-i-starting-on-hashnode-now-hackathon">hackathon</a> =&gt; <a target="_blank" href="https://github.com/100stacks/1password-passage-hashnode-hackathon">https://github.com/100stacks/1password-passage-hashnode-hackathon</a>.</p>
<p>I came across this error when I pushed an update to the <a target="_blank" href="https://github.com/100stacks/1password-passage-hashnode-hackathon/blob/main/README.md"><code>README</code></a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687882767270/100d1d26-8d81-4ce1-a9ca-6b858f4a28de.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-troubleshooting-github-repo-images">Troubleshooting GitHub Repo Images</h2>
<p>This is odd, so I begin by troubleshooting the cover image by uploading it again, and seeing where the issue is.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687882993402/755810dd-f9d3-4dc1-ab9a-9d4b787325a6.png" alt class="image--center mx-auto" /></p>
<p>The second image link renders.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687883425173/45ee49d7-3b81-4f55-9f94-7d59932821f0.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-drop-the-image-link-in-a-browser">Drop the image link in a browser</h2>
<p>As I continue to troubleshoot the image error, I dropped the <a target="_blank" href="https://github-production-user-asset-6210df.s3.amazonaws.com/10120600/249209741-a4609b2d-0793-4ce2-8149-9978863f0100.png">image link</a> in a separate browser window. TIP: Typically when troubleshooting these types of rendering errors, I will open the link in different browsers to see what I can rule out.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687883989979/9967f566-5f74-45f7-885b-5f350d36a872.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-github-security-features">GitHub Security Features</h2>
<p>Originally, I created the <a target="_blank" href="https://github.com/100stacks/1password-passage-hashnode-hackathon">hackathon repo</a> as a <a target="_blank" href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility">Private repo</a>, then converted it to a Public Repo. It appears that when I converted the repo to <a target="_blank" href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility#making-a-repository-public"><mark>public visibility, I lost access to the image link.</mark></a></p>
<pre><code class="lang-javascript">&lt;<span class="hljs-built_in">Error</span>&gt;
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Code</span>&gt;</span>AccessDenied<span class="hljs-tag">&lt;/<span class="hljs-name">Code</span>&gt;</span></span>
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">Message</span>&gt;</span>Access Denied<span class="hljs-tag">&lt;/<span class="hljs-name">Message</span>&gt;</span></span>
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">RequestId</span>&gt;</span>4AWNBE4E25HZQEW3<span class="hljs-tag">&lt;/<span class="hljs-name">RequestId</span>&gt;</span></span>
    <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">HostId</span>&gt;</span>
        9N97rbcFk7VA4KSYW5I2nVBfXk7kxn8SLXb161Me59+jy1Z2SwvYOwa6BJ8jmiCEAGy5PTCyK3M=
    <span class="hljs-tag">&lt;/<span class="hljs-name">HostId</span>&gt;</span></span>
&lt;/<span class="hljs-built_in">Error</span>&gt;
</code></pre>
<h2 id="heading-keep-flexing-your-muscles">Keep flexing your muscles 🧠💪</h2>
<p>As software developers, you will come across many opportunities to troubleshoot errors. It's fundamental to our careers. No matter where you are in your career, you will have to flex your muscles multiple times a day, so keep exercising them. 😊</p>
]]></content:encoded></item><item><title><![CDATA[1Password Hackthon First Steps...Establish an Account]]></title><description><![CDATA[What's this for?
Before getting started with the hackathon, establish a 1Password account.
Sign-up for 1Password Dev Tools:

1Password's security is uniquely strong
You will need to create a password for your account. Your device (e.g., laptop and br...]]></description><link>https://blog.aiengineer.work/1password-hackthon-first-steps-establish-account</link><guid isPermaLink="true">https://blog.aiengineer.work/1password-hackthon-first-steps-establish-account</guid><category><![CDATA[1password]]></category><category><![CDATA[1password-hackathon]]></category><category><![CDATA[BuildWith1Password]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Tue, 27 Jun 2023 00:49:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/r8VbpgMS6Uc/upload/5ca8677683bdb4c539c3b462defdee6c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-whats-this-for">What's this for?</h2>
<p>Before getting started with the <a target="_blank" href="https://builditdeploy.hashnode.dev/why-am-i-starting-on-hashnode-now-hackathon">hackathon</a>, establish a <a target="_blank" href="https://hshno.de/2vBgtSn">1Password account</a>.</p>
<h2 id="heading-sign-up-for-1password-dev-tools">Sign-up for 1Password Dev Tools:</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687816773704/e4291ef9-fee2-4a72-8d09-27044c4b748d.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-1passwords-security-is-uniquely-strong">1Password's security is uniquely strong</h1>
<p>You will need to create a password for your account. Your device (e.g., laptop and browser) will be used to generate a <a target="_blank" href="https://www.techopedia.com/definition/24865/secret-key"><mark>Secret Key</mark></a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687816854613/7ac93bbb-60e9-4218-9fa6-7348d0a14444.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Think of them as two keys to one lock. The password is for everyday unlocking, while the Secret Key is for setting up new devices and authorizing access.</p>
</blockquote>
<h3 id="heading-set-up-an-account-password-you-can-easily-remember">Set up an account password you can easily remember:</h3>
<p>Next step is to establish a password for your account:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687817217260/192210c6-d736-4b2e-9680-494353b67694.png" alt class="image--center mx-auto" /></p>
<p>Notice that <code>1Password</code> cannot help you recover or reset your password. I'll have to see if this will become an issue. 😳</p>
<blockquote>
<p>1Password cannot reset this password. If you forget it, you might lose access to your account.</p>
</blockquote>
<h1 id="heading-get-your-unique-secret-key">Get your unique Secret Key</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687817540594/9ef2ea3a-76d0-4afa-820e-b8adf904d7ea.png" alt class="image--center mx-auto" /></p>
<p>Click the <code>Generate Secret Key</code> button.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687817826414/f3510605-b566-475a-9c0b-365c01bf6efb.png" alt class="image--center mx-auto" /></p>
<p>TIP: Make sure to click the <strong>Save PDF</strong> button to get a copy of your secret key.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687818096800/693f079a-462e-44ba-b3b3-34231a5a708b.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-finally-your-1password-account-is-created">Finally, your 1Password Account is created!</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687818195450/cb40aca5-8041-4452-ae19-657c06311850.png" alt class="image--center mx-auto" /></p>
<p>Now that my account is established, it's time to come up with an idea for the <a target="_blank" href="https://builditdeploy.hashnode.dev/why-am-i-starting-on-hashnode-now-hackathon">hackathon</a>. See you in the next article!</p>
<hr />
<p><a class="user-mention" href="https://hashnode.com/@builditdeploy">James Thompson</a>'s <a target="_blank" href="https://builditdeploy.hashnode.dev/series/1password-hackathon">1Password Hackathon</a> article series <a target="_blank" href="https://unsplash.com/photos/bJhT_8nbUA0">cover photo</a> by <a target="_blank" href="https://unsplash.com/@tateisimikito?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Jukan Tateisi</a> on <a target="_blank" href="https://unsplash.com/photos/bJhT_8nbUA0?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[Level Down to Level Up]]></title><description><![CDATA[Do it for the culture!
I'm a huge fan of swyx and what his revolutionary #LearnInPublic mantra has done in making it acceptable to learn new things in the public space. As he so eloquently puts it:

Try your best to be right, but don't worry when you...]]></description><link>https://blog.aiengineer.work/level-down-to-level-up</link><guid isPermaLink="true">https://blog.aiengineer.work/level-down-to-level-up</guid><category><![CDATA[Learning Journey]]></category><category><![CDATA[#learning-in-public]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Thu, 22 Jun 2023 23:24:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/_ABBh9ffIJU/upload/78c3e58fa6df5347bff8ccdf2f52f956.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-do-it-for-the-culture">Do it for the culture!</h1>
<p>I'm a huge fan of <a class="user-mention" href="https://hashnode.com/@swyx">swyx</a> and what his revolutionary <a target="_blank" href="https://twitter.com/swyx/status/1385349103106760705"><code>#LearnInPublic</code></a> mantra has done in making it acceptable to <a target="_blank" href="https://www.swyx.io/learn-in-public">learn new things in the public space</a>. As he so eloquently puts it:</p>
<blockquote>
<p>Try your best to be right, but don't worry when you're wrong.</p>
</blockquote>
<p>I take the above to mean "it's ok to mess up...learn from it". <strong><em>Doing it for the culture</em></strong> is learning and returning the knowledge gained to the extended creative community.</p>
<h2 id="heading-just-like-in-vegas">Just like in Vegas 🎲 🎰</h2>
<p>You will be wrong (betting) more times than you will be right (winning) in Las Vegas casinos. Unlike Vegas odds, when it comes to learning the "wrongs" in public helps you synthesize your knowledge.</p>
<h2 id="heading-learning-andgt-knowing-andgt-teaching">Learning =&gt; Knowing =&gt; Teaching</h2>
<p>When you learn something new, try to use or apply it to your career or in life. After gaining a better understanding, teach what you have learned to someone else. You will be <strong><em>giving back</em></strong> while also <strong><em>gaining</em></strong>.</p>
]]></content:encoded></item><item><title><![CDATA[Why am I starting on Hashnode now?  Hackathon!]]></title><description><![CDATA[Launching in ...3...2...1...
I recently received an email from Hashnode about the Hashnode + 1Password Hackathon. I haven't entered a hackathon for a bit, so I figured this is a good time and it provided the impetus to start writing about modern soft...]]></description><link>https://blog.aiengineer.work/why-am-i-starting-on-hashnode-now-hackathon</link><guid isPermaLink="true">https://blog.aiengineer.work/why-am-i-starting-on-hashnode-now-hackathon</guid><category><![CDATA[1password]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[BuildWith1Password]]></category><category><![CDATA[1password-hackathon]]></category><dc:creator><![CDATA[James Thompson]]></dc:creator><pubDate>Wed, 21 Jun 2023 18:01:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/uj3hvdfQujI/upload/d0d8dfc2b64eede186857515bf36635c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-launching-in-321">Launching in ...3...2...1...</h2>
<p>I recently received an email from <a target="_blank" href="https://hashnode.com/">Hashnode</a> about the <a target="_blank" href="https://hashnode.com/hackathons/1password?source=hackathon-feed-widget">Hashnode + 1Password Hackathon</a>. I haven't entered a hackathon for a bit, so I figured this is a good time and it provided the impetus to start writing about modern software application development. And also...it's one of the requirements to enter the <a target="_blank" href="https://1password.com/developers?utm_source=hashnode&amp;utm_medium=landing-page&amp;utm_campaign=hashnode-hackathon">1Password</a> hackathon. 😅</p>
<p>As a modern software developer, <a target="_blank" href="https://en.wikipedia.org/wiki/Authentication">authentication</a> is extremely important and vital to any production application. If you're building an application on your laptop or desktop, usually you do not have to log into it. That's the bane and bliss of most tutorials, they show you how to build an application, though <strong><em>deploying</em></strong> the application is actually what can initially take the most time and effort. Of course, a single tutorial would not cover all of the steps otherwise you would get overloaded! 🤯</p>
<p>There are several steps to building and deploying production applications - version control, handling merge conflicts among dev team(s), pull requests, code reviews, unit testing, integration testing, end-to-end testing, visual regression, automated pull request previews, staging environment(s), package management, security audits of application package dependencies, documentation, <a target="_blank" href="https://blog.bytebytego.com/p/ep49-api-architectural-styles">API</a> design, proper handling of API keys, accessibility, cross-browser compatibility, CI/CD pipelines, user management, backend database(s), user authentication, user authorization, application load time performance metrics, application secrets management, <a target="_blank" href="https://www.techtarget.com/searchsecurity/definition/two-factor-authentication">2FA</a>/<a target="_blank" href="https://en.wikipedia.org/wiki/Multi-factor_authentication">MFA</a> and much more!</p>
<p>Hence, the inspiration for the name...<code>Build It =&gt; Deploy 🚀</code></p>
<p>So, I'll start with tracking my progress through the hackathon and other interesting articles along the way.</p>
<p>Here we go...happy coding, <a class="user-mention" href="https://hashnode.com/@builditdeploy">James Thompson</a>! 🥳</p>
]]></content:encoded></item></channel></rss>