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 products:

  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? Now every product we do looks the same on the inside, so if a developer works on one, they can work on another without learning a whole new coding architecture. It allowed me to use shared modules (git submodules) to build production-quality foundations for new products in as little as two days.

Kestrel LiNK

I got into doing a little maintenance on some of our apps which culminated in co-writing Kestrel LiNK while managing the project with an outside contracting firm. I designed the app to work with over 30 different product models, using a web-hosted JSON file to define the product image, supported features and custom connection sequencing. This file allows me to add support for new products simply by posting a new version of the JSON along with the product image.

CoxBox

Here’s a CoxBox dev board. It’s a major refresh of the in-boat audio system the company was founded on. This new version includes a CAN bus 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 researched CANopen, J1939 and DeviceNet, but none met the requirements for hot plugging, bi-directional communication, individual addressing and broadcast messaging. I ended up designing a custom addressing format and using our in-house protocol. So far we only made a CAN impeller, but the infrastructure is in place for a pretty cool system.

Drop

This is a little data logger. I coded it up using a BLE module the company really wanted to use, but being the early days of BLE, that module could never obtain the 'LE' part. Unfortunately, I had to jump to the K5 at that point. Fortunately, the Bluegiga module existed which allowed for a successful product release.

Avionics

At Innovative Solutions (now Innovative Aerosystems) I worked on level A software for 767 DCUs, adding features including cross-linking compressed FMS datum information over a low speed ARINC bus. I wrote hardware tests, ethernet/GPS drivers and communication features for the Eclipse 500. I even got into a little Geodesy with an FMS data cruncher.

Ancient History

Yes, I've even designed PCBs, this being one of my first and only surviving examples.

Blog

2-16-2026

Interview with a Coder

If you are reading this and about to interview with me, bravo! Yes I will ask you some of these, and I've been asked others.

12-9-2025

Putting FreeRTOS to Sleep

What? Why? Because batteries. Batteries go dead, and we don't want that. But we also might need an RTOS like FreeRTOS to do complicated preemptive multitasking.

11-4-2025

BLE Stack in C++

I wrote a blog on writing modular code in C and now, for no reason at all, decided to see about sit'n a spell and do'n 'er up in C++.

9-17-2025

Local AI in VS Code

Run your AI model locally at no cost and create monster apps to change the world for free! Just follow these easy steps!

8-10-2025

Digital Ocean Apps and Drops

Had the need for a server to test APIs and went with Digital Ocean.

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 on Medium

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

Project Cactus

This is a project delving into the OpenCV Computer Vision library for Python.

Contact

Connect with me on LinkedIn