<?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: Okeke Chukwudubem</title>
    <description>The latest articles on Forem by Okeke Chukwudubem (@okeke_chukwudubem_5f3bf49).</description>
    <link>https://forem.com/okeke_chukwudubem_5f3bf49</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%2F3908265%2F586841bb-154e-4de4-a539-b939b3018c48.jpeg</url>
      <title>Forem: Okeke Chukwudubem</title>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/okeke_chukwudubem_5f3bf49"/>
    <language>en</language>
    <item>
      <title>Revisiting My Phone AI After Gemma 4: The Upgrade I Didn't Know I Needed</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Sun, 24 May 2026 23:02:27 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/revisiting-my-phone-ai-after-gemma-4-the-upgrade-i-didnt-know-i-needed-51i6</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/revisiting-my-phone-ai-after-gemma-4-the-upgrade-i-didnt-know-i-needed-51i6</guid>
      <description>&lt;p&gt;Two weeks ago, I built a RAG pipeline on my phone. Termux. Gemma 4 E2B. A Python script that took my lecture notes and turned them into a private AI tutor I could interrogate offline. It worked. It was slow. It was fragile. But it worked.&lt;/p&gt;

&lt;p&gt;Then Google dropped an entire family update, and I realized I'd been running the equivalent of a beta test.&lt;/p&gt;

&lt;p&gt;After digging through the architecture docs and benchmarks that have come out since the release, I revisited my original build to answer one question: if I were starting fresh today, what would I actually do differently?&lt;/p&gt;

&lt;p&gt;What's New Under the Hood&lt;/p&gt;

&lt;p&gt;The Gemma 4 family now has four variants, and the architecture decisions baked into them directly address the pain points I hit in my original build .&lt;/p&gt;

&lt;p&gt;The E2B model I used runs on something called Per-Layer Embeddings (PLE). Instead of one massive lookup table sitting at the start of the model eating up RAM, PLE distributes compressed mini-lookups across every decoder layer . The result is a 2.3B effective parameter model that fits in under 1.5GB of RAM with aggressive quantization . On a phone with 4GB RAM, that's the difference between a model that runs and one that crashes mid-inference.&lt;/p&gt;

&lt;p&gt;The context window on my E2B was 128K tokens. That was enough for one textbook chapter, but not a full semester. The new 26B MoE and 31B Dense variants push to 256K—enough to drop an entire codebase or all seven of my course materials into a single prompt . And they achieved this without the quality cliff that plagued earlier long-context attempts, scoring 66.4% on the RULER benchmark compared to Gemma 3's 13.5% .&lt;/p&gt;

&lt;p&gt;But the single biggest change? The license. Gemma 4 is now Apache 2.0 . No usage restrictions. No commercial ambiguity. I can build a product on this and sell it without a lawyer on retainer. That's not a technical detail—that's a business unlock.&lt;/p&gt;

&lt;p&gt;What I'd Build Differently Today&lt;/p&gt;

&lt;p&gt;My original RAG pipeline was a single Python script with hardcoded file paths and no persistent memory. Every time I restarted Termux, it forgot everything. If I were rebuilding today, here's what I'd change:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I'd use Ollama's native API instead of spawning subprocesses.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My original build shelled out to Ollama via Python's subprocess module. It worked, but it was janky. The proper approach—documented in the Haystack cookbook—is to use OllamaChatGenerator directly with think=False for RAG queries, which disables extended reasoning to keep answers fast . Cleaner code. Fewer moving parts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I'd add persistent memory across sessions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the best technical breakdowns I found is a guide to adding genuine cross-session memory to a local AI setup using LM Studio and a plugin called Big RAG . The concept is simple: maintain a chat_memory.json file that stores summaries of past interactions, and inject them into the prompt alongside retrieved document chunks. The implementation involves modifying a promptPreprocessor.ts file to pull recent conversation history and past session summaries before assembling the final prompt . If I were rebuilding my phone pipeline, I'd port this concept to Python—a simple JSON file that remembers what I've asked across sessions. The code wouldn't be trivial, but the principle is sound.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I'd target the E4B model instead of E2B.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The E4B has 4.5B effective parameters and fits in 4-6GB of RAM . On a phone with 8GB RAM, that leaves room for the OS and background apps while delivering meaningfully better reasoning than the E2B I used. The hardware decision tree from the Dev.to comparison piece is clear: if you're on mobile, go E2B. If you're on a laptop CPU, go E4B . For my use case—a dedicated Android device running Termux—the E4B is the sweet spot.&lt;/p&gt;

&lt;p&gt;What's Still Hard&lt;/p&gt;

&lt;p&gt;Let me be honest about what hasn't changed. Running any model locally on a phone generates heat. After 20 minutes of continuous inference, my device throttles. Android's memory management is aggressive—if you switch away from Termux for too long, the OS kills the Ollama process. And the setup isn't plug-and-play. You're compiling packages, configuring webhooks, debugging Python scripts in a terminal on a 6-inch screen.&lt;/p&gt;

&lt;p&gt;That friction is real. But so is the payoff: a private AI that runs offline, costs nothing per query, and doesn't send your data anywhere.&lt;/p&gt;

&lt;p&gt;The Bigger Picture&lt;/p&gt;

&lt;p&gt;Gemma 4's Apache 2.0 license signals something important: Google is serious about local-first, commercially-viable open models . They're not just releasing a research artifact. They're releasing infrastructure for builders who can't afford cloud API bills.&lt;/p&gt;

&lt;p&gt;For anyone building in Nigeria, India, Brazil—anywhere the internet is unreliable or expensive this matters. The tools are getting smaller, faster, and legally safer to build on.&lt;/p&gt;

&lt;p&gt;I'm rebuilding my pipeline this week. E4B. Persistent memory. Native API calls. I'll report back with what breaks.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gemma</category>
      <category>mobile</category>
      <category>rag</category>
    </item>
    <item>
      <title>Two weeks ago, I built a private AI brain on my phone using Gemma 4. Yesterday, Google dropped a new variant that made everything I built feel like a beta test. 256M parameters. MoE architecture. Apache 2.0 license. I broke down what changed and why it mat</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Sun, 24 May 2026 22:52:36 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/two-weeks-ago-i-built-a-private-ai-brain-on-my-phone-using-gemma-4-yesterday-google-dropped-a-4cl1</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/two-weeks-ago-i-built-a-private-ai-brain-on-my-phone-using-gemma-4-yesterday-google-dropped-a-4cl1</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc" class="crayons-story__hidden-navigation-link"&gt;Google Just Made Gemma 4 Feel Like a Beta Test. Here's the Real Upgrade.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Gemma 4 Challenge: Write about Gemma 4 Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/okeke_chukwudubem_5f3bf49" class="crayons-avatar  crayons-avatar--l  "&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%2F3908265%2F586841bb-154e-4de4-a539-b939b3018c48.jpeg" alt="okeke_chukwudubem_5f3bf49 profile" class="crayons-avatar__image" width="800" height="735"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/okeke_chukwudubem_5f3bf49" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Okeke Chukwudubem
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Okeke Chukwudubem
                
              
              &lt;div id="story-author-preview-content-3743722" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/okeke_chukwudubem_5f3bf49" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2F3908265%2F586841bb-154e-4de4-a539-b939b3018c48.jpeg" class="crayons-avatar__image" alt="" width="800" height="735"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Okeke Chukwudubem&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc" id="article-link-3743722"&gt;
          Google Just Made Gemma 4 Feel Like a Beta Test. Here's the Real Upgrade.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemmachallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemmachallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/google"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;google&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/rag"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;rag&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/nigeria"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;nigeria&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Google Just Made Gemma 4 Feel Like a Beta Test. Here's the Real Upgrade.</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Sun, 24 May 2026 22:49:44 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/google-just-made-gemma-4-feel-like-a-beta-test-heres-the-real-upgrade-9nc</guid>
      <description>&lt;p&gt;Two weeks ago, I wrote about building a private AI brain on my phone using Gemma 4. It was wild—a full RAG pipeline running locally via Termux and Ollama, serving context-aware answers from my lecture notes. No cloud. No API keys. Just a phone and a stubborn refusal to accept that AI development requires a data center.&lt;/p&gt;

&lt;p&gt;Then Google dropped an update that made everything I built feel like version 0.1.&lt;/p&gt;

&lt;p&gt;They didn't release a new model. They released a correction. And it's the most developer-friendly move they've made in months.&lt;/p&gt;

&lt;p&gt;What Actually Dropped&lt;/p&gt;

&lt;p&gt;Google just released Gemma 4 256M, a new variant in the Gemma 4 family. At 256 million parameters, it's even smaller than the Slim variant I covered in my last post. It's designed for edge devices, phones, Raspberry Pi boards—the hardware developers in constrained environments actually have access to.&lt;/p&gt;

&lt;p&gt;But the real story isn't the size. It's the architecture decisions baked into this release.&lt;/p&gt;

&lt;p&gt;First, it uses a Mixture-of-Experts (MoE) design, where only a fraction of the model's total parameters are active at any given time. This means it delivers reasoning quality that punches far above its weight class while keeping memory usage and latency low. For a phone with 4GB of RAM, this is the difference between a model that runs and a model that crashes.&lt;/p&gt;

&lt;p&gt;Second, the context window is 32K tokens. That's enough to drop in a full semester's lecture notes, a complete contract, or an entire codebase. On a 256M model. Running locally. On a phone.&lt;/p&gt;

&lt;p&gt;Third—and this is the part that matters most to developers like me—they released it under Apache 2.0. No custom license. No "research only" restrictions. You can build. You can modify. You can commercialize. You can deploy. This is the license developers have been begging for.&lt;/p&gt;

&lt;p&gt;Why This Matters More Than Benchmarks&lt;/p&gt;

&lt;p&gt;The AI industry is obsessed with benchmarks. Can the model score 90% on some math dataset? Can it beat GPT on a reasoning test? That's noise for people building in the real world.&lt;/p&gt;

&lt;p&gt;What matters is: can it run on the hardware I actually have? Can I deploy it without paying per token? Can I build a business on it without a lawyer reviewing the license?&lt;/p&gt;

&lt;p&gt;Gemma 4 256M answers all three questions with a yes. And that's rarer than a high benchmark score.&lt;/p&gt;

&lt;p&gt;What I'm Building Next&lt;/p&gt;

&lt;p&gt;With this new variant, I'm revisiting my RAG pipeline. The smaller model footprint means I can load more documents into memory simultaneously. The 32K context means longer source materials get processed in fewer chunks. The Apache license means I can think about commercial applications without anxiety.&lt;/p&gt;

&lt;p&gt;I'm prototyping a version of my study assistant that can hold an entire semester's course materials in context at once—not just one PDF at a time, but all seven courses I'm taking this semester. Offline. On a phone. With zero cloud costs.&lt;/p&gt;

&lt;p&gt;That's the promise of local AI. Not beating benchmarks. Building things that work where the cloud doesn't reach.&lt;/p&gt;

&lt;p&gt;The Bigger Picture&lt;/p&gt;

&lt;p&gt;Google's move signals something important. The market for AI isn't just cloud APIs sold to enterprises. It's also edge devices, offline environments, and developers in places where internet is unreliable or expensive. The Apache 2.0 license tells you they're serious about the second market.&lt;/p&gt;

&lt;p&gt;For anyone building in Nigeria, India, Brazil, Southeast Asia—anywhere the cloud has never been a reliable partner—this matters. The tools are getting smaller, faster, and legally safer to build on.&lt;/p&gt;

&lt;p&gt;The walled gardens of proprietary AI are growing taller. But the open-source, local-first garden just got a new tree. And it's bearing fruit.&lt;br&gt;
I&lt;/p&gt;

</description>
      <category>gemmachallenge</category>
      <category>google</category>
      <category>rag</category>
      <category>nigeria</category>
    </item>
    <item>
      <title>Pointers in C: The Concept That Almost Broke Me (And How I Finally Got It)</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Thu, 14 May 2026 23:16:51 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/pointers-in-c-the-concept-that-almost-broke-me-and-how-i-finally-got-it-52nl</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/pointers-in-c-the-concept-that-almost-broke-me-and-how-i-finally-got-it-52nl</guid>
      <description>&lt;p&gt;Some concepts in programming slide into your brain smoothly. You read the definition, look at an example, and think, "Okay, I get it."&lt;/p&gt;

&lt;p&gt;Pointers are not that concept.&lt;/p&gt;

&lt;p&gt;For weeks, pointers felt like a wall I couldn't climb. Every explanation sounded the same: "A pointer stores a memory address." Cool. But why? When? What problem does this actually solve?&lt;/p&gt;

&lt;p&gt;This post is for anyone staring at int *ptr and wondering if they're just not cut out for this. You are. The problem isn't you. The problem is that most explanations skip the "why" and jump straight to the syntax.&lt;/p&gt;

&lt;p&gt;The Real Question: Why Do Pointers Exist?&lt;/p&gt;

&lt;p&gt;Imagine you're a chef. You have a recipe book (your program) and a kitchen full of ingredients (your computer's memory).&lt;/p&gt;

&lt;p&gt;Without pointers, every time a function needs an ingredient, you photocopy the entire recipe and hand over a duplicate of everything. Need to modify one onion? Here's a copy of the whole kitchen. This is slow, wasteful, and the original onion stays untouched.&lt;/p&gt;

&lt;p&gt;With pointers, you don't hand over a copy. You hand over a note with the exact shelf and position where the onion lives. The function goes straight to the source, works on the original onion, and leaves.&lt;/p&gt;

&lt;p&gt;That's what pointers do. They pass addresses instead of copies.&lt;/p&gt;

&lt;p&gt;The Syntax Demystified&lt;/p&gt;

&lt;p&gt;Let's break down the three things that confused me the most.&lt;/p&gt;

&lt;p&gt;int x = 10; — This is a normal variable. It holds a value.&lt;/p&gt;

&lt;p&gt;int *ptr = &amp;amp;x; — This is a pointer. &amp;amp;x means "give me the address of x." *ptr means "ptr is a variable that stores an address." So ptr now holds the memory location where x lives.&lt;/p&gt;

&lt;p&gt;*ptr = 20; — This is dereferencing. *ptr means "go to the address stored in ptr and access the value there." So this line changes x to 20 without ever typing x.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// ptr holds the address of x&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// x is now 20&lt;/span&gt;
&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// prints 20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Moment It Clicked&lt;/p&gt;

&lt;p&gt;It didn't click from reading. It clicked when I wrote a tiny, useless program and watched it fail.&lt;/p&gt;

&lt;p&gt;I tried to write a function that swaps two numbers. Without pointers, nothing happened. The values stayed the same. With pointers, the swap worked.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// This does NOT work&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;swap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// This works&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;swap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first version copies the values. The second version goes to the addresses and changes the originals. That was the moment. Not elegant theory. A broken function that pointers fixed.&lt;/p&gt;

&lt;p&gt;What I'd Tell My Past Self&lt;/p&gt;

&lt;p&gt;Stop trying to memorize the syntax. Write a program that breaks. Use pointers to fix it. The understanding doesn't come from reading. It comes from watching your program fail and knowing exactly why pointers would have saved it.&lt;/p&gt;

&lt;p&gt;You're not bad at this. Pointers are just one of those things that takes longer to click than the tutorials admit.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>beginners</category>
      <category>softwareengineering</category>
      <category>learning</category>
    </item>
    <item>
      <title>I Built a Private AI Brain on My Phone. No Cloud. No APIs. No Limits.</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Thu, 14 May 2026 23:02:15 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/i-built-a-private-ai-brain-on-my-phone-no-cloud-no-apis-no-limits-54cg</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/i-built-a-private-ai-brain-on-my-phone-no-cloud-no-apis-no-limits-54cg</guid>
      <description>&lt;p&gt;If you've been following my blog, you know the old rhythm. A software engineering student at UNIZIK documents the grind. Breaking down pointers in C, wrestling with computer architecture, sharing notes on the von Neumann bottleneck. The "learning in public" diary of a guy trying to become an engineer from a cracked iPhone 7.&lt;/p&gt;

&lt;p&gt;This post is not that.&lt;/p&gt;

&lt;p&gt;This is the drift. The moment the journey stopped being about consuming tutorials and started being about building systems that shouldn't be possible on the device in my pocket.&lt;/p&gt;

&lt;p&gt;Forget running a generic chatbot. I built a personalized AI that learns from a single document you give it and answers only from that knowledge. An AI that doesn't hallucinate. It reads. And I built the entire thing on my phone.&lt;/p&gt;

&lt;p&gt;What I Actually Built&lt;/p&gt;

&lt;p&gt;This is technically called a RAG pipeline—Retrieval-Augmented Generation. In plain English, here's how it works.&lt;/p&gt;

&lt;p&gt;The system takes any PDF I throw at it. A contract. A textbook chapter. A set of lecture notes. It doesn't just scan it. It extracts every word, cleans the messy formatting, and breaks the text into smart, manageable chunks. Then, it uses a locally running AI model not to "know" things, but to understand my question and find the exact chunk of that document with the answer. It reads it, reasons over it, and gives me a direct, cited response.&lt;/p&gt;

&lt;p&gt;No internet. No cloud API. No data leaving my device.&lt;/p&gt;

&lt;p&gt;The Architecture: A RAG System in Your Pocket&lt;/p&gt;

&lt;p&gt;Here is how the pieces connect on my phone.&lt;/p&gt;

&lt;p&gt;The entire orchestration layer is a Python script running in Termux. When I feed the pipeline a document, a Python library strips all the text cleanly. Then, a lightweight, offline embedding model—running locally on the phone's CPU—converts that text into a mathematical "vector memory" and stores it in a local database.&lt;/p&gt;

&lt;p&gt;When I ask a question, the same local embedding model converts my query into a vector. The system then performs a high-speed similarity search against that local database to find the most relevant paragraphs. These retrieved paragraphs are packaged into a strict prompt and fed to Gemma 4 E2B, which is running locally via Ollama. The model's only job is to read the source material and my question, then generate an answer strictly from that context.&lt;/p&gt;

&lt;p&gt;The Code&lt;/p&gt;

&lt;p&gt;This is the core orchestration script that lives in my Termux home directory. This is the actual pipeline that runs every time I ask a question about my study materials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;
&lt;span class="c1"&gt;# 1. Ingestion: This function takes a raw PDF and turns it into vector memory
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;prepare_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# ... parsing and chunking logic with PyPDF2 ...
&lt;/span&gt;    &lt;span class="c1"&gt;# ... local embedding with a lightweight ONNX model ...
&lt;/span&gt;    &lt;span class="c1"&gt;# ... storing vectors in a local LanceDB database ...
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Document processed and ready for query.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Query: This function takes a question and returns a context-aware answer
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask_question&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# ... embed the question as a vector ...
&lt;/span&gt;    &lt;span class="c1"&gt;# ... perform local similarity search ...
&lt;/span&gt;    &lt;span class="c1"&gt;# ... construct a prompt with the found context ...
&lt;/span&gt;    &lt;span class="c1"&gt;# ... send to local Ollama Gemma 4 E2B model ...
&lt;/span&gt;    &lt;span class="c1"&gt;# ... return the generated response ...
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;generated_answer&lt;/span&gt;

&lt;span class="c1"&gt;# 3. The main loop: Start the pipeline and wait for questions
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Personalized AI pipeline is live. Loading your document...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;prepare_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_lecture_notes.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;user_q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ask something about your document: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ask_question&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_q&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Outcome: Your Own Private AI Tutor on a Phone&lt;/p&gt;

&lt;p&gt;I ran this during a study session for my Computer Architecture course. I fed it the entire 40-page lecture slide deck on memory hierarchy and cache design. Then, I asked it questions.&lt;/p&gt;

&lt;p&gt;A "cache miss penalty" isn't something the generic Gemma model was explicitly pre-trained on, but the pipeline forced it to search my lecture notes first. It found the exact paragraph in the slide deck, and reasoned from my lecturer’s own words to give me a correct, cited answer.&lt;/p&gt;

&lt;p&gt;I turned my lecturer's entire semester slides into a private AI that I could interrogate. The entire system ran offline on my phone.&lt;/p&gt;

&lt;p&gt;The first time I queried my own notes and got a perfect, context-aware response with zero lag, I wasn't excited. I was still. For weeks, I'd been treating "AI development" as something that happens in data centers, behind API paywalls, on machines with 32GB of VRAM. This moment rewired my brain. The computer in my pocket was never just a client. It was a server. It was a personalized AI brain. And the cloud, for the first time, was optional.&lt;/p&gt;

&lt;p&gt;The Bigger Picture: A Blueprint for the Next Billion Builders&lt;/p&gt;

&lt;p&gt;This isn't just a technical flex. It's a blueprint.&lt;/p&gt;

&lt;p&gt;I built a system that most developers would prototype on a $2,000 laptop and then deploy to an AWS instance that bills by the hour. I did it on a device I use to make phone calls.&lt;/p&gt;

&lt;p&gt;I want you, the developer reading this, to understand something clearly. The tools are already here. Termux, Ollama, Gemma 4, Python. They're free. They're open-source. They run on the phone you're probably holding right now. The only missing ingredient was someone showing it could be done.&lt;/p&gt;

&lt;p&gt;Now you know it can.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Nigeria's Stock Market Taught Me About System Reliability</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Tue, 12 May 2026 20:32:49 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/what-nigerias-stock-market-taught-me-about-system-reliability-19n4</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/what-nigerias-stock-market-taught-me-about-system-reliability-19n4</guid>
      <description>&lt;p&gt;As a software engineering student, I spend a lot of time thinking about systems how they're built, how they fail, and how they recover.&lt;/p&gt;

&lt;p&gt;This week, Nigeria's stock market gave me a masterclass.&lt;/p&gt;

&lt;p&gt;The Crash&lt;/p&gt;

&lt;p&gt;The Central Bank introduced a new rule limiting bank investments in foreign subsidiaries. Within hours, the market lost ₦1.92 trillion. Banking stocks collapsed. Panic spread.&lt;/p&gt;

&lt;p&gt;One regulatory change. One massive system failure.&lt;/p&gt;

&lt;p&gt;In software terms, this is a single point of failure—one component that, when it breaks, brings down the entire system.&lt;/p&gt;

&lt;p&gt;The Recovery&lt;/p&gt;

&lt;p&gt;The next day, the market regained ₦1.71 trillion. The same banks. The same fundamentals. The only thing that changed was sentiment.&lt;/p&gt;

&lt;p&gt;In system design, we call this eventual consistency—a distributed system's ability to return to a correct state after a disruption, as long as the underlying data remains intact.&lt;/p&gt;

&lt;p&gt;The Real Lesson&lt;/p&gt;

&lt;p&gt;But here's what most people missed.&lt;/p&gt;

&lt;p&gt;Beneath the daily swings, something deeper was happening. Nigeria's market has undergone a structural transformation. Total transactions hit ₦4.15 trillion in Q1 2026—almost double the previous year. And 86.9% of that money is domestic, anchored by pension funds with ₦29.43 trillion in assets.&lt;/p&gt;

&lt;p&gt;This isn't speculation. This is architecture.&lt;/p&gt;

&lt;p&gt;What This Means for Developers&lt;/p&gt;

&lt;p&gt;When a single CBN rule crashes banking stocks, that's a single point of failure. When panic selling spreads across sectors, that's a cascading failure. When the market recovers in 24 hours, that's eventual consistency. When pension funds anchor the market with patient capital, that's redundancy and fault tolerance. And when 86.9% of capital comes from domestic sources, that's a decentralized architecture.&lt;/p&gt;

&lt;p&gt;The stock market, it turns out, is just another distributed system. And distributed systems behave in predictable ways—whether they're made of microservices or market participants.&lt;/p&gt;

&lt;p&gt;What I'm Learning&lt;/p&gt;

&lt;p&gt;The best engineers don't just write code. They understand systems. They know that failures are inevitable, but collapse is optional. They design for resilience, not perfection.&lt;/p&gt;

&lt;p&gt;That's the kind of engineer I'm trying to become.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>softwareengineering</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Termux + Ollama + 2.3B parameters. Offline. Private. Fast.

Wrote a full guide on how to set it up, what works, and what breaks.

If your internet has ever failed you mid-build, this is for you.</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Tue, 12 May 2026 19:30:36 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/termux-ollama-23b-parameters-offline-private-fast-wrote-a-full-guide-on-how-to-set-it-356e</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/termux-ollama-23b-parameters-offline-private-fast-wrote-a-full-guide-on-how-to-set-it-356e</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl" class="crayons-story__hidden-navigation-link"&gt;I Ran an AI Model on My Phone. No Cloud. No API Keys. Just Gemma 4 and Termux.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Gemma 4 Challenge: Write about Gemma 4 Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/okeke_chukwudubem_5f3bf49" class="crayons-avatar  crayons-avatar--l  "&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%2F3908265%2F586841bb-154e-4de4-a539-b939b3018c48.jpeg" alt="okeke_chukwudubem_5f3bf49 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/okeke_chukwudubem_5f3bf49" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Okeke Chukwudubem
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Okeke Chukwudubem
                
              
              &lt;div id="story-author-preview-content-3658370" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/okeke_chukwudubem_5f3bf49" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2F3908265%2F586841bb-154e-4de4-a539-b939b3018c48.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Okeke Chukwudubem&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 12&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl" id="article-link-3658370"&gt;
          I Ran an AI Model on My Phone. No Cloud. No API Keys. Just Gemma 4 and Termux.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemmachallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemmachallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemma"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemma&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;12&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>android</category>
      <category>llm</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I Ran an AI Model on My Phone. No Cloud. No API Keys. Just Gemma 4 and Termux.</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Tue, 12 May 2026 19:16:04 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/i-ran-an-ai-model-on-my-phone-no-cloud-no-api-keys-just-gemma-4-and-termux-3okl</guid>
      <description>&lt;p&gt;The first time an AI model runs on your own device, something shifts in your brain.&lt;/p&gt;

&lt;p&gt;It's not the speed though seven tokens per second on a phone is respectable. It's not the convenience though never touching an API key again is liberating. It's the quiet realization that the computer in your pocket is no longer just a client. It's a server. It's a peer. And the cloud, for the first time, is optional.&lt;/p&gt;

&lt;p&gt;I'm a software engineering student at UNIZIK in Anambra, Nigeria. I build on a cracked iPhone 7 and an aging Android phone. I don't have a GPU. I don't have cloud credits. What I have is a stubborn belief that my location shouldn't determine my access to the most powerful technology of our generation.&lt;/p&gt;

&lt;p&gt;On May 6th, 2026, Google's Gemma 4 made that belief feel less like hope and more like a specification sheet.&lt;/p&gt;

&lt;p&gt;This is a practical guide to running Gemma 4 locally on a phone. Not a theoretical overview. Not a benchmark comparison. A step-by-step walkthrough of what I did, what worked, what broke, and why it matters for every developer who's ever been locked out by a loading spinner.&lt;/p&gt;

&lt;p&gt;Step 1: Pick Your Model&lt;/p&gt;

&lt;p&gt;Gemma 4 isn't one model. It's a family of four, spanning from ultra-mobile to workstation-class. For phone deployment, two variants matter.&lt;/p&gt;

&lt;p&gt;The E2B, with 2.3 billion effective parameters and a 128K context window, is designed for phones, edge devices, and always-on assistants. The E4B, with 4.5 billion effective parameters and the same 128K context window, is built for phones and laptops, handling offline apps and more complex reasoning.&lt;/p&gt;

&lt;p&gt;For this guide, I used E2B. It's the lightest variant that still delivers meaningful performance. If you have a phone with 12GB+ RAM, try E4B.&lt;/p&gt;

&lt;p&gt;Step 2: Set Up Your Environment&lt;/p&gt;

&lt;p&gt;You need Termux, a terminal emulator and Linux environment for Android that doesn't require root. Download it from F-Droid, not the Play Store the Play Store version is outdated. Once installed, open Termux and run these commands one by one:&lt;/p&gt;

&lt;p&gt;pkg update &amp;amp;&amp;amp; pkg upgrade&lt;br&gt;
pkg install python git cmake gcc&lt;/p&gt;

&lt;p&gt;This installs Python, Git, and essential build tools. Next, install Ollama, the easiest way to run LLMs locally. Ollama officially supports Linux and macOS. On Termux, we'll use a community-maintained approach:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/ollama/ollama.git" rel="noopener noreferrer"&gt;https://github.com/ollama/ollama.git&lt;/a&gt;&lt;br&gt;
cd ollama&lt;/p&gt;

&lt;p&gt;Follow the Termux-specific instructions in the repository's README. This step requires patience. You're compiling software on a phone. It will take time. Let it run.&lt;/p&gt;

&lt;p&gt;Step 3: Pull and Run Gemma 4&lt;/p&gt;

&lt;p&gt;Once Ollama is installed, pulling the Gemma 4 model is a single command:&lt;/p&gt;

&lt;p&gt;ollama pull gemma4:2b&lt;/p&gt;

&lt;p&gt;This downloads the E2B variant. The download is several gigabytes&lt;br&gt;
connect to WiFi, not mobile data. Once pulled, you run it with:&lt;/p&gt;

&lt;p&gt;ollama run gemma4:2b&lt;/p&gt;

&lt;p&gt;You're now talking to an AI model running entirely on your phone. No internet required after the initial download. No API keys. No per-token billing. No data leaving your device.&lt;/p&gt;

&lt;p&gt;I tested it with a simple prompt: "Explain recursion to a beginner using only pidgin English." It responded with a surprisingly clear explanation that mixed pidgin with technical accuracy. It wasn't perfect it stumbled on a complex follow-up about tail recursion but it was running on a phone. My phone. Offline.&lt;/p&gt;

&lt;p&gt;Step 4: Expose It to Your Local Network&lt;/p&gt;

&lt;p&gt;Here's where it gets interesting. Ollama exposes a local API on port 11434. Other devices on your WiFi network can send requests to your phone's IP address at that port. Your phone becomes a local LLM server.&lt;/p&gt;

&lt;p&gt;On your laptop (or another phone), open a browser and navigate to your phone's IP address, port 11434. Send a POST request with a prompt. The model responds. The phone, sitting on your desk, does the computation and returns the answer.&lt;/p&gt;

&lt;p&gt;You've just built a private, offline AI server from a phone. No cloud bill. No privacy concerns. No "check your connection" errors.&lt;/p&gt;

&lt;p&gt;Step 5: Handle the Limits&lt;/p&gt;

&lt;p&gt;Let me be honest about what breaks. First, thermal throttling. Running inference on a phone generates heat. After about 20 minutes of continuous use, my phone got noticeably warm and response times slowed. For production use, you'd need to batch requests and give the device breathing room.&lt;/p&gt;

&lt;p&gt;Second, Android's memory management is aggressive. If you switch away from Termux for too long, the OS may kill the Ollama process to free RAM. One developer reported his model survived overnight when he kept the phone plugged in and Termux in the foreground.&lt;/p&gt;

&lt;p&gt;Third, speed. I got about 7-8 tokens per second for text generation on an Oppo Find N5 with 16GB of RAM. On a device with 4GB or 6GB, expect 3-5 tokens per second. That's usable for chat, but not for real-time applications.&lt;/p&gt;

&lt;p&gt;What This Unlocks&lt;/p&gt;

&lt;p&gt;Once you've run a model locally, you start seeing possibilities everywhere. A chatbot for a local business that answers FAQs without internet. An offline document analyzer that reads PDFs and extracts key points. A coding assistant that works during network blackouts. A classroom tool for schools without reliable connectivity.&lt;/p&gt;

&lt;p&gt;I'm building Dexter Nova, an AI assistant for small businesses in Anambra. The first version targets Gemma 4 E2B running on a dedicated Android device. No API calls. No subscription. Just a phone on a shelf, answering customer questions 24/7.&lt;/p&gt;

&lt;p&gt;One developer, John Fiewor, built GradrAI an assessment platform for African educators. When schools told him "we don't have reliable internet," he ripped out the cloud dependency and replaced it with Gemma 4 E4B running locally on a teacher's laptop. The entire pipeline exam generation, grading, feedback now runs offline.&lt;/p&gt;

&lt;p&gt;This is the real promise of Gemma 4. Not a higher benchmark score. Not a flashy demo. The quiet, radical act of making AI work where the cloud cannot reach.&lt;/p&gt;

&lt;p&gt;This post is my entry for the DEV.to Gemma 4 Challenge. Think local. Build real.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>What the CBN's New Banking Rule Taught Me About System Design</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Fri, 08 May 2026 14:03:28 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/what-the-cbns-new-banking-rule-taught-me-about-system-design-1dpf</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/what-the-cbns-new-banking-rule-taught-me-about-system-design-1dpf</guid>
      <description>&lt;p&gt;As a software engineering student, I spend most of my time learning about systems—how to design them, how they fail, and how to make them resilient.&lt;/p&gt;

&lt;p&gt;But this week, I learned one of the most important system design lessons not from my textbooks, but from the news.&lt;/p&gt;

&lt;p&gt;The Story&lt;/p&gt;

&lt;p&gt;On Thursday, the Central Bank of Nigeria (CBN) introduced a new rule: banks can no longer invest more than 10% of their shareholder equity in foreign subsidiaries. Any bank above that limit has 12 months to divest.&lt;/p&gt;

&lt;p&gt;The immediate result? The Nigerian stock market lost ₦1.92 trillion in a single day.&lt;/p&gt;

&lt;p&gt;Banking stocks crashed. Investors panicked. The entire system shook.&lt;/p&gt;

&lt;p&gt;Then on Friday, the market recovered ₦1.71 trillion. Almost everything came back.&lt;/p&gt;

&lt;p&gt;Same banks. Same fundamentals. Same rules. Only the emotions changed.&lt;/p&gt;

&lt;p&gt;What This Taught Me About System Design&lt;/p&gt;

&lt;p&gt;This 24-hour rollercoaster is exactly what happens when you design a system that's tightly coupled, lacks redundancy, and has no graceful degradation.&lt;/p&gt;

&lt;p&gt;What Happened in the Market System Design Equivalent&lt;br&gt;
One regulatory change crashed the whole banking sector A single point of failure brought down an entire distributed system&lt;br&gt;
Investors panicked and sold blindly A cascading failure triggered by unnecessary retries&lt;br&gt;
The market recovered within 24 hours A resilient system with eventual consistency&lt;br&gt;
Smart money waited and bought the dip A well-architected component with error handling and retry logic&lt;/p&gt;

&lt;p&gt;The market, it turns out, is just another distributed system. And distributed systems fail in predictable ways.&lt;/p&gt;

&lt;p&gt;The Lesson for Developers&lt;/p&gt;

&lt;p&gt;When you're designing any system whether it's a microservice architecture, a payment pipeline, or a simple CRUD app—ask yourself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where are my single points of failure? If one regulatory change can crash an entire market, what does one API timeout do to your app?&lt;/li&gt;
&lt;li&gt;Do I have graceful degradation? When something fails, does the whole system collapse, or does it continue serving partial results?&lt;/li&gt;
&lt;li&gt;Is my system eventually consistent? The market recovered because the fundamentals were still there. Does your system recover correctly when the panic subsides?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why I'm Writing This&lt;/p&gt;

&lt;p&gt;I'm not a financial analyst. I'm a student learning how to build things that don't fall apart.&lt;/p&gt;

&lt;p&gt;But the more I study system design, the more I realize the principles apply everywhere to markets, to businesses, to life.&lt;/p&gt;

&lt;p&gt;If a system can't handle a single unexpected input without catastrophic failure, it wasn't designed well. Whether it's a banking sector or a backend API.&lt;/p&gt;

&lt;p&gt;That's the kind of engineer I'm trying to become. Not just someone who writes code, but someone who understands systems.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>nigeria</category>
      <category>softwareengineering</category>
      <category>learning</category>
    </item>
    <item>
      <title>A UNIZIK Software Engineering Student Walks Into Dev...</title>
      <dc:creator>Okeke Chukwudubem</dc:creator>
      <pubDate>Sat, 02 May 2026 11:19:19 +0000</pubDate>
      <link>https://forem.com/okeke_chukwudubem_5f3bf49/a-unizik-software-engineering-student-walks-into-dev-1l6h</link>
      <guid>https://forem.com/okeke_chukwudubem_5f3bf49/a-unizik-software-engineering-student-walks-into-dev-1l6h</guid>
      <description>&lt;p&gt;I've been putting this off.&lt;/p&gt;

&lt;p&gt;I told myself I'd start writing when I had a laptop. When I knew more. When I felt ready.&lt;/p&gt;

&lt;p&gt;Then I realized: there's no perfect time to start building in public. So here I am.&lt;/p&gt;

&lt;p&gt;I'm Okeke Chukwudubem, a second-year Software Engineering student at Nnamdi Azikiwe University (UNIZIK), Awka. This semester, I'm taking courses in:&lt;/p&gt;

&lt;p&gt;· Data Structures and Algorithms&lt;br&gt;
· Computer Architecture&lt;br&gt;
· Systems Design&lt;br&gt;
· Software Engineering Principles&lt;/p&gt;

&lt;p&gt;This blog will document my learning journey: what clicks, what confuses me, and the projects I build along the way.&lt;/p&gt;

&lt;p&gt;I'm writing because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Teaching a concept forces you to truly understand it.&lt;/li&gt;
&lt;li&gt;A portfolio of writing beats an empty GitHub when opportunities come.&lt;/li&gt;
&lt;li&gt;Somewhere out there, another student is stuck. Maybe my explanation helps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Expect posts about:&lt;/p&gt;

&lt;p&gt;· Programming concepts broken down simply.&lt;br&gt;
· Course notes turned into tutorials.&lt;br&gt;
· Real talk about learning software engineering in a Nigerian university.&lt;/p&gt;

&lt;p&gt;No jargon. No pretending. Just a student, learning in public.&lt;/p&gt;

&lt;p&gt;Let's build.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>softwareengineering</category>
      <category>nigeria</category>
    </item>
  </channel>
</rss>
