<?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: Okeke Chukwudubem</title>
    <description>The latest articles on DEV Community by Okeke Chukwudubem (@okeke_chukwudubem_5f3bf49).</description>
    <link>https://dev.to/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>DEV Community: Okeke Chukwudubem</title>
      <link>https://dev.to/okeke_chukwudubem_5f3bf49</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/okeke_chukwudubem_5f3bf49"/>
    <language>en</language>
    <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://dev.to/okeke_chukwudubem_5f3bf49/pointers-in-c-the-concept-that-almost-broke-me-and-how-i-finally-got-it-52nl</link>
      <guid>https://dev.to/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://dev.to/okeke_chukwudubem_5f3bf49/i-built-a-private-ai-brain-on-my-phone-no-cloud-no-apis-no-limits-54cg</link>
      <guid>https://dev.to/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://dev.to/okeke_chukwudubem_5f3bf49/what-nigerias-stock-market-taught-me-about-system-reliability-19n4</link>
      <guid>https://dev.to/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://dev.to/okeke_chukwudubem_5f3bf49/termux-ollama-23b-parameters-offline-private-fast-wrote-a-full-guide-on-how-to-set-it-356e</link>
      <guid>https://dev.to/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://dev.to/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://dev.to/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://dev.to/okeke_chukwudubem_5f3bf49/what-the-cbns-new-banking-rule-taught-me-about-system-design-1dpf</link>
      <guid>https://dev.to/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://dev.to/okeke_chukwudubem_5f3bf49/a-unizik-software-engineering-student-walks-into-dev-1l6h</link>
      <guid>https://dev.to/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>
