<?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: Nwobodo Ecclesiastes Chidera</title>
    <description>The latest articles on DEV Community by Nwobodo Ecclesiastes Chidera (@igwestarking).</description>
    <link>https://dev.to/igwestarking</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4020257%2F70b8729c-4e10-4dd9-8402-ed5af8d381b8.png</url>
      <title>DEV Community: Nwobodo Ecclesiastes Chidera</title>
      <link>https://dev.to/igwestarking</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/igwestarking"/>
    <language>en</language>
    <item>
      <title>I Built a Serverless, End-to-End Encrypted Messaging App That Works Without the Internet</title>
      <dc:creator>Nwobodo Ecclesiastes Chidera</dc:creator>
      <pubDate>Mon, 02 Nov 2026 17:02:04 +0000</pubDate>
      <link>https://dev.to/igwestarking/i-built-a-serverless-end-to-end-encrypted-messaging-app-that-works-without-the-internet-541i</link>
      <guid>https://dev.to/igwestarking/i-built-a-serverless-end-to-end-encrypted-messaging-app-that-works-without-the-internet-541i</guid>
      <description>&lt;p&gt;What if you could send private messages without WhatsApp, Telegram, internet access, user accounts, or centralized messaging servers?&lt;/p&gt;

&lt;p&gt;Meet Eccles Bluechat E2EE — an experimental Android messaging application built around decentralized, Bluetooth-based communication.&lt;/p&gt;

&lt;p&gt;Designed with privacy and independence at its core, Eccles Bluechat explores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 End-to-end encryption using ECDH, HKDF-SHA256, and AES-256-GCM.&lt;/li&gt;
&lt;li&gt;🔑 Android Keystore-backed cryptographic key protection.&lt;/li&gt;
&lt;li&gt;📡 Serverless, internet-independent Bluetooth messaging.&lt;/li&gt;
&lt;li&gt;🛡️ Trust-on-first-use (TOFU) identity verification.&lt;/li&gt;
&lt;li&gt;📁 Encrypted local message and media storage.&lt;/li&gt;
&lt;li&gt;📞 Bluetooth-based voice and video communication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No accounts. No advertisements. No tracking. No centralized messaging infrastructure.&lt;/p&gt;

&lt;p&gt;This project explores an important engineering question: Can we build meaningful private communication systems without depending on the internet or centralized infrastructure?&lt;/p&gt;

&lt;p&gt;This is an open-source engineering experiment, and I'm sharing the architecture, implementation, challenges, and lessons learned.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Igwe-Starking/eccles-bluechat-e2ee" rel="noopener noreferrer"&gt;https://github.com/Igwe-Starking/eccles-bluechat-e2ee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by Eccles (Igwe Starking).&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>privacy</category>
      <category>security</category>
    </item>
    <item>
      <title>I Gave My Phone a Brain: An Android Agent That Posts, Calls and Takes Photos From One Sentence</title>
      <dc:creator>Nwobodo Ecclesiastes Chidera</dc:creator>
      <pubDate>Sun, 18 Oct 2026 14:05:41 +0000</pubDate>
      <link>https://dev.to/igwestarking/i-gave-my-phone-a-brain-an-android-agent-that-posts-calls-and-takes-photos-from-one-sentence-3i1</link>
      <guid>https://dev.to/igwestarking/i-gave-my-phone-a-brain-an-android-agent-that-posts-calls-and-takes-photos-from-one-sentence-3i1</guid>
      <description>&lt;p&gt;Open-source Android AI agent: say a goal, it taps, types, swipes and opens apps for you. Gemini, OpenAI, Claude. Banking apps off-limits.&lt;br&gt;
tags: android, ai, opensource, showdev&lt;/p&gt;
&lt;h2&gt;
  
  
  cover_image: &lt;a href="https://raw.githubusercontent.com/igwe-starking/eccles-agent/main/docs/media/social-preview.png" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/igwe-starking/eccles-agent/main/docs/media/social-preview.png&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I typed one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Open Facebook and post I love programming on red background."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My phone opened the app, picked the red background, typed the text, and then &lt;strong&gt;stopped to ask my permission before posting.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No script. No per-app integration. Just a sentence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiznl3njo58mhmkwa4hjy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiznl3njo58mhmkwa4hjy.gif" alt="Eccles Agent posting on Facebook" width="270" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;Eccles Agent&lt;/strong&gt;: an open-source Android app that operates your phone for you.&lt;/p&gt;
&lt;h2&gt;
  
  
  ⚡ What it can do
&lt;/h2&gt;

&lt;p&gt;If a human can do it on screen, Eccles can try. In my own testing it has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔦 &lt;strong&gt;Flipped system toggles.&lt;/strong&gt; &lt;em&gt;"Turn on the flashlight"&lt;/em&gt; opens Quick Settings, finds the switch and taps it.&lt;/li&gt;
&lt;li&gt;📘 &lt;strong&gt;Posted to Facebook&lt;/strong&gt;, including picking a coloured background and typing the text.&lt;/li&gt;
&lt;li&gt;📞 &lt;strong&gt;Placed a call&lt;/strong&gt; by finding a contact, opening it and pressing call.&lt;/li&gt;
&lt;li&gt;📸 &lt;strong&gt;Taken a photo.&lt;/strong&gt; &lt;em&gt;"Take a picture of my laptop, it's facing the rear camera"&lt;/em&gt; opened the camera and pressed the shutter.&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Opened apps reliably&lt;/strong&gt;, even when Android refuses to launch them from the background.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnonwetvupol6t81qfbo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnonwetvupol6t81qfbo.gif" alt="Flashlight demo" width="270" height="604"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🧰 The toolbox
&lt;/h2&gt;

&lt;p&gt;The model answers with small JSON actions, and Eccles carries them out:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;open_app&lt;/code&gt; · &lt;code&gt;click&lt;/code&gt; · &lt;code&gt;tap&lt;/code&gt; · &lt;code&gt;long_press&lt;/code&gt; · &lt;code&gt;swipe&lt;/code&gt; · &lt;code&gt;type&lt;/code&gt; · &lt;code&gt;key&lt;/code&gt; · &lt;code&gt;scroll&lt;/code&gt; · &lt;code&gt;wait&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thought"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Facebook is open; the composer is item 7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"continue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"need_vision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"click"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What's on your mind?"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hello everyone"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧠 Bring your own brain
&lt;/h2&gt;

&lt;p&gt;Pick the AI you already use and paste your own API key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini&lt;/strong&gt; (the default)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropic Claude&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anything OpenAI-compatible&lt;/strong&gt;: OpenRouter, Groq, DeepSeek, or a local Ollama or LM Studio server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switch in Settings, then tap &lt;strong&gt;Test connection&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 It checks its own work
&lt;/h2&gt;

&lt;p&gt;Android will happily report a tap as "performed" when nothing happened. Eccles counts a node action only if the UI actually reacted. If it didn't, it re-plans from a fresh screenshot instead of blindly retrying and double-tapping a "Like". Screenshots go to the AI only when the screen tree isn't enough, and you choose whether that means never, only when needed, or every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡️ An agent that can tap anything needs a hard "no"
&lt;/h2&gt;

&lt;p&gt;Safety is the architecture, not a toggle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Banking and payment apps are off-limits.&lt;/strong&gt; They're never read, screenshotted or sent to the AI, and the guard fails closed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password screens stop the task.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send, post, delete and buy need your Allow.&lt;/strong&gt; No answer in 60 seconds counts as Deny.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A floating Stop button&lt;/strong&gt; sits on top of every app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your API key&lt;/strong&gt; is encrypted with an AndroidKeystore key, never stored in plain preferences.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr33pdqeav4c0hig2zpee.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr33pdqeav4c0hig2zpee.gif" alt="The confirmation gate" width="270" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📲 Install it (no computer needed)
&lt;/h2&gt;

&lt;p&gt;Eccles is an Accessibility Service, so on Android 13+ an APK installed from a browser gets its toggle greyed out ("Restricted setting"). The fix takes a minute:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the APK and open it.&lt;/li&gt;
&lt;li&gt;Try to enable the service, then tap OK on the warning.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Settings → Apps → Eccles Agent → ⋮ → Allow restricted settings&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Switch the service on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or use &lt;code&gt;adb install -r EcclesAgent-1.0.apk&lt;/code&gt; from a computer. The README has both routes and a SHA-256 to verify your download.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️ Honest limits
&lt;/h2&gt;

&lt;p&gt;It's an AI driving a UI, so it can get things wrong. Watch the timeline and keep Stop in reach. Whatever is on screen during a task goes to the AI provider you choose. Some apps hide from accessibility. It isn't on Google Play yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Try it, break it, improve it
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;strong&gt;&lt;a href="https://github.com/igwe-starking/eccles-agent" rel="noopener noreferrer"&gt;https://github.com/igwe-starking/eccles-agent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built this solo on a low-end Chromebook with no budget. If Eccles Agent makes you grin, you can support the project here: &lt;a href="https://paystack.shop/pay/support-eccles-agent-tie1" rel="noopener noreferrer"&gt;https://paystack.shop/pay/support-eccles-agent-tie1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The question I'd love your answer to:&lt;/strong&gt; what should an agent like this &lt;em&gt;never&lt;/em&gt; be allowed to do?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>android</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built a Memory Allocator for Microcontrollers That Refuses to Fragment</title>
      <dc:creator>Nwobodo Ecclesiastes Chidera</dc:creator>
      <pubDate>Thu, 24 Sep 2026 19:13:55 +0000</pubDate>
      <link>https://dev.to/igwestarking/i-built-a-memory-allocator-for-microcontrollers-that-refuses-to-fragment-ege</link>
      <guid>https://dev.to/igwestarking/i-built-a-memory-allocator-for-microcontrollers-that-refuses-to-fragment-ege</guid>
      <description>&lt;p&gt;Dynamic memory on a microcontroller doesn't have to mean unpredictable memory.&lt;/p&gt;

&lt;p&gt;On a desktop, writing:&lt;/p&gt;

&lt;p&gt;void *ptr = malloc(size);&lt;/p&gt;

&lt;p&gt;and later:&lt;/p&gt;

&lt;p&gt;free(ptr);&lt;/p&gt;

&lt;p&gt;is almost invisible to most developers.&lt;/p&gt;

&lt;p&gt;On a microcontroller with a few kilobytes of RAM, things can get more interesting.&lt;/p&gt;

&lt;p&gt;Your firmware can have plenty of total free memory and still fail an allocation because the available memory has become fragmented into pieces that aren't suitable for the next request.&lt;/p&gt;

&lt;p&gt;That's the problem I wanted to attack.&lt;/p&gt;

&lt;p&gt;So I built EcclesRTMem — a small, plain-C fixed-pool memory allocator designed for embedded systems where predictable memory behavior matters.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Igwe-Starking/eccles-rtmem" rel="noopener noreferrer"&gt;https://github.com/Igwe-Starking/eccles-rtmem&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The problem with the traditional heap&lt;/p&gt;

&lt;p&gt;Imagine a 4 KB memory region.&lt;/p&gt;

&lt;p&gt;Over time, your application performs operations like:&lt;/p&gt;

&lt;p&gt;allocate 64&lt;br&gt;
allocate 128&lt;br&gt;
allocate 32&lt;br&gt;
free 128&lt;br&gt;
allocate 96&lt;br&gt;
free 64&lt;br&gt;
allocate 256&lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;Eventually, the heap can look like:&lt;/p&gt;

&lt;p&gt;┌──────┬────────┬────┬──────────┬──────┬───────┐&lt;br&gt;
│ USED │  FREE  │USED│   FREE   │ USED │ FREE  │&lt;br&gt;
└──────┴────────┴────┴──────────┴──────┴───────┘&lt;/p&gt;

&lt;p&gt;There may be plenty of free memory in total.&lt;/p&gt;

&lt;p&gt;But if the next allocation requires one contiguous region and no sufficiently large region exists, the allocation fails.&lt;/p&gt;

&lt;p&gt;That's external fragmentation.&lt;/p&gt;

&lt;p&gt;On a desktop with gigabytes of RAM, this may be acceptable.&lt;/p&gt;

&lt;p&gt;On a tiny MCU, where a few hundred bytes can matter, I wanted another option.&lt;/p&gt;




&lt;p&gt;The idea behind EcclesRTMem&lt;/p&gt;

&lt;p&gt;Instead of treating RAM as one giant variable-sized heap, EcclesRTMem divides it into fixed-size block pools.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;┌───────────────────────────────────────────┐&lt;br&gt;
│                 RAM                       │&lt;br&gt;
├────────────┬──────────────┬───────────────┤&lt;br&gt;
│   SMALL    │    MEDIUM    │     LARGE     │&lt;br&gt;
│   blocks   │    blocks    │     blocks     │&lt;br&gt;
├────────────┼──────────────┼───────────────┤&lt;br&gt;
│ [ ][ ][ ]  │ [    ][    ]│ [      ][    ]│&lt;br&gt;
│ [ ][ ][ ]  │ [    ][    ]│ [      ][    ]│&lt;br&gt;
└────────────┴──────────────┴───────────────┘&lt;/p&gt;

&lt;p&gt;An allocation request is assigned to an appropriate pool.&lt;/p&gt;

&lt;p&gt;For example, a request for 20 bytes might consume a 32-byte block rather than creating a unique 20-byte hole in a general-purpose heap.&lt;/p&gt;

&lt;p&gt;Yes, that creates internal fragmentation.&lt;/p&gt;

&lt;p&gt;That's intentional.&lt;/p&gt;

&lt;p&gt;The trade-off is:&lt;/p&gt;

&lt;p&gt;«Waste some space inside blocks in exchange for keeping the overall allocation structure bounded and predictable.»&lt;/p&gt;




&lt;p&gt;It isn't trying to replace every "malloc()"&lt;/p&gt;

&lt;p&gt;This is important.&lt;/p&gt;

&lt;p&gt;EcclesRTMem isn't intended to compete with sophisticated desktop allocators.&lt;/p&gt;

&lt;p&gt;If you're running Linux with gigabytes of RAM, there are many reasons to use the standard allocator or another general-purpose allocator.&lt;/p&gt;

&lt;p&gt;EcclesRTMem targets a different environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AVR&lt;/li&gt;
&lt;li&gt;ESP32&lt;/li&gt;
&lt;li&gt;STM32&lt;/li&gt;
&lt;li&gt;RP2040/RP2350&lt;/li&gt;
&lt;li&gt;nRF52/Zephyr&lt;/li&gt;
&lt;li&gt;MSP430&lt;/li&gt;
&lt;li&gt;Arduino&lt;/li&gt;
&lt;li&gt;bare-metal firmware&lt;/li&gt;
&lt;li&gt;RTOS applications&lt;/li&gt;
&lt;li&gt;other resource-constrained systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project provides platform-specific locking mechanisms so the same allocator can be used across different embedded environments.&lt;/p&gt;




&lt;p&gt;Fixed pools, but what about large allocations?&lt;/p&gt;

&lt;p&gt;A fixed-size allocator has an obvious problem:&lt;/p&gt;

&lt;p&gt;What happens when the requested object is larger than one block?&lt;/p&gt;

&lt;p&gt;EcclesRTMem supports contiguous multi-block allocations.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;Large pool&lt;/p&gt;

&lt;p&gt;┌────────┬────────┬────────┬────────┬────────┐&lt;br&gt;
│ FREE   │  USED  │  USED  │  USED  │ FREE   │&lt;br&gt;
└────────┴────────┴────────┴────────┴────────┘&lt;br&gt;
            └───────────────┘&lt;br&gt;
              one allocation&lt;/p&gt;

&lt;p&gt;The allocator still operates on fixed-size blocks, but several adjacent blocks can form one larger allocation.&lt;/p&gt;

&lt;p&gt;This keeps the underlying memory model relatively simple while allowing larger objects.&lt;/p&gt;




&lt;p&gt;I wanted "free()" to tell me when I screwed up&lt;/p&gt;

&lt;p&gt;Memory bugs are painful enough without the allocator silently accepting bad pointers.&lt;/p&gt;

&lt;p&gt;EcclesRTMem includes diagnostics for invalid frees, including situations such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;double free&lt;/li&gt;
&lt;li&gt;pointer outside the managed region&lt;/li&gt;
&lt;li&gt;invalid alignment&lt;/li&gt;
&lt;li&gt;pointers into the middle of an allocation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of simply thinking:&lt;/p&gt;

&lt;p&gt;"Something somewhere corrupted memory."&lt;/p&gt;

&lt;p&gt;you can get a much more useful indication of what happened.&lt;/p&gt;

&lt;p&gt;That matters enormously when debugging embedded firmware.&lt;/p&gt;

&lt;p&gt;Because when your device is sitting in a workshop refusing to boot, "probably heap corruption" isn't particularly helpful.&lt;/p&gt;




&lt;p&gt;The configuration is explicit&lt;/p&gt;

&lt;p&gt;Embedded memory should be treated as a resource, not magic.&lt;/p&gt;

&lt;p&gt;EcclesRTMem lets you configure things such as:&lt;/p&gt;

&lt;h1&gt;
  
  
  define ECCLES_RT_MEM_SIZE       4096ul
&lt;/h1&gt;

&lt;h1&gt;
  
  
  define ECCLES_RT_BLOCK_A_SIZE   32ul
&lt;/h1&gt;

&lt;h1&gt;
  
  
  define ECCLES_RT_BLOCK_B_SIZE   128ul
&lt;/h1&gt;

&lt;h1&gt;
  
  
  define ECCLES_RT_BLOCK_C_SIZE   512ul
&lt;/h1&gt;

&lt;p&gt;The goal is to know ahead of time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how much RAM the allocator consumes&lt;/li&gt;
&lt;li&gt;how many blocks exist&lt;/li&gt;
&lt;li&gt;what sizes those blocks are&lt;/li&gt;
&lt;li&gt;what happens when the pools are exhausted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The allocator has hard configuration boundaries rather than pretending to provide unlimited memory.&lt;/p&gt;




&lt;p&gt;Then I attacked it with randomized testing&lt;/p&gt;

&lt;p&gt;This is probably the part I'm most interested in.&lt;/p&gt;

&lt;p&gt;Memory allocators are incredibly easy to make look correct.&lt;/p&gt;

&lt;p&gt;A few tests like:&lt;/p&gt;

&lt;p&gt;allocate&lt;br&gt;
free&lt;br&gt;
allocate&lt;br&gt;
free&lt;/p&gt;

&lt;p&gt;prove almost nothing.&lt;/p&gt;

&lt;p&gt;So the test suite performs randomized allocation/free workloads.&lt;/p&gt;

&lt;p&gt;The repository includes stress tests performing 200,000 randomized operations, with canary patterns written into live allocations and checked throughout the test.&lt;/p&gt;

&lt;p&gt;The test matrix also runs under:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AddressSanitizer&lt;/li&gt;
&lt;li&gt;UndefinedBehaviorSanitizer&lt;/li&gt;
&lt;li&gt;different pool configurations&lt;/li&gt;
&lt;li&gt;different memory sizes&lt;/li&gt;
&lt;li&gt;locking/no-lock configurations&lt;/li&gt;
&lt;li&gt;boundary-oriented configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And this testing actually found a bug.&lt;/p&gt;

&lt;p&gt;A randomized test exposed an out-of-bounds problem around the 255-block boundary.&lt;/p&gt;

&lt;p&gt;That bug was fixed.&lt;/p&gt;

&lt;p&gt;That's exactly what I want from an allocator test suite.&lt;/p&gt;

&lt;p&gt;Not simply:&lt;/p&gt;

&lt;p&gt;«"All tests passed."»&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;p&gt;«"The tests were aggressive enough to find something that was wrong."»&lt;/p&gt;




&lt;p&gt;Concurrency matters on embedded systems&lt;/p&gt;

&lt;p&gt;A memory allocator shared by multiple tasks can't simply assume that every environment works the same way.&lt;/p&gt;

&lt;p&gt;An RTOS mutex isn't equivalent to disabling interrupts.&lt;/p&gt;

&lt;p&gt;And a mutex that works perfectly from a task isn't automatically safe to use from an ISR.&lt;/p&gt;

&lt;p&gt;That's why EcclesRTMem has platform-specific locking backends.&lt;/p&gt;

&lt;p&gt;The project supports configurations ranging from RTOS environments to bare-metal/superloop applications where locking can be disabled.&lt;/p&gt;

&lt;p&gt;One important limitation remains:&lt;/p&gt;

&lt;p&gt;RTOS mutex-based backends should not be used from ISRs unless the particular platform/backend explicitly supports that usage.&lt;/p&gt;

&lt;p&gt;That's not something I want an allocator to hide from the developer.&lt;/p&gt;




&lt;p&gt;The trade-offs&lt;/p&gt;

&lt;p&gt;EcclesRTMem isn't magic.&lt;/p&gt;

&lt;p&gt;It has costs.&lt;/p&gt;

&lt;p&gt;Internal fragmentation&lt;/p&gt;

&lt;p&gt;A 33-byte allocation may consume a 64-byte block.&lt;/p&gt;

&lt;p&gt;Pool boundaries&lt;/p&gt;

&lt;p&gt;Free space in one pool doesn't automatically become usable space in another.&lt;/p&gt;

&lt;p&gt;Bounded registry&lt;/p&gt;

&lt;p&gt;The current design has a 255-block registry boundary.&lt;/p&gt;

&lt;p&gt;Timing still needs hardware measurement&lt;/p&gt;

&lt;p&gt;The design aims for predictable behavior, but formal worst-case timing measurements across real hardware are still future work.&lt;/p&gt;

&lt;p&gt;These limitations are important because a serious embedded library should tell you where it stops being the right tool.&lt;/p&gt;




&lt;p&gt;Why build another allocator?&lt;/p&gt;

&lt;p&gt;Because embedded systems have different priorities.&lt;/p&gt;

&lt;p&gt;Sometimes you don't need the most memory-efficient allocator possible.&lt;/p&gt;

&lt;p&gt;You need one where you can answer questions like:&lt;/p&gt;

&lt;p&gt;How much RAM can this subsystem consume?&lt;/p&gt;

&lt;p&gt;What happens when it runs out?&lt;/p&gt;

&lt;p&gt;Can a freed block be reused without changing the memory topology?&lt;/p&gt;

&lt;p&gt;What happens if somebody double-frees a pointer?&lt;/p&gt;

&lt;p&gt;What happens after 200,000 allocations?&lt;/p&gt;

&lt;p&gt;What happens under concurrent access?&lt;/p&gt;

&lt;p&gt;Can I configure the memory budget at compile time?&lt;/p&gt;

&lt;p&gt;Those questions are more important to me than simply asking:&lt;/p&gt;

&lt;p&gt;«"Does malloc work?"»&lt;/p&gt;




&lt;p&gt;Where EcclesRTMem fits&lt;/p&gt;

&lt;p&gt;I don't see it as a universal replacement for dynamic memory.&lt;/p&gt;

&lt;p&gt;Think of the options as different tools:&lt;/p&gt;

&lt;p&gt;Static allocation&lt;br&gt;
      │&lt;br&gt;
      │ maximum predictability&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
Fixed pools / EcclesRTMem&lt;br&gt;
      │&lt;br&gt;
      │ bounded dynamic allocation&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
Custom/general-purpose heaps&lt;br&gt;
      │&lt;br&gt;
      │ maximum flexibility&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
Standard malloc/free&lt;/p&gt;

&lt;p&gt;If you know every object's lifetime and size at compile time, static allocation is often excellent.&lt;/p&gt;

&lt;p&gt;If you need dynamic lifetimes but want bounded memory behavior, a fixed-pool allocator becomes interesting.&lt;/p&gt;

&lt;p&gt;If you need maximum flexibility and can accept more complex heap behavior, a general-purpose allocator may be appropriate.&lt;/p&gt;

&lt;p&gt;The point isn't that one strategy wins everywhere.&lt;/p&gt;

&lt;p&gt;The point is having the right tool for the system.&lt;/p&gt;




&lt;p&gt;What's next?&lt;/p&gt;

&lt;p&gt;There are still several things I want to improve.&lt;/p&gt;

&lt;p&gt;Among them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fragmentation/statistics reporting&lt;/li&gt;
&lt;li&gt;allocation-failure counters&lt;/li&gt;
&lt;li&gt;optional wider block registries&lt;/li&gt;
&lt;li&gt;additional oversized-allocation strategies&lt;/li&gt;
&lt;li&gt;more hardware-verified locking backends&lt;/li&gt;
&lt;li&gt;measured worst-case timing on actual AVR, Cortex-M and ESP32 hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next stage isn't just adding features.&lt;/p&gt;

&lt;p&gt;It's measuring the behavior on real hardware.&lt;/p&gt;




&lt;p&gt;Final thought&lt;/p&gt;

&lt;p&gt;One thing embedded development keeps teaching me is that memory is hardware.&lt;/p&gt;

&lt;p&gt;Every byte is physical.&lt;/p&gt;

&lt;p&gt;Every synchronization mechanism has timing implications.&lt;/p&gt;

&lt;p&gt;Every allocation strategy has failure modes.&lt;/p&gt;

&lt;p&gt;And eventually, every abstraction has to answer to the silicon underneath it.&lt;/p&gt;

&lt;p&gt;That's why I built EcclesRTMem.&lt;/p&gt;

&lt;p&gt;Not to create the world's most sophisticated allocator.&lt;/p&gt;

&lt;p&gt;Not to declare "malloc()" obsolete.&lt;/p&gt;

&lt;p&gt;But to provide another option for firmware that needs dynamic memory while keeping its memory behavior bounded and understandable.&lt;/p&gt;

&lt;p&gt;If you're working with an MCU where RAM is measured in kilobytes rather than gigabytes, you might find it useful.&lt;/p&gt;

&lt;p&gt;Check it out&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Igwe-Starking/eccles-rtmem" rel="noopener noreferrer"&gt;https://github.com/Igwe-Starking/eccles-rtmem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use it, break it, benchmark it, or find a better way to solve the same problem, I'd genuinely like to know.&lt;/p&gt;

&lt;p&gt;The heap doesn't have to be mysterious.&lt;/p&gt;

</description>
      <category>c</category>
      <category>github</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Hi guys am designing a JVM that will run on Esp32,soon you will be able to execute java on esp32</title>
      <dc:creator>Nwobodo Ecclesiastes Chidera</dc:creator>
      <pubDate>Fri, 10 Jul 2026 15:54:47 +0000</pubDate>
      <link>https://dev.to/igwestarking/hi-guys-am-designing-a-jvm-that-will-run-on-esp32soon-you-will-be-able-to-execute-java-on-esp32-3bbp</link>
      <guid>https://dev.to/igwestarking/hi-guys-am-designing-a-jvm-that-will-run-on-esp32soon-you-will-be-able-to-execute-java-on-esp32-3bbp</guid>
      <description></description>
      <category>iot</category>
      <category>java</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>I Built an Open-Source ESP32 Smart Bike — Ready to Flash, Test, and Improve</title>
      <dc:creator>Nwobodo Ecclesiastes Chidera</dc:creator>
      <pubDate>Fri, 10 Jul 2026 10:11:12 +0000</pubDate>
      <link>https://dev.to/igwestarking/i-built-an-open-source-esp32-smart-bike-ready-to-flash-test-and-improve-1g0b</link>
      <guid>https://dev.to/igwestarking/i-built-an-open-source-esp32-smart-bike-ready-to-flash-test-and-improve-1g0b</guid>
      <description>&lt;p&gt;🚴 Weekend Challenge: Build, Flash &amp;amp; Improve My Open-Source ESP32 Smart Bike&lt;/p&gt;

&lt;p&gt;Looking for a serious ESP32 project to explore this weekend?&lt;/p&gt;

&lt;p&gt;I've been building an ESP32 Smart Bike platform that combines embedded systems, Android development, networking, audio streaming, and power management into a single open-source project.&lt;/p&gt;

&lt;p&gt;🔥 What it includes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚴 Complete ESP32 firmware (PlatformIO)&lt;/li&gt;
&lt;li&gt;📱 Complete Android application&lt;/li&gt;
&lt;li&gt;📂 Ready-to-flash Firmware, Bootloader, and LittleFS images&lt;/li&gt;
&lt;li&gt;💾 LittleFS filesystem support&lt;/li&gt;
&lt;li&gt;⚡ Intelligent Power Manager for efficient operation&lt;/li&gt;
&lt;li&gt;🌐 WebSocket-based CommandAction system for fast, reliable command communication&lt;/li&gt;
&lt;li&gt;🔊 Bluetooth A2DP audio support&lt;/li&gt;
&lt;li&gt;🎤 Real-time dual voice streaming over UDP for low-latency communication&lt;/li&gt;
&lt;li&gt;📡 ESP32 ↔ Android integration&lt;/li&gt;
&lt;li&gt;🧩 Modular C++ architecture that's easy to extend&lt;/li&gt;
&lt;li&gt;📖 Fully open-source source code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project combines several technologies that are rarely seen together in a single ESP32 application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embedded C++&lt;/li&gt;
&lt;li&gt;Android development&lt;/li&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;UDP networking&lt;/li&gt;
&lt;li&gt;Bluetooth A2DP&lt;/li&gt;
&lt;li&gt;Audio streaming&lt;/li&gt;
&lt;li&gt;Power management&lt;/li&gt;
&lt;li&gt;LittleFS&lt;/li&gt;
&lt;li&gt;Real-time communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎯 Weekend Challenge&lt;/p&gt;

&lt;p&gt;Clone the repository, flash the ESP32, install the Android app, and put it through its paces.&lt;/p&gt;

&lt;p&gt;I'm especially looking for feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Code quality&lt;/li&gt;
&lt;li&gt;Feature ideas&lt;/li&gt;
&lt;li&gt;Bug reports&lt;/li&gt;
&lt;li&gt;Documentation improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in ESP32, embedded systems, networking, Bluetooth, IoT, or Android development, I'd love to hear what you think.&lt;/p&gt;

&lt;p&gt;⭐ If you find the project useful, consider starring the repository. Contributions, pull requests, and suggestions are all welcome.&lt;/p&gt;

&lt;p&gt;GitHub Repository&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Igwe-Starking/eccles-esp32-smart-bike" rel="noopener noreferrer"&gt;https://github.com/Igwe-Starking/eccles-esp32-smart-bike&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's see what the community can build on top of it this weekend. 🚀&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>🔥 I Built an ESP32 Smart Bike Control System with an Android App (Open Source)</title>
      <dc:creator>Nwobodo Ecclesiastes Chidera</dc:creator>
      <pubDate>Tue, 07 Jul 2026 22:23:19 +0000</pubDate>
      <link>https://dev.to/igwestarking/i-built-an-esp32-smart-bike-control-system-with-an-android-app-open-source-11pn</link>
      <guid>https://dev.to/igwestarking/i-built-an-esp32-smart-bike-control-system-with-an-android-app-open-source-11pn</guid>
      <description>&lt;p&gt;🚀 I Built an ESP32 Smart Bike Control System with an Android App (Open Source)&lt;br&gt;
What if your motorcycle could become a smart vehicle without replacing its original electronics?&lt;br&gt;
For the past several months, I've been building Eccles Smart Bike, an open-source project that transforms a regular motorcycle into a Bluetooth-enabled smart bike using an ESP32 and a custom Android app.&lt;br&gt;
Instead of replacing the bike's OEM electronics, the system integrates with the existing controls, making it smarter while preserving the original functionality.&lt;br&gt;
🔥 Features&lt;br&gt;
✅ Bluetooth communication between the bike and Android app&lt;br&gt;
✅ Android app built in Java&lt;br&gt;
✅ ESP32 firmware written in C++ using ESP-IDF&lt;br&gt;
✅ Controls for indicators, horn, headlight, starter, and more&lt;br&gt;
✅ Thread-safe architecture using FreeRTOS&lt;br&gt;
✅ Designed to integrate with OEM motorcycle wiring&lt;br&gt;
✅ Open-source and continuously improving&lt;br&gt;
🛠 Technologies Used&lt;br&gt;
ESP32&lt;br&gt;
ESP-IDF&lt;br&gt;
C++&lt;br&gt;
Java&lt;br&gt;
Android Studio&lt;br&gt;
Bluetooth Classic&lt;br&gt;
FreeRTOS&lt;br&gt;
💡 Challenges&lt;br&gt;
This project involved much more than simply connecting an ESP32 to a motorcycle. It required solving problems involving:&lt;br&gt;
Reliable Bluetooth communication&lt;br&gt;
Real-time task synchronization&lt;br&gt;
Embedded software architecture&lt;br&gt;
Android-to-ESP32 messaging&lt;br&gt;
Integration with OEM motorcycle wiring without disrupting factory systems&lt;br&gt;
Extensive debugging and testing&lt;br&gt;
Every challenge taught me something new about embedded systems and automotive electronics.&lt;br&gt;
🌍 Open Source&lt;br&gt;
I'd really appreciate feedback from the embedded systems and IoT community. Whether it's code improvements, architecture suggestions, or feature ideas, I'd love to hear them.&lt;br&gt;
⭐ GitHub Repository:&lt;br&gt;
&lt;a href="https://github.com/Igwe-Starking/eccles-esp32-smart-bike" rel="noopener noreferrer"&gt;https://github.com/Igwe-Starking/eccles-esp32-smart-bike&lt;/a&gt;&lt;br&gt;
If you find the project interesting, please consider giving it a ⭐ on GitHub—it helps others discover the project and motivates continued development.&lt;br&gt;
Thanks for reading, and happy building! 🚀⚡🏍️&lt;/p&gt;

&lt;h1&gt;
  
  
  ESP32 #EmbeddedSystems #Android #OpenSource #IoT
&lt;/h1&gt;

</description>
      <category>android</category>
      <category>iot</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
