Curriculum Vitae

2024-07-11 22:14 by Ian

J. Ian Lindsay

ian@joshianlindsay.com
Github Profile
Hack-a-day Profile


Areas of Expertise


Recent job titles

  • Senior Software Scientist
  • Principle Firmware Engineer
  • Lead Firmware Engineer

Personal traits

  • Autodidactic polymath
  • High attention to detail
  • Tenacious problem solver
  • Fluent communicator
  • Patient teacher
  • Self-directed
  • Principle driven
  • Night owl

Objective

I don’t overmuch care what the particular problem is. I only care if it is difficult. Give me the hard problems.
My preference is to write test-driven, reusable, modular software.

Education

Arizona State University (Computer systems engineering)2002-2006
Scottsdale Community College (Natural Sciences)2007-2010
Undergraduate biological research2008-2009

Citations

Languages

Mastery C/C++ (preferred language) Java
Various assembly languages
Proficient VHDL Typescript JavaScript
Go PHP HTML/CSS
Competent C# Python Shell-scripting
SQL, MySQL, SQLlite (TSQL)
Acquainted Ruby Rust Haskell

Platforms I've written for:

The task typically dictates the platform, and over the years I've had problems that needed to be solved under strict constraints on resources (embedded and mobile), timing (time-of-flight, cryptography), and/or parallelism (scaled and distributed systems, both ad-hoc and federated). At some point, I've had deep contact with these platforms.

CUDA / OpenCL Quartus / WebISE Arduino / ChipKIT OpenCV
Asterisk GNU radio Node.js Android

I have experience bare-metal programming for many silicon vendors (including some ASICs), but only listed those from which I've used at least three separate families. In some cases, I have built my own reference hardware in KiCAD when none was available.

NXP / Freescale Microchip / Atmel Samsung Alterra
ST Microelectronics Espressif / Xtensa LX6 Broadcom Intel

Protocols:

Most of my work has had to touch protocol at one point or another. Occasionally protocol was the work, and in extreme cases, I have written FPGA images to facilitate hardware offload of protocol duties to provide better performance and/or assurances than would not be possible from software alone.

IP, TCP, UDP, MIDI (and its offspring), I2C, and SCSI were all formative before college. I don't care to guess at the number of protocols I've learned and forgotten about, but here is a partial list to give some idea of the strange places I've visited. Modulation schemes (QAM, PSK, FSK, etc) have been intentionally omitted on the grounds that they are not protocols. But suffice it to say that I understand modulation as a largely independent concern.

LoRA GSM CDMA APRS
Bluetooth (Classic and BLE) 802.11x ATA/SCSI
PCIe DBUS USB NEMA 0183
MIDI / DMX512 I2C / SPI HTTP/CoAP JOSE/COSE
TLS/DTLS SIP / XMPP IAX2 RTP/RTCP
Bitcoin BitTorrent Telehash OpenFlow
IPv4/6 TCP / UDP WebRTC
NTP NFS / CIFS DNS SMTP/POP3/IMAP
SLIP/PPP OBD-II DOCSIS Apache Avro
ProtoBuffers Cap'nProto Various IPC/RPC arrangements
ASN.1 PKCS family KMIP and other HSM-adjacents

Linux chops

  • My first Linux distribution was Slackware 3.6, right before the turn of the millennium. Mostly because the C/C++ environment was far saner than anything I'd ever seen on Windows. I set up my own IP masquerading server (what you kids today would call a "router") before I could legally drive, and my formative years in C were under GCC v2.95.
  • Prior to college, I was compiling custom uCLinux kernel modules for my hand-built ATA interface. I've been doing embedded Linux design since 2001.
  • I am comfortable with all sorts of Linux distributions. I've been a stalwart Gentoo user since 2013 on my primary machine, but I've used almost everything I've heard about at some point or another. I've built products for companies on RHEL/CentOS, Debian, Slackware, DietPi, Yocto, AOSP, and probably a few others I've forgotten about.
  • I almost always hand-specify kernel configs for machines. For reasons pertaining to efficiency, security, and capability.
  • I can setup device trees and can use them to integrate custom hardware.
  • I understand kernel and system-level security concerns and best-practices. This includes roots-of-trust, FIPS compliance, user/group divisions, and containerization (Docker, as well as execution within TPMs).
  • I was deep into the android ROM-hacking scene while I was at CellTrust. This post I made on AOSP OpenVPN integration was my most-hit page on this domain for several years.

Noteworthy things I've built

This listing is inverse-chronological from the project's inception date. I can't publish anything I was paid to keep proprietary, so these are mostly the things I've done for my own reasons.

Miscellaneous facts that might be interesting

  • I did volunteer AI work for Ben Gortzel (Novamente) in 2006, implementing his paper for “Lojban++” in Java. I was also playing with back-propagating neural networks via JOONE during this period.
  • I have enough accounting education to understand double-entry bookkeeping, P&L statements, balance sheets, and so-forth. Not that I enjoy working with those things, but I appreciate the larger business context of my position and actions within a company, and can communicate fluidly with others that operate on those terms.
  • I was pre-med for 2 years just for fun. I devoured molecular biology and o-chem as if it weighed nothing, scoring 95th percentile on the ACS Organic Chemistry exam. Just because I wanted to know.
  • I taught myself to read MRIs (and other medical imaging) to further my curiosity about the correlations of neurological function vis-a-vis consciousness.
  • I was mining bitcoin in 2010, and it is entirely possible that I introduced it to Singapore.
  • I ran a mercury distillery out of my garage for six months as a tinker-toy business with a few friends.
  • I started learning particle physics in 2017 because my child asked “why are things heavy?”. I’m presently seven years deep into that rabbit-hole.
  • I have excellent (not perfect) pitch, and a good understanding of music and its psycho-physical mechanisms, but I cannot play an instrument proficiently. But at one point, I tried.
  • My first language was LOGO at age 8, first microcontroller was the Motorola 68HC11E2 at age 16, and I am a ham radio operator.

Previous:
Next: