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
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.
|