I'm Tom Scott,

I've been a firmware and app developer for over 20 years.

Some of my work

Kestrel K5 Series and SpeedCoach

These two products are for completely different markets (weather and rowing). But they are the same. Why? We'd been working on both and one day, while working on the K5, I glanced over at another developer working on the SpeedCoach and thought, these things:

  1. Take measurements
  2. Display measurements
  3. Save measurements
  4. Transmit measurements to connected apps (through BLE)
So why can't the code structure be identical? This ended up with what I call the Unified Coding Strategy, or Sniffles, for short. Now every product we do looks the same on the inside, so if a developer works on one, they can go and work on another without learning a whole new coding architecture. Cool right? Not just cool, it allows us to have shared modules (git submodules) that let developers build the skeleton of new systems fast. How fast? I did a Pop in 2 days. Production ready code with just the stuff we didn't know how to do yet left over. What's a Pop? We didn't end up making it, so I only wasted 2 days. Cool, right?

Kestrel LiNK

I got into doing a little maintenance on some of our apps which culminated in Yoan and I making Kestrel LiNK. I would say that Yoan knew what he was doing and I knew how to type. But when the app was done, I was barely competent. There were a few things I can take credit for. Realm is one; it’s a cross-platform database that works on Android and iOS and has a cloud sync feature. It works fine; not sure all that extra goodness was worth it, but it wasn’t hard to setup and use, so best decision ever. Speaking of, I really wanted us to use a JSON file to define what models worked with the app, what app features each model supported and what to do when connecting to a particular model. That, I must say; pretty stellar. This app talks to like 25 different products and we don’t need to have model checks sprinkled all over the place. I recently added a new model by updating the JSON and posting it and a product image on our server. Boom. Model added.

CoxBox

Here’s a CoxBox dev board. It’s a major refresh of the in-boat audio system the company was founded on. At this point, I was doing mostly project management, but this thing has a CAN bus in it with aspirations of connecting to a whole boat bus full of peripherals. Super interesting to figure that out, so I dove in and designed the communication architecture. I checked out CANopen, J1939, DeviceNet and probably others in my quest for unoriginality. However, none of those would do! So I ended up using NK protocol (which probably deserves it’s own section, but how do you take a picture of a protocol?) over CAN. Too bad the whole boat bus thing is stalled out and we only made a CAN impeller.

Drop

This is a little data logger that we wanted to call the Egg but Trademark law, so we called it the Drop. So that's why it kind of looks like an Egg, but also, thankfully, a Drop. I coded it up using a shall remain nameless famous BLE module that would not sleep, then had to jump off to the K5, so another very capable developer finished the project with the best BLE module ever, the Bluegiga Module (all hale Jeff Rowberg).

Avionics

Here’s a stock photo of a Boeing 767. I worked on software for a 767 DCU. I contributed to other stock photos, including the Eclipse 500 and even a brief stint with an RAF Tornado. And don’t get me started on the FMS data cruncher. Open Watcom; Geodesy!

Ancient History - My First PCB?

Actually, no. My first PCB was probably these little round sensor boards that are long gone at the bottom of a landfill somewhere. This is my first PCB that I still have a sample of. I mean, just look at it. DIP parts! No micro! This thing ran an alarm panel with buttons, buzzer and flashy light. All with discreet gates and I bet those TO-220s at the top are 555 timers (I already put it back into its “box of honor” and refuse to go look).

Blog

6-13-2025

The Bluetooth_Base_UUID

We recently made a new custom BLE service; some had questions about Bluetooth SIG characteristic UUIDs.

5-24-2025

Write Modular Code in C

Some code should be modular, shareable between projects. Like a shareable BLE host stack that works with different BLE modules and interfaces completely different application code.

3-13-2025

Sniff Packets with nRF Sniffer

I recently had to use Wireshark with the nRF Sniffer plugin and Nordic nRF52840 dongle to spy on some less than working BLE coms between a Nordic nRF52833 and MicroChip RNDB451.

2-17-2025

Use AI to Make Helpful Tools - Function Body Generator

Not ready to embrace the AI but hate writing Doxygen commented function bodies to your company coding standard? Just give the AI a kind of sideways hug and let it generate some Python.

1-11-2025

Neo4j, Export-Import

Well the old PC started acting up and I bought a new laptop anyway, so time to move my Neo4j databases.

12-8-2024

Use Snippets for Boilerplate Code

No one likes writing boilerplate code. VS Code Snippets to the rescue!

10-12-2024

Neo4j, A Cheat Sheet

Got trees on the brain so figured I’d ask if there were graphing databases and so there are. Checking out the OG Neo4j.

8-29-2024

Get Faster with Git Command Shortcuts

Tired of typing git submodule update --init --recursive? Rather just type “gsu”? Git command line shortcuts to the rescue, at least on Windows 10 and 11.

8-13-2024

Nordic Diary - Installing nRF Connect

The new hot thing in Nordic is nRF Connect SDK and VS Code Extension. How do you install it?

7-27-2024 on Medium

Git - My New Favorite Way to Merge

Some people need closure, wanting to see that line go from the feature branch back into dev. But, as mentioned before, I don’t want all my “ok I got this working” commits polluting dev like the effluent from all the car factories dumping into the Hudson in the ’50s. So what to do?

6-13-2024

CSS for the Incompetent: Colors & Root

OK, you’ve decided. Gonna make a website to showoff your skills. Start put’n some skill in there and meander around with content and ideas to differentiate, only to find out months-in that you’re on the 2027 release plan. Time to get your saw and cut that site down; build a tiny home with the lumber.

6-22-2024

CSS for the Incompetent: The Header

Before we start, take an aside to open the Chrome dev tools using the shortcut ctrl + shift + i. Click the icon that looks like a hangman’s gantry with a little phone on the noose, swinging in the breeze.

6-30-2024

CSS for the Incompetent: Layout!

My site uses flexbox and css grid, so if you don’t know those, there’s lots of tutorials; I followed some from Wes Bos. Here, I’ll go over how I used them and other attributes for responsiveness.

7-8-2024

CSS for the Incompetent: Super Layout!

So what’s “Super Layout!”? It goes beyond the normal, humdrum existence of the ordinary layout. This layout climbs Mt. Everest and the other peaks. This layout bought Bitcoin in 2008. This layout now owns a Pilatus PC12 AND a Piper Meridian.

10-22-2023 on Medium

To Infineon, and BSP!

Let’s just say, for the sake of argument, you find yourself using ModusToolbox and need a BSP for your Infineon PSOC. Well, here’s how you do it, guaranteed to work for Modus Toolbox 2.4 and maybe 3.X and only on Windows.

11-14-2023 on Medium

Jack and the Beanstalk in the Modern Connected Era

One day, Jack lay on a hillside overlooking his village, the gentle breeze rustling the meadow grass, the thrum of insects going about their day. Far below, the tiny houses made a charming scene along the banks of a crystal alpine stream.

12-26-2022 on Medium

C Programming — State of the System

State Machines. A giant switch statement with 457 cases, right? How about an infinitely extensible, modular “programming by differency” maintainable tower of State gleaming from atop yonder hill? Caution! Here there be pointers!

10-14-2023 on Medium

ChatGPT and the Binary Tree

Binary trees. Are they useless in an embedded system? Probably. I’ve never used, or seen one used. But I’ve been thumbing through that old Knuth classic and figured why not?

7-21-2022 on Medium

Android Programming: Different Jar Files for Debug and Release Builds

How do you setup Android Studio to use separate jar files for debug and release builds? Also, how do you make a jar file? Here we go!

8-6-2022 on Medium

Android Programming: Obfuscate your Release Build

Boring! I much prefer snowboarding. Obfuscating your release build is like alternating between watching grass grow and filling out your taxes. But we all should do it, so here’s a few pointers.

07-30-2022 on Medium

Git - Setup and Your First Commit

So you’re on the phone one night talking to Marty and your mom picks up and yells at you. Frederick! Get down here and setup your Git. And you’re like “Mom! I’m on the phone!”

09-3-2022 on Medium

Everyday Workaday Git Commands; Branch, Commit, Merge!

Alright, so here’s your next adventure in Git (assuming you just clicked the link at the bottom of the last adventure).

Projects

Emulate Me

Curious how to write a PC emulator for your electronic device? I was too!

Project Cactus

This is a project about a cactus. How long does it take for a tiny Home Depot cactus to grow however big it's gonna grow?

Contact

Connect with me on LinkedIn