<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Irene Githundi</title>
    <description>The latest articles on DEV Community by Irene Githundi (@irene_githundi_fc0fcb5d1c).</description>
    <link>https://dev.to/irene_githundi_fc0fcb5d1c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3446691%2F44a41634-f87f-48e3-9188-9263188c47b5.jpg</url>
      <title>DEV Community: Irene Githundi</title>
      <link>https://dev.to/irene_githundi_fc0fcb5d1c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/irene_githundi_fc0fcb5d1c"/>
    <language>en</language>
    <item>
      <title>Permission Denied? The SSH Agent is the Secret Sauce for GitHub 🔑</title>
      <dc:creator>Irene Githundi</dc:creator>
      <pubDate>Fri, 30 Jan 2026 09:49:23 +0000</pubDate>
      <link>https://dev.to/irene_githundi_fc0fcb5d1c/permission-denied-the-ssh-agent-is-the-secret-sauce-for-github-dnn</link>
      <guid>https://dev.to/irene_githundi_fc0fcb5d1c/permission-denied-the-ssh-agent-is-the-secret-sauce-for-github-dnn</guid>
      <description>&lt;p&gt;If you're just starting out in DevOps, you've probably hit that wall: you've generated your SSH keys, you've added the public one to GitHub, and yet...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin main
# Error: Permission denied (publickey)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's maddening, isn't it? You've done all the steps, but GitHub still won't let you in. I spent ages on this, so let me save you the headache.&lt;/p&gt;

&lt;p&gt;The Key Pair is Only Half the Story&lt;/p&gt;

&lt;p&gt;We all know the basics of SSH authentication:&lt;/p&gt;

&lt;p&gt;•&lt;br&gt;
The Public Key (.pub): This is the one you give to GitHub. It's like the lock on the door.&lt;/p&gt;

&lt;p&gt;•&lt;br&gt;
The Private Key: This stays on your machine. It's the actual key that opens the lock. Keep it safe!&lt;/p&gt;

&lt;p&gt;I had both, and I had the right lock on the door. So what was the problem?&lt;/p&gt;

&lt;p&gt;The Missing Link: The SSH Agent&lt;/p&gt;

&lt;p&gt;Here's the bit that often gets left out of the beginner tutorials: your computer needs a way to use that private key automatically. That's where the SSH Agent comes in.&lt;/p&gt;

&lt;p&gt;Think of the Agent as a secure, temporary vault for your private keys. When you try to push code, the Agent automatically presents the key to GitHub. If the Agent isn't running, or if you haven't loaded your key into it, your terminal has no idea how to prove your identity.&lt;/p&gt;

&lt;p&gt;This was my "Aha!" moment. I hadn't told my system to load the key!&lt;/p&gt;
&lt;h2&gt;
  
  
  The Two-Line Fix That Changes Everything
&lt;/h2&gt;

&lt;p&gt;If you've generated your key and added the public part to GitHub, this is likely the missing piece of the puzzle. Run these two commands in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Start the SSH agent (if it's not already running)
eval "$(ssh-agent -s)"

# 2. Load your private key into the agent
ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro Tip: If you used a different name for your key, adjust the path in the ssh-add command.&lt;/p&gt;

&lt;p&gt;Once you've done that, you can test the connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh -T git@github.com
# You should see: Hi [YourUsername]! You've successfully authenticated... 🎉
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And just like that, your git push will work without a password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for DevOps
&lt;/h2&gt;

&lt;p&gt;This isn't just a convenience; it's a fundamental part of the DevOps workflow. Automated systems—like CI/CD pipelines or deployment scripts on a server—can't type passwords. SSH keys, managed by the Agent, provide the secure, non-interactive authentication that makes automation possible.&lt;/p&gt;

&lt;p&gt;If you're hitting this error, you're not alone. It's a classic beginner hurdle. Now you know the secret sauce!&lt;/p&gt;

</description>
      <category>github</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>Understanding Git Origins and Upstreams</title>
      <dc:creator>Irene Githundi</dc:creator>
      <pubDate>Fri, 30 Jan 2026 09:33:17 +0000</pubDate>
      <link>https://dev.to/irene_githundi_fc0fcb5d1c/understanding-git-origins-and-upstreams-hmc</link>
      <guid>https://dev.to/irene_githundi_fc0fcb5d1c/understanding-git-origins-and-upstreams-hmc</guid>
      <description>&lt;p&gt;When you fork a repository on GitHub, you're making a copy. But here's what nobody tells you clearly: you now have TWO versions of the same project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;origin    git@github.com:IreneGithundi/project.git
upstream  git@github.com:pravinmishra88/project.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;p&gt;upstream = The official project (the "source of truth")&lt;br&gt;
origin = Your personal copy (your "sandbox")&lt;/p&gt;

&lt;p&gt;Why Both?&lt;br&gt;
Here's the scenario that made it clear after much struggle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You fork a project on Monday&lt;/li&gt;
&lt;li&gt;You spend Tuesday and Wednesday coding your feature&lt;/li&gt;
&lt;li&gt;Meanwhile, 10 other developers push changes to the official project (upstream)&lt;/li&gt;
&lt;li&gt;On Thursday, you try to contribute your code back&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem: Your code is now outdated. You're working with Monday's version while everyone else is on Thursday's version.&lt;br&gt;
The solution: &lt;strong&gt;Sync **with upstream **BEFORE&lt;/strong&gt; you push.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Get the latest from the official project
git fetch upstream

# Merge those updates into your branch
git merge upstream/main

# Now push to YOUR fork
git push origin my-feature-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What's Actually Happening Here?&lt;br&gt;
Think of upstream as the company headquarters and origin as your local office branch:&lt;/p&gt;

&lt;p&gt;Fetch upstream = "Hey headquarters, what's new?"&lt;br&gt;
Merge = "Let me update my local office with headquarters' latest policies"&lt;br&gt;
Push to origin = "Now I'll save MY work to MY office"&lt;br&gt;
Pull Request = "Headquarters, I've made improvements. Want to add them to the official policy?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lightbulb moment:&lt;/strong&gt; You never push directly to upstream. You push to origin (your fork), then create a Pull Request asking upstream to accept your changes. This protects the official project from breaking.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>github</category>
      <category>learning</category>
    </item>
    <item>
      <title>DevOps as a Career Food-Tech Startup (and Autonomous Racing)</title>
      <dc:creator>Irene Githundi</dc:creator>
      <pubDate>Thu, 15 Jan 2026 08:31:29 +0000</pubDate>
      <link>https://dev.to/irene_githundi_fc0fcb5d1c/devops-as-a-career-food-tech-startup-and-autonomous-racing-3b18</link>
      <guid>https://dev.to/irene_githundi_fc0fcb5d1c/devops-as-a-career-food-tech-startup-and-autonomous-racing-3b18</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzw5hu8ze9ew38r3m4qm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzw5hu8ze9ew38r3m4qm.jpg" alt="DevOps-IFAS capability loop which demonstrates the advanced capability of IFAS in combining the development and operations practices at each stage of the cycle." width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Who knew DevOps could be used in food industries in Africa? Certainly not me when I started in 2025. But looking back from 2029, it's wild how things turned out. I'm now running SafeFood Systems, a company that helps food manufacturers across Kenya track quality and compliance automatically. And on weekends? I consult for university teams competing in the A2RL autonomous racing league. Here's how DevOps made all of this possible.&lt;/p&gt;

&lt;p&gt;When I started the DevOps Micro-Internship (DMI) by Pravin Mishra in early 2026, I honestly just wanted to learn CI/CD and land a tech job. But something clicked while building my first monitoring dashboard. I realized the same principles we use to keep software running could solve real problems in industries I actually cared about.&lt;/p&gt;

&lt;p&gt;By 2027, I started playing around with an idea: what if we monitored food processing the way we monitor servers? I wrote a few LinkedIn posts about it, mostly to organize my thoughts. A small dairy company in Nairobi saw one of my posts and reached out for help with their quality control nightmares. I built them a basic system using Docker and Jenkins to automate their quality checks. The results were immediate—they cut their failures by 30% in four months.&lt;/p&gt;

&lt;p&gt;That proof of concept became SafeFood Systems in 2028. By 2029, we had scaled to 6 clients across East Africa and 2 in Southern Africa. The platform monitors temperature, humidity, and contamination risks in real-time, then automatically generates compliance reports. I finally got to combine my DevOps skills with something that genuinely matters to people's health.&lt;/p&gt;

&lt;p&gt;The motorsport consulting started by accident. I've always loved watching Formula 1 and endurance racing series. When I discovered A2RL in 2026, I noticed something familiar: their systems worked perfectly in testing but failed under race pressure. I did my bootcamp project on this problem and documented everything publicly. One team noticed my work and asked for help building proper CI/CD pipelines for their autonomous racing code. That team placed second in the 2027 season.&lt;/p&gt;

&lt;p&gt;The craziest part? I'm not the smartest engineer. I just stayed consistent, built things people could see, and stopped waiting for someone to hand me opportunities. DevOps wasn't the end goal; it was the tool that let me work on problems I actually care about.&lt;/p&gt;

&lt;p&gt;This is part of DevOps Micro-Internship (DMI) by Pravin Mishra.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The Journey of a 2.0 Newbie</title>
      <dc:creator>Irene Githundi</dc:creator>
      <pubDate>Thu, 21 Aug 2025 10:45:19 +0000</pubDate>
      <link>https://dev.to/irene_githundi_fc0fcb5d1c/the-journey-of-a-20-newbie-5263</link>
      <guid>https://dev.to/irene_githundi_fc0fcb5d1c/the-journey-of-a-20-newbie-5263</guid>
      <description>&lt;p&gt;Learning a new skill is never easy; and programming has proven to be one of the hardest challenges I’ve faced.&lt;/p&gt;

&lt;p&gt;I began my coding journey in 2024 when I joined ALX, knowing nothing but eager to write those magical lines of code that bring apps or games to life. But reality hit me very fast. We began with Shell basics, which were smooth, then moved to C language, which humbled me. Starting C, I thought: &lt;em&gt;“If I can print Hello, World!, then I can do anything.”&lt;/em&gt; On came about functions, pointers and arrays which didn’t just confuse me but crush me to the pits. Instead of truly learning, I took shortcuts: copying code just to pass. Soon, I was drowning in recursion, data structures, and memory allocation without understanding the foundations. By June 2024, I knew I had to take a step back: I felt guilty, defeated, and convinced maybe programming wasn’t for me.&lt;/p&gt;

&lt;p&gt;Still, the dream never left. After months of reflection, I realized the first thing I needed to fix wasn’t my code; it was my mindset.&lt;/p&gt;

&lt;p&gt;Now, as I restart my journey, I come better prepared: mentally, emotionally, and practically. I know there will be long nights of debugging. I know errors will test my patience. But I also know this: quitting isn’t an option anymore.&lt;/p&gt;

&lt;p&gt;This time, my path is clear: &lt;strong&gt;Progress &amp;gt;&amp;gt;&amp;gt; Perfection.&lt;/strong&gt; &lt;/p&gt;

</description>
      <category>programming</category>
      <category>newbie</category>
      <category>fullstack</category>
    </item>
  </channel>
</rss>
