Router Mode Unlocked

Router mode for SmartPoi is where your poi connects to the Router – as opposed to the default method of one poi (main) creating an Access Point and you connecting to that. It is a bit more complicated (you need to find the poi on the network now in order to control them) but has some benefits:

  • Faster Speed
  • More Reliable
  • Less Strain on Main poi
  • Now poi can connect to internet (for upcoming Smart-Magic Poi Bridge)

How to use it?

As part of building the new version of smart-poi-js-utilities (Combined_APP folder) I upgraded the poi mode switching and made a tutorial video.

Many thanks to my Patreon supporters for covering my AI coding and hosting costs – DeepSeek came out with a new model yesterday which made this app even easier to make! You can join them here: https://www.patreon.com/c/CircusScientist for free! Get the latest updates, and be in line to get a discount when the long awaited Magic Poi go on sale (not long now!).

FastMCP LED Control Server

I made a Python program using MCP protocol to interface between AI and an LED.

Source Code: https://github.com/tomjuggler/BlinkMCPServer – includes Arduino sketch and MCP python server with example Cline json config.

Tech used: FastMCP (Python) Arduino Uno (Serial) and Cline for VSCode (MCP Client), with DeepSeek Reasoner as the LLM – massive overkill just to turn on an LED!


This project was built using Aider – pair programming in your terminal.
https://aider.chat/

Check out the demo video where I tell the AI to turn on my LED – all done from Cline agent inside VSCode!

AI Generated Images for POV Poi

I have been saying for some time now that I wanted to train an image generation model on a ton of POV Poi images to make one that I can use for Magic Poi image generation.

“I want an celtic knot image – blue with black background” should ideally generate something usable on the poi. Up until recently tools like Dalle, Stable Diffusion and Midjourney simply weren’t up to the task. The type of image that works on my poi (dark background, primary colours, pixel perfect, small size) just weren’t an option – most pics end up blurry and just look worse than making it yourself in Photoshop*. Don’t even get me started on how annoying the ChatGPT image generator is! “Image needs to have no white, only primary colours” (white image generated) “Zero White PIXELS!!!!” (Still blinds me with glaring white background)

I recently went looking again and actually found some! There is a service aptly named “thereisanaiforthat.com” with a ton of free services listed. I have linked the best ones below.

Some Example Images

Services:

https://free.theresanaiforthat.com/@kadi_228/pattern-generator-srcset

https://free.theresanaiforthat.com/@zurcher/decorative-patterns

More to view here:
https://free.theresanaiforthat.com/pattern-images/

I am not sure, you may need to sign in for these to actually work but all of the ones I linked are free!

I still have that trained image generator for poi pics on my list of things to do, but it seems I may have a better starting point to work from soon, if these projects are anything to go by. The field is advancing rapidly!

*I actually use Krita, open source image editing software with Pixel brush. It’s really good.

LLMAP advanced context generation for AI coding

I use the open source and very capable Aider for AI code generation. Anyone who has tried AI code generation has heard of “context” – the information you send over to the LLM so that it can know what the code looks like that you want to modify.

Anyone using these tools eventually comes up against the dreaded token limit at some point – some sooner rather than later! The LLM can only keep so much context in memory at one time. This is annoying if you are trying to update a legacy codebase with multiple files and countless lines of code – who wants to try to pare this down to only the relevant parts, copy and paste into the window?

In Aider adding files to context is as simple as /add file.txt
To remove files just do /drop file.txt
If file.txt is 100 000 lines long you have to copy and paste the parts you want (up to 60 000 tokens), check how many you have left by running /tokens
But that is takes too long! It defeats the purpose of getting AI to do the reading and modifying for you (remember to review the diffs after!)

Meet LLMAP

llmap is “context extraction at scale”. The tool can search and sumarise vast amounts of code and ouput only the relevant parts which you can then add to your AI coding tool context – leaving out all irrelevant parts (usually most of it!)
Example from my own use case: I had an issue with a looping api request on ESP32 in my Magic Poi project – I had been concentrating on the battery monitor feature and the new feature broke some other functionality. So I did a diff with the last known working branch:
git diff origin/Battery_Monitor_Main_Merge > context_git_diff.txt

This diff is from way back though so it was too large for the context window (if you include all of the code I wanted to update) so I had to run it through llmap with a query:
echo context_git_diff.txt | llmap "list the changes made that affect the control flow of the application." > llmap_diff_context.txt

Now my new file llmap_diff_context.txt with only the relevant information could be added to the context – using /read-only since it’s not included in git nor do I want to edit it. I used /architect mode* to see what changes happened to cause the loop. Turns out it was a simple misplaced line of code and everything worked again!
*for me architect mode is configured to use DeepSeek R1 for thinking and V3 for editing – cheap and effective

LLMAP is easy to use – just install via pip. By the way, if you don’t have a DeepSeek api key, the update I recently submitted to add OpenRouter support has been merged but not yet published. You will have to download and install llmap manually to use OpenRouter – but it works.

Full credit to Johnathan Ellis for creating and sharing this great tool. You gotta love Open Source!

Android Devices

Over the years I have had many mobile devices – all on Android. This blog post is going to go through the ones that still work, and how I use them.


  1. Xiaomi Redmi 9A
    – Main phone, primary use is Google Calendar, Maps (to get to shows) and WhatsApp. Also reading.
    – Absolutely hate this phone
    – Laggy
    – Managed to update to Android 11 but with great difficulty (hacking phone because Xiaomi doesn’t want me to upgrade my own hardware)
    – Looking for a replacement (after which I will hack it some more I guess)
    – This is the last Xiaomi I will ever get – moving back to Samsung if possible (see below)

  2. Doogee Mix Lite
    – Primary use for Podcasts
    – Old main phone (got it for the camera and fingerprint reader)
    – Doogee actually pushed an update that bricked this device!
    – After that I found a LineageOS based rom called ViperOS – Android 7, the latest available for this phone.

  3. BlackView Tab 9 (10 inch)
    – Primary use: Crunchyroll (Anime), PipePipe (YouTube) and Kodi (movies and series from my local networked HDD, when we don’t use Kodi on our Raspberry Pi 400 to watch on the “TV”).
    – My son’s old tablet, battery died because he would let it run down to 0%
    Hacked it to add replaceable batteries
    – Haven’t replaced the OS yet

  4. Lenovo Tab 7
    – Primary use FlipBoard (news reader)
    – I like to read news in the morning. 7 Inch is perfect.
    – Upgraded to Resurrection Remix OS (based on LineageOS)
    – Latest available Android 7 (upgrade from 4.4 original!)

  5. Proline 7 inch
    – Primary Use: kids friends sometimes need something to play LAN MineCraft Bedrock on, or Roblox.
    – Another Tablet that my son broke (he now has a restriction on his new one) by running the battery down.
    – Replaced the battery and now it’s a backup device.
    – Impossible to update software, turns out this has a “Spreadtrum” chip inside, a low cost, rare and very bad SOC. Did come with Android 12 “GO” version, so it works at least.

  6. Samsung Galaxy Y
    – Primary use case: Radio and Music player for shows
    – my first android phone (3.5 inch!)
    – Thanks to replaceable battery it still works
    – I bricked one trying to upgrade (my wife’s old one) so this one still has Gingerbread on it (Android v3.3)
    – Processor is Arm v6!

  7. Honorable mention: Samsung Galaxy SII
    – Worked up until a year ago
    – Used as Podcast phone and for Android App testing
    – Managed to upgrade all the way to Android 12 (LineageOS)
    – Original was JellyBean (Android 4.3)
    – Hoping to get another Samsung device for next main phone, really good experience with the two I had so far.

Conclusion

I don’t have one device that does everything. I don’t buy a flagship device when I get a new phone. But I do try to make use of old devices, which offers some benefits, including extra battery life (just use the other device while one is charging) and saving money (I am especially pleased with having a 10 inch tablet for Anime, for “FREE”)