The Curious Engineer

All blogs / Embedded / microcontrollers

atomic14

atomic14.com

A collection of slightly mad projects, instructive/educational videos, and generally interesting stuff.Building projects around the Arduino and ESP32 platforms - we'll be exploring AI, Computer Vis...

Embedded / microcontrollersElectronicsAI / ML

Posts
189 from 9 Apr 2009 to 29 Sep 2026
Posting
weekly (35 in the last year)
Kind
personal blog
Feed
https://atomic14.com/feed.xml

2026 31

  1. Jev Plays Manic Miner
  2. Failing to solve Manic Miner with RL
  3. Why is Google still serving dodgy ads?
  4. Detecting Claude and ChatGPT using letter counting.
  5. Detecting Claude by counting letters
  6. Don't blame Claude - It's me, I'm the problem, it's me...
  7. Forget the Robot Tax. Tax the Tokens.
  8. The Output Style, It Does Nothing! - Learning to live with Claude
  9. Rescuing my 2006 Travel Blog
  10. I Asked AI to Design 12 Dev Boards. It Told Me to Write a Script.
  11. Invaders! is back: rescued from a forgotten Bitbucket account I dug up my other 2009 iPhone game, Invaders!, after thinking the source was lost—turns out it was hiding in a forgotten Bitbucket git repo (thankfully not Mercurial). Claude Code helped port it to plain JavaScript and canvas while keepin
  12. Tanks! Mayhem is back: 16 years later, in your browser I dusted off my 2010 wireframe tank shooter, Tanks! Mayhem—pulled from the US App Store after an Atari complaint—and asked Claude Code to bring it back on the web. About half an hour later I had a faithful browser port: original models and sound
  13. Any Google Font on Your ESP32 Display Tired of jagged 1980s-looking text on TFT displays, I built a free, in-browser font studio that turns any of 1,900+ Google Fonts (or your own TTF) into pixel-perfect smooth fonts for TFT_eSPI, M5Stack/M5GFX, and LVGL—no uploads, no Java, no fuss. You get live, d
  14. Every Espressif Module in One Place Picking the right Espressif module means juggling datasheets, pinout diagrams and a dozen browser tabs. I've built a site that does the juggling for you: every module in one place, with searchable specs, colour-coded pinouts, interactive 3D models and side-by-side
  15. Did I Actually Make It Worse? After swapping the PIR in a cheap night light for a microwave radar module, I had a nagging suspicion I'd traded sensitivity for battery life. So I hooked both versions up to a Nordic Power Profiler Kit II and measured. The original sips 72 µA on average thanks to a cle
  16. ESP-IDF v6 in VS Code: Blink (and debug) on the ESP32-S3 I finally crawled out of the v5.x cave, installed ESP-IDF v6.0.1 with the VS Code extension, spun up the Blink example on an ESP32-S3, fixed a finicky flash by switching to UART, then used menuconfig to set the LED pin, bump the CPU to 240 MHz
  17. Hacking a Cheap PIR Night Light Into Something Actually Useful Sick of flaky PIR night lights with laughable range and timeouts, I cracked one open, reverse‑engineered the sanded‑off mystery chip, and swapped the PIR for an RC‑WL0516 microwave radar. I added an LDR, bumped the timeout with a cap, dr
  18. I learned to solve a Rubik's cube and it was incredibly disappointing I tried to learn the Rubik’s cube and got bored of rote algorithms, which nudged me toward a GPS-to-map analogy that mirrors the junior-to-senior engineer journey: from following instructions, to pattern matching, to real understa
  19. Why Won't My Board Reset? One of my ESP32 dev boards refused to reset, even though the schematic, layout, and solder joints all checked out. Continuity was dead across the reset switch, reflow didn’t help, and under the scope it looked fine—until I realized the switch was packed with flux. A soak in
  20. Is SOT666 Really Standard? I chased down QA issues on my ESP32 rainbow boards and found the culprit: a USBLC6 in “SOT666” that didn’t match KiCad’s SOT666 footprint. Turns out SOT666 isn’t really standard—Nexperia, ST, and Diodes all suggest different land patterns. I built a custom footprint in KiC
  21. MAX30102 $3 Heart Rate Monitor One of those AliExpress impulse buys finally earned its keep: I paired an ESP32-C3 with a MAX30102 and a tiny OLED to build a pocket pulse oximeter. A bit of I2C wiring, a ring-buffered sampler, and the MAX30102 HR/SpO2 algorithm later, the onboard LED is thumping alon
  22. I Made My ESP32-S3 Faster by Optimizing for SIZE — Not Speed I tuned a hot path on an ESP32-S3 and found the counter-intuitive winner: optimizing for size (-Os) beat optimizing for speed (-O2). On this chip, flash latency and instruction cache behavior dominate—tighter code stays in cache, misses le
  23. Watching LLMs Think I learned early in my almost-PhD: don’t watch the program run. Staring at loss values—or an agent’s “Thinking…”—feels like work, but it isn’t. Kick off the job, step away, and use your brain for the human stuff. 19 February 2026
  24. ESP32-C3 0.42 OLED Picked up a stack of ESP32-C3 + 0.42" SSD1306 modules and followed an existing guide, but I wasn’t keen on the 128x64-with-offset bodge. I dug into U8g2 and created a proper 72x40 SSD1306 constructor so drawing uses native coordinates. Cleaner code, same tiny display, job done. 16
  25. Turning an ESP32 into a Thermal USB Webcam Last time I faked a webcam on an ESP32; this time I built a real one. The ESP32-S3’s native USB + UVC with MJPEG makes a normal camera dead simple—grab JPEG frames and stream. The fun bit is turning an MLX90640 (32×24 thermal) into a proper USB camera: read
  26. Pong Cam - My ESP32S3 Thinks It's a WebCam! I turned an ESP32-S3 into a plug-and-play USB webcam—with no camera attached. The ESP32 generates its own frames, encodes them as JPEGs, and streams them over UVC as MJPEG. I ramp it up from a static BBC test card, to animated GIF playback, and finally a f
  27. Micrso SD Card Adaptors - Basic vs Branded I cracked open a bargain AmazonBasics microSD→SD adapter and a branded SanDisk to see if the cheap stuff is actually worse inside. No speed tests—just a microscope look at the mechanics. The contact designs are surprisingly different: AmazonBasics uses thin
  28. I Bodged a microSD Adapter Back to Life A cheap microSD adapter died with a horrible scratchy noise, so instead of binning it I cracked it open, found a snapped spring contact, and soldered on a resistor lead as a makeshift tip. Against all odds, it worked and the card mounted—proof these things are
  29. When “Software Bugs” Are Actually Bad Soldering A quick MLX90640 IR camera test turned into a dead-on-I2C mystery. I ran the usual checks—addresses, pull-ups, voltages, wiring—and even fixed my forgotten UART/I2C jumper, but still nothing. A peek under the microscope revealed sketchy solder on the 3
  30. Train Surgery I took a hilariously loud, 4xAA-hungry toy train and gave it a proper glow-up: dropped an 18650 in the coal car, used a charger/protect/boost board dialed to ~5.5 V, and added a simple series pot as a volume knob. After some careful teardown, polarity sanity checks (center positive!),
  31. ESP32 Rainbow QA - A tale of three boards We’ve shipped a few hundred ESP32 Rainbow boards-most are perfect - but a few failed QA. Here’s how we tracked down and fixed three real-world faults: no sound from lifted headphone jack pads, USB not enumerating due to a mis-seated ESD IC pin, and a flaky t

2025 28

  1. That was 2025! 2025 was the year I actually shipped hardware: the ESP32 Rainbow—a modern, full-color riff on the Sinclair Spectrum—crowdfunded, certified, manufactured, and in customers' hands. The economics were brutal (COGS, tariffs, shipping, CE/UKCA), but the community made it worth it. I also w
  2. The six stages of debugging - ESP32 Debugging Every dev knows the six stages of debugging—from 'That can't happen' to 'How did this ever work?' On embedded projects I’ve lived on Serial.println and blinking LEDs, but modern ESP32s have built‑in USB/JTAG so you can set breakpoints, step through code,
  3. ESP32-S3 Dev Board Assembly I finally assembled our ESP32-S3 dev boards—used a stencil for easy SMD work, fixed a few tiny USB solder bridges with flux, and even hand-built one for fun. The EPAD isn’t required (per the datasheet), power LEDs look good, and on macOS you can spot it under /dev before
  4. I Built a 27V Circuit to Fix This $3 Gadget I revived a cheap scribble pad by swapping its fried board for a tiny PCB that boosts a coin cell to 27 V—enough to cleanly reset the bistable LCD. It’s a Joule Thief with Zener regulation and twin 220 µH inductors (mounted in opposite orientations), pulli
  5. I made a 10 Cent MCU Talk I taught a 10¢ CH32V003 RISC‑V MCU to talk. By bit-banging PWM as a DAC and using a tiny 2‑bit ADPCM decoder, I squeezed ~6–7 seconds of recognizable audio into 16 KB of flash. Then I went full retro with LPC speech synthesis (Think: Speak & Spell) using the Talkie library
  6. Brain Surgery I cracked open a cheap Halloween toy, found the super-simple LED + LR41 setup with the arm-as-switch trick, and swapped the ‘empty head’ for my own CH32V003 + buzzer PCB. Now it screams as well as shines—powered by a small lithium cell for extra volume because if you’re going to be ann
  7. 10 Cent Music Machine I built a tiny coin‑cell music board around the $0.10 WCH CH32V003J4M6 (8‑pin, 48MHz RISC‑V, 16K flash/2K RAM). The PCB is just 16.3×11.7mm with a piezo buzzer and transistor, and in standby it sips 7–8µA. I did hit a snag: playback caused 130mA peaks that browned out a CR2032.
  8. PDM Microphone Mystery I was puzzled that ESP-IDF’s PDM I2S config has no LR pin—until I actually read the mic’s datasheet. On PDM mics, LR isn’t a word-select clock at all; it picks which clock edge the mic drives and tri-states on the opposite edge. Tie one mic’s LR low and the other high and both
  9. ESP32-S3 USB UAC I turned my new ESP32‑S3 board into a USB Audio device. After a ninja LED fix and confirming the IMU and charging, I streamed mic audio over Web Serial (with a slick AI-made ‘Audio Studio’) and then via USB UAC. The mic sounds great, but the speaker is crackly over UAC—even though I
  10. High voltage coin cell I blew up the original PCB on a bistable cholesteric display, so I built a coin-cell Joule thief to crank out 27V and bring it back to life. A simple two-inductor setup with a 27V Zener does the trick—about 10 mA while the button’s held. Then I got fancy with a regulated versi
  11. Easy esp32 s3 dev board Quick recap: I’m putting together a super simple ESP32-S3 dev board—there’s a video walkthrough, the full KiCad project on GitHub, plus the schematic and a slick 3D render of the assembled board. 20 September 2025
  12. Red Arcade Thing Repair I resurrected a dead AliExpress arcade handheld by swapping the blown 3.3V regulator (I now own 99 spares), adding a TP4056 charger with Schottky diode isolation, and nursing a 0V LiPo back to life. A bit of hot-plate rework, tidier wiring, and—flip the switch—boom: it boots!
  13. It blew itself up! I recently got my hands on a cheap mini handheld game console from AliExpress that gave up the ghost a bit sooner than expected! After some detective work with a multimeter, I found a dead battery and a suspicious burn mark on the PCB. Looks like the culprit was a failed capacitor
  14. Web Serial Plotter I've created a web-based serial plotter for easy data visualization from Arduino and ESP32 projects. It boasts real-time plotting, interactive controls, data analysis, and a serial console—all within your browser with no extra installations needed. Give it a try and streamline you
  15. Tearing Down a Bistable Cholesteric Display I recently dug out my bistable cholesteric display and decided to see how it works after being inspired by Big Clive's teardown. This nifty gadget, which allows you to write and erase with just a button, operates on bistable cholesteric crystals without ne
  16. This number does nothing Ever wondered about the ubiquitous 'Serial.begin(115200);' in your Arduino projects? It turns out, with boards like the ESP32-S3 offering native USB support, this baud rate doesn't really matter when streaming data. My tests even showed surprising results with different spee
  17. My pcb has a digital twin In my latest hardware experiment, I dove into testing the LSM6DS3 accelerometer and gyroscope on a custom board. While accelerometer mode adeptly handles pitch and roll detection, the gyroscope mode offers smooth rotational insights, despite its tendency for drift. Fusion m
  18. A nicer repair After my previous messy attempt, I aimed for a more refined repair by carefully matching and tinning the bodge wire. Despite a minor mishap during the cleaning, the final result is much cleaner thanks to solder resist. I feel like I'm improving! Watch the video to see the process! 07
  19. Oops I Did It Again New PCBs have arrived, but of course, things didn't go as planned! The simplest part, the LED, was a bust due to a common anode vs. common cathode mix-up in the design. Thankfully, the fix wasn't too tough: just needed some good ol' solder resist, a bit of desoldering and resolde
  20. Crowdfunding Success - Was it worth it? I embarked on a thrilling adventure of turning a nifty idea into a tangible product — the ESP32 Rainbow, a Sinclair Spectrum-inspired gadget that merges retro vibes with modern tech. With the brains of an ESP32-S3, capacitive touch, a built-in display, and som
  21. Worlds smallest USB-C Li-Ion charger I stumbled upon these incredibly tiny USB-C Li-ion chargers on AliExpress and couldn't resist checking them out! These minuscule PCBs, just 10mm x 6mm, feature the LP4054 (or TP4054) linear battery charger. With a 1.65K programming resistor, they offer a charging
  22. Vibing a PCB - surprisingly good In my latest adventure, I challenged AI to design a working ESP32-S3 development board from scratch using Atopile and Claude. The idea was as simple as vibe-coding actual hardware without diving into the code. It was a chaotic yet fascinating journey, with some misse
  23. Just Vibe It I crafted a whimsical single key keyboard ideal for vibe coding! It's powered by a TPS2117-equipped PCB, offering slick battery-to-USB switching. Tried out low profile Cherry switches, but faced some stabilizer challenges with bigger keycaps. Check out the final fun in my GitHub repo an
  24. More fun and games with high voltage Hey everyone! I know it's been a while since the last video, but things have been crazy busy with shipping off the ESP32 Rainbows. Lately, I've been diving into the world of high voltage again. My last endeavor with a high voltage board led to some gnarly wavefor
  25. Danger danger high voltage In this blog post, I explore my experiments with high-voltage circuits, trying to light up LED filaments salvaged from broken light bulbs. Despite some explosive mishaps with capacitors and MOSFETs, I decided to try a proper DC-DC converter. Unfortunately, the one I got tu
  26. Whats wrong with my lightbulbs In the saga of my beleaguered light bulbs, I've found myself knee-deep in electrical components and a fair bit of frustration. Of the four LED bulbs I invested in, only one survives unscathed, while another's flickering demise is imminent. My investigation revealed ove
  27. Electronic chopsticks I recently got my hands on the HT140 Solder Tweezers from Sequre, adding an exciting new piece to my toolkit. Powering it via USB-C, these electronic chopsticks heat up fast thanks to a robust 65W power supply. Testing on a Raspberry Pi Pico board proved successful with a littl
  28. Custom kicad silk screen In my latest blog post, I dive into the surprisingly straightforward process of importing custom graphic designs into KiCad for your PCB projects. While KiCad's built-in silk screen tools are basic, the Image Converter tool makes it easy to bring your unique designs to life,

2024 15

  1. Thats a wrap It's that festive time of year when goodies arrive from PCBWay, and what a delightful surprise to receive the Partner of the Year award! A huge thanks to PCBWay, my Patreons, and GitHub sponsors for the amazing support. This year has been thrilling, starting with ESP32 projects and divi
  2. Old school tape loading If you're anything like me, the nostalgic screeches of ZX Spectrum games loading might bring a smile to your face. I've taken a trip down memory lane by working on my own tribute to this iconic machine—introducing the ESP32 Rainbow. It’s on Crowd Supply, where we're closing i
  3. More Updates on the ZX Spectrum Board I'm gearing up for production with some updates to our prototype, including switching to a 4-layer board to improve EMI, and refining USB power filtering. Check out the video for a deep dive into our battery charger and an exciting expansion port for potential H
  4. 1 touch pin 8 touch pads To make my ESP32 ZX Spectrum touch keyboard work even better, I needed to ensure every key was independent. The ESP32-S3 only has 14 touch pins, so I’ve been using a matrix approach. While this works well, it struggles with key combinations, critical for the ZX Spectrum. I e
  5. I broke it and then i fixed it Started off on a techie adventure with an RP2040 DVI board from Adafruit, aiming to get the pico-zxspectrum going. Things started acting haywire once the USB hub got involved, ending in a complete shutdown, intuitive diagnosis showed the power pin was a ghost town! Aft
  6. Esp32 s3 zx spectrum In a bid to quench my nostalgia and flex my ESP32 chops, I managed to get a ZX Spectrum emulator running on my ESP32-TV board! Then, spurred on by PCBWay's new full color silk screen service, I pursuit the audacious task of recreating the ZX Spectrum's iconic keyboard. It's been
  7. Dave come see - it's beautiful man Hey folks, I revisited my flame lamp project from 2020 and gave it a serious upgrade - we're talking a leap from 300 to a whopping 1024 LEDs thanks to these nifty flexible WS2812 panels. I've kitted it out with a versatile PCB from my Crystal Balls project, tackled
  8. Look at my shiny crystal balls Just upgraded my basic AliExpress crystal balls with some tech wizardry - I've thrown in an ESP32-S3-MINI, a mic, and made them battery powered. Thanks to WLED software, they're now smart and responsive! Shared the KiCAD project for fellow tinkerers. Check out my video
  9. I got this feeling bezos is watching Discovered my Hue switch battery performance is correlated with room temperature after a nifty web scrape of Amazon's device usage history. While it's a given that batteries are temperature-sensitive, actual data from my own living room provided a neat confirmati
  10. Are my usb cables any good Building a USB cable tester turned out to be trickier than anticipated! My first attempt with fully shielded USB sockets was foiled by design flaws and hidden solder issues. The second iteration featured more accessible sockets, yet still posed challenges. The improvement
  11. Making hard pcbs at home In my latest DIY adventure, I explored nickel plating to harden PCBs at home. I was inspired by a slick resistor box design I found through EEVBlog, which had an incredibly cool switching technique but left the PCBs vulnerable to wear from contact scraping. Despite some init
  12. Easy kicad symbol footprint and 3d After many months of using EasyEDA for PCB design due to its tight integration with LCSC's parts catalog, I switched to KiCad for one critical feature: 3D model exports for designing enclosures. Despite KiCad's vast library, sourcing symbols, footprints, and 3D mod
  13. 16 bit mini handheld video arcade Disassembling a 16-bit mini handheld video arcade revealed a fairly uncomplex interior with most of the functionality being handled by a blob chip on a single-sided PCB. Despite the simplicity, the impressive design manages to fit 156 games into flash storage on a m
  14. ESP32 TV Version 3 In the latest board revision, I've successfully resolved some key issues, including a USB interface conflict between the USB2244 and the ESP32 and a risky battery charging mistake—no more direct USB 5V to the battery! Plus, I managed to wrap this up without any clumsy bodge wiring
  15. E32-S3 no DAC - No Problem! We'll Use PDM In this post, I tackle the lack of a DAC on the ESP32-S3 by demonstrating how to use Pulse Density Modulated (PDM) audio with Sigma Delta Modulation to achieve analog audio output. I explore the simplicity of creating a PDM signal and its reconstruction into

2023 36

  1. Interesting LED Curtain Dove into hacking an LED curtain and discovered that despite lacking visible daisy chaining, it's hackable! With LEDs pre-programmed for their position, it can receive collective data and recognize individual signals. Flashed WLED firmware onto an ESP32 and, voila, it lit up
  2. ESP32-S3: Which Pins Should I Use? As an enthusiast of the ESP32-S3's versatility, I recognized the importance of understanding which pins are best to avoid. Inspired by the Random Nerds page for the classic ESP32, I've created a comprehensive pinout for the ESP32-S3 available on GitHub. The communi
  3. A Potentially Explosive Error Just received the new PCBs for the ESP32-TV project and they're looking sharp with only a tiny resistor tweak needed. But I discovered a sneaky, undocumented resistor causing a conflict between the ESP32 and USB2244 over the USB connection. Fixed that, but there's a big
  4. Printing PCBs At Home! Got my hands on a Voltera machine for at-home PCB prototyping - it's a game-changer! Using conductive silver ink, it prints traces and pads, but it's quite finicky, much like 3D printing. It has limitations, such as trace widths, pin pitch for SMT components, and the high cost
  5. OpenAI Keynote - According to GPT4 OpenAI's new offerings are game-changers in the AI field, with personalized ChatGPT variants (GPTs), a developer-friendly Assistance API, GPT-4 Turbo with enhanced capabilities, and novel voice and vision modalities. These innovations, bolstered by a strategic part
  6. I Need More USB Power! I've been accumulating more and more USB powered devices for my workbench lately, and my single 65W USB-C supply just isn't cutting it anymore. So, I've decided to source a new solution. After some digging, I stumbled upon a remarkable board on AliExpress with four USB standar
  7. ESP32-S3 USBMSC - Can we make it faster? After lots of tinkering, I've managed to improve the speed of writing to the SD Card of my ESP32-TV considerably, but it's still not as fast as I'd like. The Arduino 'readRaw' and 'writeRaw' functions were the culprits, they can only write one sector at a tim
  8. A Faster ESP32 JPEG Decoder? An intriguing issue appeared in the esp32-tv project that deals with speeding up JPEG file decoding using SIMD (Single Instruction Multiple Data) instructions, showing immense performance boost. However, there were some notable differences in speed when it comes to drawi
  9. Decoding AVI Files for Fun and... After some quality time with my ESP32 microcontroller, I've developed a version of the TinyTV and learned a lot about video and audio streaming along the way. Using Python and Wi-Fi technology, I was able to set up the streaming server with audio data, video frames,
  10. ESP32-S3 Hardware SPI on the Adafruit ST7789 I've had some commenters point out the issue with the slow display updates in my recent Arduino Nano ESP32 video. It turns out, the software SPI of the Adafruit_ST7789 library was the culprit. Lo and behold, the solution is simple - using the hardware SPI
  11. Should I Start a YouTube Channel? (in 2023) In this post, I strongly discourage anyone who's thinking of starting a YouTube channel due to the immense amount of commitment and work it requires, in return for almost nothing. Despite my own success as a YouTuber, I argue that it's not at all as fun an
  12. Minimalist Microcontroller: Building a Bare-Bones Dev Board In a thrilling DIY endeavour, I attempted to build the most minimalist ESP32 dev board possible. Diving deep into the schematic of the ESP32 S3 WROOM module, I chopped out the non-essentials and whittled our needs down to bare bones. The ex
  13. No Power? No Problem! A Wireless Pi Doom Machine In my latest wireless charging experiments, I got my hands on a set of wireless charging PCBs and dove into testing different voltage inputs and their efficiency levels. It was interesting to realise that the 5V input managed to provide a decent effic
  14. 75% Less Power! - Saving the Planet With Motion Sensing and Image Processing In this blog, I was dealing with a conundrum on how to reduce the power consumption of my cool magic mirror that was always on, always drawing power. I considered options such as a PIR (Passive Infra Red) sensor and a doppl
  15. Manufactured Outrage Social media outrage is often fueled by out-of-context statements and its ripple effects can alter stock prices and reputations permanently. A recent example was a drop in Wickes' share price due to #boycotwickes trending on Twitter. Many times, outrage is based on misinterprete
  16. The Center of Computing History Faced with free time in Cambridge, I decided to visit the Center of Computing History. It's a bit quirky and tucked away in an industrial park, but worth finding. Right in the entrance, you'll see the Megaprocessor, a 16-bit processor that's programmed to play Tetris.
  17. ChatGPT Plugins - First Impressions and Stats Now having been two weeks since the release of my Chess plugin on the ChatGPT plugin store, I've decided to share some preliminary stats & thoughts. Initially achieving a day high of 1,800 games, we unfortunately experienced a user drop-off while the plu
  18. Improving my blog using AI - Part 2 - Images Over time, I've realized that my blog's front page looked a tad dull due to the absence of header images for some of the older posts. Hence, I decided to put AI-powered image generation platforms, DALL-E 2 and Midjourney, to the test. While DALL-E 2 offer
  19. Improving My Blog Using AI In this blog post, I detail how I've made significant improvements to my long-time blog by integrating advanced AI tools. Using OpenAI's ChatGPT, I've successfully automated the tagging of my articles and generating precise summaries for each, enhancing my blog's navigabil
  20. Do you need a ChatGPT plugin? We've seen two major shifts in technology trends with websites and mobile apps - now there's a third one rearing its head. OpenAI's ChatGPT with plugins is on the cards and you better be ready for it. In the midst of fumbling for answers to whether we need these plugins
  21. Using ChatGPT for home automation In another thrilling adventure with ChatGPT, I endeavored to integrate it with a Raspberry Pi, effectively turning it into my own personal light switch. My custom ChatGPT plugin, sporting just two endpoints, could revolutionize how we handle APIs, as it managed to c
  22. Hue Light Hack In a fun-filled deep dive into a Philip's Hue Color light bulb, I disassembled, analyzed, and ultimately restored it to working order. Over the course of the hack, I dismantled the bulb’s interior, from the aluminum PCB to the tiny ICs on the logic board, gave a detailed breakdown of
  23. Adding Memory To ChatGPT Exploring the capabilities of ChatGPT, particularly GPT-4, I exposed a shortcoming regarding the model's ability to remember or store information it has 'thought' about during a dialogue sequence. Probing deeper, I developed an experimental system named ChatGPT Memory to inp
  24. We don't need no stinking badges - Or maybe we do? Arduino Build Badges In this post, I explore the usefulness of GitHub badges to easily represent the status of a GitHub project. I discuss their importance in attracting people to your project and provide a step-by-step guide on how to add these bad
  25. AI Tools in Coding: Progress or Just Optimization of the Status Quo? Pondered the future of coding with a colleague of mine recently, as one does. Couldn't help feeling a tad underwhelmed by the programming tools like GitHub's Copilot X and ChatGPT. Sure, these AI-powered coding buddies are smart, h
  26. Energy Scavenging - Can we keep our electronics running indefinitely? After a previous unsuccessful attempt to power my Christmas lights with solar power, I've decided to try run my ultra-energy efficient ePaper weather display on solar energy. This display, already low on power consumption thanks t
  27. Why does ChatGPT make mistakes - a layman's explanation In this enlightening blog post, I dive into the tantalizing world of ChatGPT and Large Language Models. Clarifying its operation, I unlock this enigma by comparing its mechanisms to a simple language model. However, Challenges arise due to the
  28. The Curse Of YouTube I've built a successful YouTube channel in the 'maker' niche, with over 100 videos and 27,000 subscribers since I started in 2020. Despite loving the journey of generating and executing ideas and building a community, I've felt the constraints of sticking to the narrow content s
  29. Cocktail Bot Using Official ChatGPT API In this post, I cover the migration of our cocktail bot to use the newly available ChatGPT API. Prompt engineering is performed to accurately guide the bot's versatility in cocktail recommendations. A Python application is provided via GitHub for testing the c
  30. I was wrong - we've not reached peak ChatGPT hype yet... Strap yourselves in, folks, we're in for a wild ride! ChatGPT's new API has reignited my excitement for Large Language Models, just like the start of the dot com boom. With the pricing now 10 times cheaper, a flurry of creative and previously
  31. DIY 20,000mAh Power Bank - Was it worth it? In this blog post, I embarked on a fun project to create a DIY power bank using two 10,000mAh lithium cells I had lying around, and a charge control board. After some tinkering and tests, I learned that measuring power bank efficiency requires more than lo
  32. A Public GitHub Repo != A Support Contract As a developer frequently publishing code snippets on GitHub, I'm finding an increasing amount of my time being demanded for support and fixes. The reality is, I don't always have the time or resources to provide the help that each user deserves. 'Cloners b
  33. Make Your Own AI Chatbot In a sea of ChatGPT chatter, we're stirring things up a bit with a cocktail chatbot of our own. From 'prompt engineering' to tailoring your bot for chit-chat about martinis, we've got you covered - the OpenAI playground is our bartender school! It won't just mix up your favo
  34. A Kickstarter Success Story While exploring my old tweets, I noticed one where I exuberantly declared 'I'm getting a drone!', leading me down a rabbit hole that included a forgotten Kickstarter campaign and a $520 pledge. After fearing I'd fallen victim again to a failed Kickstarter project, I disco
  35. It's Plausible, But Is It True? Here's a wild ride with ChatGPT and other large language models! They're ace at cooking up plausible-sounding text, but they're not always the best when it comes to spitting out the truth - they've got a funky relationship with facts. One research paper showed they ca
  36. We should be embracing ChatGPT and Friends In this article, I explore the different reactions that folks are having towards this tidal wave of AI in our lives, ranging from 'meh' dismissals to outright existential anxiety. I argue that AI is here to augment our capabilities, not replace us. While we

2022 12

  1. The Hacker News Effect My recent post was featured on Hacker News and rose to the number 2 spot, attracting over 45,000 requests or 29,000 unique IPs in a single day, a phenomenon known as the 'Hacker News Effect'. Since my Jekyll-generated site largely comprises static HTML, CSS and images and is h
  2. Using ChatGPT As a Co-Founder In the quest to explore the capabilities of ChatGPT, I decided to utilized it as a startup brainstorming partner. From product description to building the product on AWS and GCP, crafting an elevator pitch, highlighting the ideal customer profile, sketching a business p
  3. Axial Flux PCB Motors - Wedge or Spiral Coils - Which is best? I've delved deep into the reason why people prefer to use wedge-shaped coils when building PCB motors. After a lot of Googling, a bit of Python scripting, and a ton of visuals, what emerged was a very compelling argument for the humble w
  4. KiCad PCBNew Python Scripting Cheat Sheet Recently, I've been dipping my toes into the world of KiCad action plugins, specifically one for generating coils. In this post, I've jotted down some key learnings that would serve as a guide for myself in the future and for anyone else interested in buildi
  5. Scripting KiCad to make coils I've been diving deep into the world of PCB (Printed Circuit Board) coils, inspired by Carl Bugeja's incredible PCB motors! After deciding to set up an automated process for creating the coils rather than manually drawing them (can you imagine?), I found our main constr
  6. Forget SSH and vim, Use VSCode to Remote Develop on the Raspberry Pi In this blog post, I share how you can avoid hassles of SSH and use VSCode for remotely developing on the Raspberry Pi. I walk through how to initially configure the Pi in a headless setup using the Pi imager app. Then, we install
  7. A Life in Tech - The Early Years I was fortunate enough to enter the world in 1971 alongside Intel's 4004 microprocessor – a moment that ushered in the digital era as we know it. Although a bit of an educational renegade, my curiosity steered me down a path filled with ZX Spectrums, Christmas wish l
  8. Launching the MakerNews Email List Battling YouTube's frustrating algorithms, I’ve decided to take matters in my own hands. Why rely on YouTube to reach my audience when I, along with a group of fellow Makers around the world, can start up a newsletter to directly connect with our fans? To spice thi
  9. Flashing the TS80P with IronOS In this blog post, I explore the TS80P soldering iron, a tool that has been generating buzz. One of the highlights is that its firmware can be flashed with an open source system called IronOS. Here, I share my process of flashing the TS80P with IronOS and testing it ou
  10. What does a successful YouTube video look like? Wow, one of my videos hit 1.8 million views! Mind-blowing, right? But is it really a 'successful' YouTube video? To answer that, I compared my stats with mega channels like MrBeast and niche channels like GreatScott and The Guy with the Swiss Accent. S
  11. Picking up Free Lithium Cells Off the Street and Making them Safe for Use This blog post reveals how you can salvage lithium cells from the many discarded, disposable vape devices that get littered in our towns and cities. With a pair of pliers and some bravery, I managed to rescue some decent batte
  12. The PCBs are in production - what have I messed up? After some stress and trepidation, I finally took the plunge and sent my PCB design off for manufacturing. My design centers around building a large seven-segment clock with LED filaments. Jumping hurdles such as voltages, pin usage, and limiting t

2021 1

  1. ESP32 I2S DMA Settings - dma_buf_len and dma_buf_count Explained In this blog post, we delve deep into the intriguing concepts of I2S audio and DMA, particularly focusing on parameters like dma_buf_count and dma_buf_len. We explore their roles, ideal values, and the impacts they have on aspects such

2020 10

  1. Are you an effective team? This blog outlines the absolute fundamental elements that any competent team needs to ensure smooth operations. It emphasizes the importance of continuous integration, continuous deployment, running effective unit tests, comprehensive code reviews, and the ability to run t
  2. DIY Alexa With the ESP32 and Wit.ai This post provides a comprehensive guide to building a do-it-yourself (DIY) Alexa using an ESP32 and Wit.ai. It illustrates how to create a wake word detection system, use Python for machine learning and employ TensorFlow for the 'wake' word identification. It als
  3. ESP32 Audio Input - MAX4466, MAX9814, SPH0645LM4H, INMP441 In this blog post, I've delved deep into the world of audio input for ESP32, exploring all the different options for getting analogue audio data into the device. After discussing the use of the built-in Analogue to Digital Converts (ADCs), I
  4. TensorFlow Categorical Classification In this blog, I venture beyond binary classification and delve into categorical classification using TensorFlow. Specifically, I show how to generate and classify images into four categories: blank, square, circle, and triangle. Crucially, I highlight the use of
  5. TensorFlow Binary Classification In this playful tutorial for binary classification aided by visuals, we create a Python generator that generates alternating images of squares and circles, which we then classify using TensorFlow. We take special care to point out, too, that to get binary classificat
  6. TensorFlow has two random seeds In this post, I reminded myself about some peculiarity with TensorFlow's tf.random.shuffle. I assumed that using the same seed for two shuffle operations would always output the same results but turns out, I was wrong! I discovered that I need to set the global seed w
  7. How to Log Logging errors and exceptions are often the bare minimum folks set-up but hey, it's time we optimized this! We need log trails that allow us to follow the code - the 'happy path'. Why, you ask? To be able to trace user reported bugs, have a visual of where the code went rogue and save ton
  8. How do we debug? Today, we dissected a classic programmer joke about the stages of debugging and why we find it funny while it reflects a dire situation. We pondered why our first instinct is to dismiss a bug, dug into invalid claims about machines, and appreciated the shift from denial and blame to
  9. Augmented Reality In The Browser This blog showcases the progress of my idea to create an augmented reality Sudoku solver using technology that enables us to solve puzzles in our browser rather than with dedicated apps. I have developed an AR Sudoku solver with a simple image processing pipeline. It
  10. Self Organising WS2811 LEDs I've successfully used addressable WS2811 LED strings and an ESP-CAM board to create an adjustable lighting system. The best part is that the image processing code can be duplicated in JavaScript which allows you to use a plain dev board to drive the LEDs instead of needi

2017 12

  1. Vision Kit and CoreML In this technical tutorial, we walk through the process of wiring up the iPhone's camera to CoreML using Vision Kit, allowing us to run machine learning models against the camera input. We outline the necessary steps in creating a new Xcode project; capturing video frames; usin
  2. Adding Swap to Elastic Beanstalk In this post, I discuss how running Elastic Beanstalk on small instances may lead to memory exhaustion, particularly when deploying applications that rely on gems with native extensions. To combat this, I suggest adding swap to the instances, providing a file and cod
  3. Step 8: Set up Active Job on Elastic Beanstalk This blog post walks through setting up a worker environment on Elastic Beanstalk and using SQS as our Active Job queue, using the active-elastic-job Gem. We start by creating a new queue in our AWS account via Simple Queue Service. Then, we provide our
  4. Connecting PSQL and Rails Console to Elastic Beanstalk In this post, we explore a solution to the challenge of running the Rails console against a PostgreSQL database housed in a private subnet for security reasons. While it's a good security practice, it can limit access for bootstrapping users or
  5. .Net Core and PostgreSQL on the Mac In this blog post, we look at how to connect .NET Core's Web API with PostgreSQL on a Mac platform. We go through step-by-step instructions including setting up a new .NET project and creating a Web API, installing and using dotnet command line, installing require
  6. Step 7: Action Cable on Elastic Beanstalk This blog provides detailed steps and configurations on setting up an application using Action Cable feature in Rails 5. It talks about setting up proper environment for the application to run and includes using both PostgreSQL and Redis as backend services
  7. Step 6: Add a Custom Domain and SSL to Elastic Beanstalk In this post, we successfully set up a custom domain name for our Elastic Beanstalk environment and secured it using SSL. By creating a CNAME or an ALIAS pointing at our environment URL (found on the dashboard screen), we made our app accessib
  8. Step 5: Use CircleCI to Deploy To Elastic Beanstalk In this blog post, we're going to set up an automated deployment pipeline using CircleCI, GitHub, and AWS Elastic Beanstalk. We'll begin by creating a GitHub repository for our Rails application. Next, we're going to help CircleCI understand our bu
  9. Step 4: Deploy Rails App To Elastic Beanstalk from Command Line This post guides you through the essential steps of creating and deploying a Rails application into Elastic Beanstalk environment. Topics include creating an AWS user, configuring AWS CLI for deployment, and setting up the environment v
  10. Step 3 - Configure RDS: Deploying a Rails Application to Elastic Beanstalk We're moving on and tightening our database security in step 3. We're running our database in private subnets within a created RDS instance on our VPC, making sure our data isn't accidentally left in the open. After setting u
  11. Step 2 - Setup Elastic Beanstalk: Deploying a Rails Application to Elastic Beanstalk In this post, I describe how to set up, configure and deploy an Elastic Beanstalk application on a VPC in Amazon AWS, using Rails 5 and Ruby, using Puma for deployment and configuration of Public and Private subnets
  12. Step 1 - Setup VPC: Deploying a Rails Application to Elastic Beanstalk In this blog post, I am guiding you through the process of deploying a Rails application to Elastic Beanstalk in a Virtual Private Cloud (VPC) on Amazon AWS. I detail the setup of a VPC, subnets, and internet gateways, as well as

2014 12

  1. Raspberry Pi BTLE Device Just wrapped up the first iOSCon hackathon and had a blast tinkering with my Raspberry Pi, turning it into a full-fledged Bluetooth device in sync with an iPhone app. Used node for setting up and Bleno for creating Bluetooth low energy peripherals. Penned down each step for
  2. Raspberry Pi iBeacon In today's blog post, I successfully turned my Raspberry Pi into an iBeacon using a Bluetooth dongle and following an Adafruit tutorial. I had to go under the hood a bit to make sure my dongle was recognized, but after adding some udev rules, it was good to go. Then, with a stri
  3. Raspberry pi Infrared Receiver In this fun tech adventure, I successfully managed to sync my infrared receiver to my Raspberry Pi. This involved correctly wiring up my IR sensor, installing and setting up LIRC, and creating a new lirc config file. I explained each step in detail and shared my major
  4. Connecting up the MCP23S17 and HD44780U based LCD Ever wondered how to hook up an LCD display with your Raspberry Pi without using up all your GPIO pins? With the right tools, such as the MCP23S17 and wiringPi, you can effortlessly keep your I2C, UART, and SPI functionalities free for other worthwhi
  5. Raspberry Pi temperature sensor In just a bit of time, I managed to successfully get my temperature sensor, the DS18B20, up and running on my new Raspberry Pi. My starter kit even included a ready made circuit board for the sensor, making wiring a no-brainer. After following the setup instructions a
  6. Version 2 of SudokuGrab released We've updated SudokuGrab with some major enhancements including iCloud syncing for your puzzles and support for iPads. There are a few bugs we're aware of and we're actively working to fix them in the coming weeks, with a new version already submitted to the app stor
  7. Mutiple Devices and User Defaults In this blog, we're diving into the details of setting up and using iCloud's NSUbiquitousKeyValueStore to help persist settings in the new universal app version of Sudoku Grab. We'll look at how to enable cloud syncing for your app, handle updates from iCloud, and p
  8. Updating Sudoku Grab Currently, I am revitalizing Sudoku Grab, my first app ever, published in 2009. The plan involves updating the code, upgrading to ARC, simplifying the menu system, accommodating iOS7, and supporting 4-inch display sizes. Future updates may include iCloud syncing features for uni
  9. Grunt Liquibase Plugin After putting in some work, I've successfully figured out how to create a real grunt plugin. I've discovered that a node module is essentially a node application with a package.json, and with this understanding, setting up became simple. My new plugin can be found at the given
  10. Grunt and Liquibase Exploring node.js and its associated tools, I've been intrigued by Grunt, dubbed as 'The JavaScript Task Runner'. Amid building a project, I wanted to integrate Liquibase - a useful database schema management tool we used in developing Vollow.me. Despite the lack of a Grunt plugi
  11. iOScon 2014 Stoked to let you know I'm part of the team organising the first ever iOScon 2014 with SkillsMatter! Be quick and snag an early bird ticket for a mere £95! Jam-packed with the brightest minds in iOS development and design, this is your golden chance to keep ahead of the curve, explore ne
  12. Welcome to Jekyll! Just switched the blog to github pages and jekyll. A new journey begins! 16 January 2014

2013 2

  1. Reading barcodes in iOS7 In iOS7, a previously unannounced feature allows the ability to read barcodes. Incorporating a new output for AVCapture known as AVCaptureMetadataOutput, supported formats for 1D and 2D barcodes can be read. Demonstrating the ease of use, a simple code snippet is provided to
  2. Sorry for the long silence... Haven't been around for a while, folks! Been keeping busy with a startup and working on a server-side project for www.vollow.me. Time to dust off those old Java and database abilities! Soon, I'll be getting my hands on building the app to go with the website. Keep your

2012 2

  1. Cropping the results from UIImagePickerController Wrestled with UIImagePickerControllerCropRect today for cropping images. Some of the codes out there were ridiculously long winded, so I took a stab at whittling it down myself. Safely arrived at a streamlined solution that dealt with the size of ima
  2. GameKit and GameCenter Had a blast at iOSDevUK - a fantastic conference that was not only filled with intriguing talks, but also offered me the opportunity to present my own talk. I discussed making real time multiplayer games using GameKit and GameCenter. The slides and notes from my talk are avail

2011 2

  1. Tanks! will soon be removed from the US app store Well, it's game over for my creation, Tanks!, in the US app store. You won't believe this but Atari's claiming it treads too closely to their copyright. Kinda feels like they think they hold the exclusive rights to all tank-driving games. I'm not buy
  2. Messing around with the XBOX Kinect During my recent trip to Scotland, I teamed up with my friend, Rob, to integrate Kinect with my game, Aliens Invade. We worked with OpenNI and NITE for person tracking and pose detection after the initial hurdles with raw depth data. The game now requires the play

2010 19

  1. Sudoku Grab Removed From Sale in Japan Just got an email from Apple, claiming that my app 'Sudoku Grab' infringes on intellectual property rights of Nikoli.Co.Ltd. So, as a precaution, I've taken Sudoku Grab off the shelves in Japan. 07 December 2010
  2. iAds Report In this post, I'm sharing performance stats from a free Heart Rate app which has been live for just over two weeks, and has been downloaded around 40k-50k times worldwide. It was categorized under Entertainment instead of Health and Fitness which may have affected downloads and advertisi
  3. Heart Rate Free - How it works I have received several inquiries about my heart rate app and decided to share details about it. The app uses your phone's camera to perceive the faint changes in the light coming off the flash as blood flows in and out of your finger. I have also provided the demo cod
  4. Heart Rate Free - just released on the iPhone Just found an iPhone app that creatively measures your heart rate simply using the flash on your phone. Thought I'd try the neat little tool and was fascinated with it. Can't wait to share more on how it works in an upcoming post. 19 November 2010
  5. Augmented Reality on the iPhone - how to Hey there tech enthusiasts! So, you used to rely on my old methods for employing augmented reality on an iPhone? Well, those days are past. With the release of iOS4, accessing the camera has become a breeze. Check out my latest blog post where I share the spe
  6. Augmented reality on the iPhone with iOS4.0 Hey guys! Just updated my earlier blog post on creating Augmented Reality (AR) on iPhones using the new iOS4.0 features. I’ve also moved away from the 'UIGetScreenImage' function as it’s no longer supported. Now, we access the camera using the AV Foundatio
  7. NeHe OpenGL tutorial 2, 3 and 4 ported to ES 2.0 As I strove to learn OpenGLES 2.0 for new gaming projects on iPhone and Palm Pre, I faced certain challenges due to the introduction of a programmable graphics pipeline in OpenGLES 2.0. With this mechanism, we are responsible for writing the code to g
  8. Tanks! Mayhem - available for the iPhone/iPad We are excited to announce that our newly developed game, Tanks! Mayhem, is now available for download on iPhone, iPod touch, and iPad platforms. This action-packed game offers an exciting outlet for you to enjoy at a minimal cost of $0.99. Don't miss ou
  9. NeHe OpenGL tutorial 6 ported to ES2.0 This tutorial guides you through applying textures to a rotating 3D cube using OpenGL. We will be utilizing the esUtils code, specifically its function esGenCube, and modify our shaders to accommodate our texture coordinates. After setting up our new mvp matrix
  10. Tanks! Mayhem - available for the iPhone/iPad Exciting news gamers! Our new app, 'Tanks! Mayhem', has finally hit the app store. We can't wait for you to dive into the tank-battle action and enjoy all the mayhem it has to offer! For a sneak peek, take a look at some of our epic game screenshots incl
  11. Creating an OpenGL game for both the Palm and iOS I've made a triumphant return to the blogosphere with the release of my new game, 'Tanks!' developed for Palm Pre/Pixie and soon for iPhone devices. The game, an experiment to learn OpenGLES 2.0, is a testament to the feasibility of porting C++ or C
  12. NeHe OpenGL tutorial 5 ported to ES2.0 In this blog post, I delve into the specifics of porting code for drawing 3D shapes in ES2.0. I detail how to overcome the lack of depth buffer in the default OpenGL template and describe how to add rotation to objects by saving the model view matrix. This post
  13. Shoot3D for the iPad/iPhone I'm thrilled to have introduced my first 3D game on the app store. The entire process served as a real learning curve, with some elements still appearing obscure, yet adding to the intrigue. The games section of the app store is known for its fierce competition, but chall
  14. iPad UK launch Had a laugh this morning at the Apple store on Regent Street with an iPad owner who doesn't know what to do with his shiny new toy, and a confused cyclist who was convinced only a celebrity could draw such a crowd! Certainly a morning for the books. 28 May 2010
  15. BBC iPlayer - updated sample code Hey there, just a quick update to let you know I've whipped up a new demo using the RSS feeds from the iPlayer site. It locates URLs and takes advantage of the webview to play the movies out, pretty neat huh? Just a reminder, you'll need the iPhone SDK and tool chai
  16. Getting BBC iPlayer working on the iPad Just got an iPad from the US, thinking it'd be perfect for BBC iPlayer. To my dismay, the website needed flash to play anything! Weirdly, iPhones can run it, so I'm trying to trick the iPad iPlayer website into thinking my iPad is an iPhone. It involves settin
  17. Getting started with Box2D Just gave a enlightening talk on Box2D at the LiDG and have prepared a step-by-step walkthrough on creating a simple pinball game using the open sourced 2D physics engine! You'll learn the concepts of Body, Shape, Friction, etc. as well as how to build and run the Box2D en
  18. Tablet+iPhones = Console+Controllers Here's the concept: your iPhones turn into wireless controllers and your tablet is now your console, all thanks to gamekit. It's a whole new way of gaming, reminiscent of the Wii, or using your devices for interactive card games. Interesting eh? 28 January 2010
  19. Sudoku Grab Nominated for the Most Creative Use of iPhone Hardware Express your love for our app by casting your vote in this category using the provided link. 03 January 2010

2009 7

  1. How does it all work? In this blog, I explain the process behind my Sudoku Grab app, a solution that uses basic image processing techniques to recognize Sudoku puzzles. This is done by locating the puzzle in an image, turning it back into a square form, segmenting it to find potential numbers, and l
  2. Sales stats update - 5 or 6 months on the app store Apologies for the radio silence on sales stats for our app, but to be fair, there hasn't been much spark! After the US App Store feature, it was a sliding game down the charts, but still, we average about 10-30 copies daily. We excitedly crossed th
  3. 25000 copies downloaded! I'm thrilled to announce that Sudoku Grab has reached 25000 downloads! As a token of gratitude, the app will be available for free until the 25th June. A huge thank you to everyone who has purchased the app and for all the valuable feedback. 15 June 2009
  4. Heading to the Apple WWDC I'm off to San Francisco this Sunday for the Apple's WWDC event. I'm anticipating it will provide a lot of valuable insights for potential future enhancements. 05 June 2009
  5. Sales stats update - Two months on the app store Another month on the App Store, fellas! Even though our little app met some bumps here and there, it still managed to get quite the spotlight in Europe's 'What we're playing' section, grossing up to 200 daily sales in the UK, 300 globally. Took a hit
  6. Busy busy Just landed back home after a couple US trips. It's time to roll up the sleeves and get busy now - have to update instructions for our 1.4 version, which isn't too different from 1.3 but with a few changes. Also, got to start working on 1.5. Let's do this! 16 April 2009
  7. A couple of reviews Our app has finally been reviewed by a couple of sites, namely 148apps and iPhone App Reviews. Unfortunately, our daily downloads in the US are still low, hovering around 10-20, and the app has moved off the front page of the app store in the UK, causing a significant drop in sal