I am an embedded C++ software engineer living in Santa Cruz. I'm working at Apple, and I've worked at Google as an SRE (which was almost, but not entirely, unlike embedded software) and at Qualcomm writing wireless communication software in mobile phones.
I got started programming in grade school in the eighties, when my father brought home an original Compaq Portable -- with a tiny CRT embedded in the chassis next to two 5-1/4" floppy drives and a keyboard that folded into the front. It ran some early version of DOS from floppies and included BASIC. I typed the programs from the "Basic Training" column at the back of 321 Contact magazine and started writing my own. By middle school we'd upgraded to a 386 with an actual hard drive and I kept on tinkering. In high school I wrote a terminate-and-stay resident in DOS assembly that hooked into the timer interrupt to sample the state of a joystick and inject keyboard events into the input queue -- all so I could use the extra buttons on my joystick on a game that didn't support them.
In college I took computer engineering, which gave me the fundamentals of engineering and a strong understanding of computer science. I got bored learning x86 assembly and convinced my professor to let me implement Tetris in lieu of the normal final project. I learned to appreciate that there are other people willing to devote their lives to heat transfer and semiconductor physics so that I don't have to. For my final project I wrote a complete TCP/IP stack in C on an embedded 386 board, including an Ethernet driver, and built a simple embedded webserver on it.
Since then I've spent more than a decade writing and supporting code for a variety of companies, large and small. I thrive in complicated environments where I need to understand complex interconnections between different pieces of hardware and software, to become the expert and identify the source of the problem and fix it. I like to learn all I can about the systems I work on and synthesize and share that information with anyone who asks.
Working as an embedded software engineer, and then as a site reliability engineer, gives me a unique perspective: the very big (Google's global production network) and the very little (billions of devices using Qualcomm Snapdragon chips shipped worldwide). My aspiration is to join these worlds: apply SRE practices to embedded Internet-connected Devices.
I felt compelled to respond, in blog format, to an article in The Wall Street Journal discussing whether programming is a trade and whether it can be taught in more ways that in a four-year college.
When my wife migrated her blog to Wordpress, I invoked the power of Apache's mod_rewrite to redirect all traffic following old links to the new location.
I showed up at a Boulder Linux User's Group meeting and discovered that there was no speaker, so I gave a lightning talk on my project at the time, UART as an interprocessor communication mechanism on smartphones and other devices.
Because I'm married to a librarian, I'm compelled to try to organize our books using labels printed on the spine. I found the best way to do this was to write a PostScript document to get the formatting just right. Read more about my Fun with PostScript.
In June 2010, I spoke at the Boulder Linux User's Group about GPS, titled How to get lost while knowing where you are.
I spend much of my day working on other people's code. People who have uncivilized ideas about how to indent their code. Read more about the secrets of tabs in vim.
Last week, I was debugging some code and came across a troubling situation: A variable that I set in one function was suddenly and quickly being mutilated before I managed to read it in another function. After hours at the debugger, I discovered the culprit was struct packing.
Not long ago Visual Studio reported memory leaks in my code that weren't really leaks; the memory in question just hadn't been freed yet. Read more: Spurious memory leak messages in Visual Studio.
Copyright 2006-2021 Ted Logan / email@example.com