<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: AJAYI OBANIJESU TOLUWANIMI </title>
    <description>The latest articles on Forem by AJAYI OBANIJESU TOLUWANIMI  (@obeej).</description>
    <link>https://forem.com/obeej</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%2F3284071%2F949f9f9f-b756-4ced-aba6-570d8e1be805.png</url>
      <title>Forem: AJAYI OBANIJESU TOLUWANIMI </title>
      <link>https://forem.com/obeej</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/obeej"/>
    <language>en</language>
    <item>
      <title>Generating a new PEM key for AWS EC2</title>
      <dc:creator>AJAYI OBANIJESU TOLUWANIMI </dc:creator>
      <pubDate>Wed, 10 Sep 2025 09:13:22 +0000</pubDate>
      <link>https://forem.com/obeej/-436l</link>
      <guid>https://forem.com/obeej/-436l</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/drsimplegraffiti" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F616605%2F1e596ced-4a51-4cd9-9bc8-882fef99769a.webp" alt="drsimplegraffiti"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/drsimplegraffiti/generating-and-using-a-new-pem-key-for-ec2-2lam" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Generating and Using a New PEM Key for EC2&lt;/h2&gt;
      &lt;h3&gt;DrSimple ・ Sep 9&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How Internal Developer Platforms (IDPs) Help Reduce DevOps Bottlenecks</title>
      <dc:creator>AJAYI OBANIJESU TOLUWANIMI </dc:creator>
      <pubDate>Mon, 11 Aug 2025 14:24:12 +0000</pubDate>
      <link>https://forem.com/obeej/how-internal-developer-platforms-idps-help-reduce-devops-bottlenecks-4ml5</link>
      <guid>https://forem.com/obeej/how-internal-developer-platforms-idps-help-reduce-devops-bottlenecks-4ml5</guid>
      <description>&lt;p&gt;DevOps teams often face a surprising challenge: developers spend too much time managing infrastructure instead of focusing on code. This slows down delivery and reduces productivity.&lt;/p&gt;

&lt;p&gt;Internal Developer Platforms (IDPs) are designed to solve this by centralizing tools, automating workflows, and providing developers with self-service access to infrastructure. This reduces complexity and lets teams move faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways from working with and researching IDPs:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automation and centralization accelerate delivery&lt;/strong&gt; by reducing manual work and errors.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Culture and collaboration matter.&lt;/strong&gt; An IDP won’t fix siloed teams, improving communication is essential.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build vs. buy is a trade-off.&lt;/strong&gt; Building custom IDPs can fit exact needs but take time and resources. Buying or customizing existing solutions is faster but less flexible.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start with a Minimum Viable Platform (MVP)&lt;/strong&gt; that addresses real developer pain points. Incrementally improve it based on feedback.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, a well-designed IDP frees developers from infrastructure headaches so they can focus on building great software.  &lt;/p&gt;

&lt;p&gt;Have you used an IDP in your organization? What was your experience?  &lt;/p&gt;




&lt;p&gt;&lt;em&gt;#DevOps #IDP #PlatformEngineering #SoftwareDevelopment&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>go</category>
    </item>
    <item>
      <title>Terraform Opened My Eyes</title>
      <dc:creator>AJAYI OBANIJESU TOLUWANIMI </dc:creator>
      <pubDate>Mon, 21 Jul 2025 01:23:56 +0000</pubDate>
      <link>https://forem.com/obeej/terraform-opened-my-eyes-13c7</link>
      <guid>https://forem.com/obeej/terraform-opened-my-eyes-13c7</guid>
      <description>&lt;p&gt;I’ve been practicing my cloud apps building skills on AWS for a while now, dealing with EC2, RDS, S3, SES, and CloudWatch through the console. &lt;/p&gt;

&lt;p&gt;It’s been my life as a software engineer, grinding to build stuff and completing projects despite occasional internet hiccups. &lt;/p&gt;

&lt;p&gt;For months, I kept hearing about Terraform on YouTube, blogs and articles, everywhere...but I thought, “Why bother? The console works.” &lt;strong&gt;Spoiler:&lt;/strong&gt; I was so wrong.&lt;/p&gt;

&lt;p&gt;A few hours ago, I finally gave Terraform a try, and I’m kicking myself for not starting sooner. It’s like I was fetching water with a bucket and someone handed me a tap. Writing infrastructure as code isn’t just cool; it’s a total game-changer. &lt;/p&gt;

&lt;p&gt;I can script my entire setup, save it, and deploy it without endless clicking. 😮‍💨 Feels like a breeze! It’s clean, repeatable, and honestly, kind of fun too.&lt;/p&gt;

&lt;p&gt;For the first few hours, I got hooked. I spun up an EC2 instance and an S3 bucket in minutes. Done testing? I deleted it all instantly, saving costs. It’s like having a power to build and unbuild at will.&lt;/p&gt;

&lt;p&gt;Git is my new best friend 😁. I can track infrastructure changes in Git, just like my code. No more “who broke the setup?” moments. Everything’s logged, clear, and shareable.&lt;br&gt;
Work without drama. Forget “it works on my console” excuses. With Terraform, I can use the same code, so the environments match perfectly.&lt;/p&gt;

&lt;p&gt;AWS loves it. Terraform plays nicely with EC2, RDS, S3, and more. I was worried it’d be hard to learn, but it felt like a natural fit for my AWS workflow.&lt;/p&gt;

&lt;p&gt;I won't have to deal with environment mismatches. I used to dread bugs...😬 from dev and prod being slightly off. But then, Terraform keeps them identical, Terraform to the world!&lt;/p&gt;

&lt;p&gt;For cloud engineers like me, where every minute and resource counts, Terraform is like a shortcut to sanity. If you’re still clicking through AWS, you’re probably working harder than you need to.&lt;/p&gt;

&lt;p&gt;Terraform isn’t just for AWS. It works with Azure, Google Cloud, and more, so my skills are ready for any project. &lt;/p&gt;




&lt;p&gt;Try It Out&lt;br&gt;
If you’re curious, start small. Set up an EC2 instance or S3 bucket with Terraform. It’s easier than you think, and once it clicks, you’ll want to script everything. &lt;/p&gt;

&lt;p&gt;Guys, let’s make our lives easier!&lt;br&gt;
What’s your Terraform story? Are you already a fan, or are you just hearing about it like I was? Drop a comment,let’s talk cloud!&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>cloud</category>
      <category>go</category>
      <category>infrastructureascode</category>
    </item>
    <item>
      <title>Understanding Recursive Resolvers in DNS</title>
      <dc:creator>AJAYI OBANIJESU TOLUWANIMI </dc:creator>
      <pubDate>Thu, 10 Jul 2025 15:19:08 +0000</pubDate>
      <link>https://forem.com/obeej/understanding-recursive-resolvers-in-dns-3ahl</link>
      <guid>https://forem.com/obeej/understanding-recursive-resolvers-in-dns-3ahl</guid>
      <description>&lt;p&gt;As I was exploring the backend engineering roadmap on roadmap.sh, I stumbled upon an interesting concept: the &lt;strong&gt;recursive resolver&lt;/strong&gt;. It struck me as a key part of how the internet works, and since teaching is a great way to solidify my own understanding, I thought I’d share what I’ve learned so far.&lt;/p&gt;




&lt;h2&gt;
  
  
  🕵️ What Exactly Is a Recursive Resolver?
&lt;/h2&gt;

&lt;p&gt;In simple terms, it’s like a helpful &lt;strong&gt;detective&lt;/strong&gt; that steps in when your device needs to find the IP address for a website domain (like &lt;code&gt;www.google.com&lt;/code&gt;). When you type a URL into your browser, it doesn’t automatically know where to go—that’s where DNS (Domain Name System) comes in. The recursive resolver takes on the task of querying the right servers to get that information.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ How Does It Work?
&lt;/h2&gt;

&lt;p&gt;Here's how I understand the process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The recursive resolver first checks its own &lt;strong&gt;cache&lt;/strong&gt;—a sort of short-term memory—to see if it already knows the answer from a previous query.&lt;/li&gt;
&lt;li&gt;If it finds the IP address there, it sends it back to your device &lt;strong&gt;immediately&lt;/strong&gt;, saving time.&lt;/li&gt;
&lt;li&gt;If not, it &lt;strong&gt;starts querying DNS servers in sequence&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;First, it asks the &lt;strong&gt;Root DNS servers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Root servers respond with a referral to &lt;strong&gt;TLD (Top-Level Domain) servers&lt;/strong&gt; like &lt;code&gt;.com&lt;/code&gt; or &lt;code&gt;.org&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;TLD servers then point to the &lt;strong&gt;authoritative name servers&lt;/strong&gt; responsible for the specific domain (like &lt;code&gt;google.com&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;authoritative server&lt;/strong&gt; returns the correct IP address.&lt;/li&gt;
&lt;li&gt;The recursive resolver passes it back to your device and &lt;strong&gt;stores it in cache&lt;/strong&gt; for future use.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This caching is super useful—it acts like a notebook of addresses you’ve looked up before, so the resolver doesn’t need to do all that work again next time.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Why It Matters
&lt;/h2&gt;

&lt;p&gt;This mechanism is a big part of what keeps the internet fast and reliable. Without recursive resolvers, every time you typed in a website, your device would have to go through the entire chain of DNS servers &lt;em&gt;from scratch&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It’s amazing how something so behind-the-scenes plays such a crucial role in our daily internet experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I’m still wrapping my head around the deeper technical details, but even this overview has made me appreciate how well-engineered DNS is. If you’ve got insights to add or corrections to make, feel free to drop a comment—I'm always eager to learn more!&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Enjoyed this?&lt;/strong&gt; Drop a ❤️, save it for later, or share with a fellow learner.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dns</category>
      <category>webdev</category>
      <category>backend</category>
      <category>networking</category>
    </item>
    <item>
      <title>ACID in Databases: What It Really Means (with Real-Life Bank Scenarios in the USA &amp; Germany)</title>
      <dc:creator>AJAYI OBANIJESU TOLUWANIMI </dc:creator>
      <pubDate>Wed, 25 Jun 2025 18:19:18 +0000</pubDate>
      <link>https://forem.com/obeej/acid-in-databases-what-it-really-means-with-real-life-bank-scenarios-in-the-usa-germany-3n4p</link>
      <guid>https://forem.com/obeej/acid-in-databases-what-it-really-means-with-real-life-bank-scenarios-in-the-usa-germany-3n4p</guid>
      <description>&lt;p&gt;🧪 &lt;strong&gt;ACID in Databases:&lt;/strong&gt; What It Really Means (Using Real-Life Bank Scenarios in the USA &amp;amp; Germany)&lt;/p&gt;

&lt;p&gt;When developers hear &lt;strong&gt;“ACID compliance”&lt;/strong&gt; in databases, it can sound like something reserved for DB admins or engineers dealing with banking systems. But understanding &lt;strong&gt;ACID&lt;/strong&gt; is essential. Whether you're building fintech apps, online stores, or backend APIs.&lt;/p&gt;

&lt;p&gt;So let’s strip away the jargon and see what &lt;strong&gt;ACID&lt;/strong&gt; really means through real-world bank scenarios in &lt;strong&gt;the USA and Germany&lt;/strong&gt;, and how you can build compliant systems using &lt;strong&gt;GoLang&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👨‍💼 &lt;strong&gt;Real-World Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’re in a New York or Berlin bank. You're sending &lt;strong&gt;$1,000 / €1,000&lt;/strong&gt; to your friend. Everything seems smooth, until the system crashes halfway. 😳&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now ask yourself:
&amp;gt; “&lt;em&gt;Will the money leave my account and never reach theirs?&lt;/em&gt;”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your database is &lt;strong&gt;ACID-compliant&lt;/strong&gt;, the answer is &lt;strong&gt;NONO&lt;/strong&gt;. And here’s why.&lt;/p&gt;

&lt;p&gt;🧱 &lt;strong&gt;What Is ACID?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACID stands for:&lt;/p&gt;

&lt;p&gt;| A      | &lt;strong&gt;Atomicity&lt;/strong&gt;   | All or nothing |&lt;br&gt;
| C      | &lt;strong&gt;Consistency&lt;/strong&gt; | Rules must be obeyed |&lt;br&gt;
| I      | &lt;strong&gt;Isolation&lt;/strong&gt;   | Don’t mix transactions |&lt;br&gt;
| D      | &lt;strong&gt;Durability&lt;/strong&gt;  | What’s done is done |&lt;/p&gt;

&lt;p&gt;🔍 &lt;strong&gt;Now Let’s Break It Down (USA + Germany Bank)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅  &lt;strong&gt;A — Atomicity ("All or Nothing")&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;🇺🇸 USA Example&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
You use Bank of America to send &lt;strong&gt;$1,000&lt;/strong&gt;. If the bank debits you but &lt;strong&gt;can’t credit your friend’s Wells Fargo account&lt;/strong&gt; (due to network issues), atomicity ensures it &lt;strong&gt;reverses the debit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🇩🇪 Germany Example&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
At Deutsche Bank, if a SEPA transfer fails after removing €1,000 from your account, the system must &lt;strong&gt;rollback&lt;/strong&gt; so it looks like nothing happened.&lt;/p&gt;

&lt;p&gt;🧠 &lt;em&gt;Takeaway&lt;/em&gt;: A transaction &lt;strong&gt;must complete fully&lt;/strong&gt; or &lt;strong&gt;not at all&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;C — Consistency ("Rules Are Rules")&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s say there’s a rule: “No account should go below €0.”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You only have &lt;strong&gt;€500&lt;/strong&gt;, but try to send &lt;strong&gt;€1,000&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A consistent system will &lt;strong&gt;reject the transaction&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧠 &lt;em&gt;Takeaway&lt;/em&gt;: Your database must always stay in a &lt;strong&gt;valid state&lt;/strong&gt;, respecting all constraints.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;I — Isolation ("One At A Time, Please")&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s say &lt;strong&gt;two people&lt;/strong&gt; are booking the &lt;strong&gt;last concert ticket&lt;/strong&gt; in Berlin.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without isolation, both might be charged.&lt;/li&gt;
&lt;li&gt;With proper isolation, only &lt;strong&gt;one gets the ticket&lt;/strong&gt;, the other sees “sold out.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧠 &lt;em&gt;Takeaway&lt;/em&gt;: Transactions &lt;strong&gt;don’t interfere&lt;/strong&gt; with each other.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;D — Durability ("What’s Done Is Done")&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're in New York. You transfer &lt;strong&gt;$1,000&lt;/strong&gt;. The teller says “Done.”&lt;br&gt;&lt;br&gt;
Then the &lt;strong&gt;system crashes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If the system is durable, the transaction is &lt;strong&gt;safe&lt;/strong&gt; — it’s permanently written, even if a crash happens.&lt;/p&gt;

&lt;p&gt;🧠 &lt;em&gt;Takeaway&lt;/em&gt;: Once a transaction is committed, it stays &lt;strong&gt;committed&lt;/strong&gt;, no matter what.&lt;/p&gt;

&lt;p&gt;🛠️ &lt;strong&gt;Can You Build ACID-Compliant Systems with GoLang?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Absolutely.&lt;/strong&gt; Go is perfect for writing transactional logic, and it integrates well with ACID-compliant databases.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Common Go Stacks for ACID:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐘 PostgreSQL (full ACID)&lt;/li&gt;
&lt;li&gt;🪵 CockroachDB (distributed ACID, built in the USA)&lt;/li&gt;
&lt;li&gt;🧱 FoundationDB (NoSQL with ACID)&lt;/li&gt;
&lt;li&gt;💾 SQLite (embedded ACID)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample Go Transaction (PostgreSQL)&lt;/strong&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
go
tx, err := db.Begin()
if err != nil {
    log.Fatal(err)
}

_, err = tx.Exec("UPDATE accounts SET balance = balance - $1 WHERE id = $2", 1000, senderID)
// other queries...

if err != nil {
    tx.Rollback()
} else {
    tx.Commit()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>go</category>
      <category>database</category>
      <category>backend</category>
      <category>fintech</category>
    </item>
    <item>
      <title>Rust’s Approach to Memory and Performance</title>
      <dc:creator>AJAYI OBANIJESU TOLUWANIMI </dc:creator>
      <pubDate>Tue, 24 Jun 2025 00:46:02 +0000</pubDate>
      <link>https://forem.com/obeej/rusts-approach-to-memory-and-performance-1m22</link>
      <guid>https://forem.com/obeej/rusts-approach-to-memory-and-performance-1m22</guid>
      <description>&lt;p&gt;&lt;strong&gt;Quick GoStart → Rust Curiosity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve been coding in GoLang for about 4 months...mostly APIs with net/http and Gin. I love how fast and “get-out-of-your-way” it is. But after little tour on programming language to learn after GoLang on YouTube, I found myself wondering: “What’s the deal with Rust?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero GC Drama = Predictable Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In GoLang, the garbage collector can pop up like an unannounced electricity blackout... small blip, but it’s there. Rust skips GC entirely, using its compile-time “ownership” model to manage memory. No surprise clean-ups, no hidden leaks, just tight, predictable performance. And those “zero-cost abstractions”? Sleek name, but it simply means you write clear, high-level code that compiles down to C-like speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Still a Go Fan,&lt;/strong&gt; But Tempted&lt;/p&gt;

&lt;p&gt;I’m not packing up my Gin routes just yet, but Rust’s discipline—strict checks, no shortcuts, and strong safety... has me sold on exploring more. &lt;/p&gt;

&lt;p&gt;If you’ve jumped from Go to Rust before, how was the ownership learning curve?&lt;/p&gt;

</description>
      <category>rust</category>
      <category>discuss</category>
      <category>backend</category>
      <category>go</category>
    </item>
  </channel>
</rss>
