Sam Roberts
vieuxtech@gmail.com • (+1) 236-330-4820 • @sam-github • Vancouver, BC, Canada
Software developer with 20+ years of experience in distributed micro-services, network protocols, and cryptographic formats, with multiple languages and operating systems.
Multi-language: C; C++; Node.js; Lua; Python; Ruby; Go.
Open source: Node.js TSC member; conference speaker; author or contributor to many open-source projects.
Unix & network programming: event-driven I/O; sockets, IPC, and packet injection; Linux system APIs
Network protocols and formats: TCP/UDP, Mail protocols (POP3/MIME), HTTP/1.1, ASN.1/BER/DER, vCard, iCalendar, BEEP.
Cryptographic protocols and formats: CMS, S/MIME, SSL/TLS/WTLS, X.509/PKIX, PKCS #8/11/12, smart cards, crypto APIs, RSA, Diffie-Hellman, and Elliptic Curve crypto-systems.
Experience
2018/10-now: Senior Software Developer, IBM Canada (Runtimes) (remote)
Contribute to Node.js project, primarily to crypto, security, LTS, and IBM platform support. Contribute to IBM and open source projects for production Node.js deployment to Docker, Kubernetes, and IBM cloud. JavaScript, C++, occasional Go.
- Contributor to Node.js since 2013.
- Member of Node.js Technical Steering Committee (TSC).
- Add TLS1.3 support to Node.js’ OpenSSL bindings (nodejs/node#26209 and previous).
- Coordinate Node.js security releases (nodejs.org/en/blog/vulnerability/).
- Develop IBM reference architecture for Node.js development: recommend best practice for Node.js containerization, Prometheus, Kabanero and Appsody stacks. POC of using Kubernetes operator for Node.js specific functions.
2016/10-2017/09: Senior Software Developer, IBM Canada (Runtimes) (remote)
Contribute to Node.js project and IBM’s Node.js APM (appmetrics). JavaScript, C++, C.
2015/11-2016/09: Senior Software Developer, IBM Canada (APIConnect) (remote)
Lead team of 3 IBM developers to integrate Strongloop runtime technology into IBM APIConnect’s service orchestration layers using strong-supervisor. JavaScript.
2013/04-2015/10: StrongOps Team Lead, Strongloop (remote)
Lead team of 4 responsible for deployment, management, and monitoring for Node.js services (strong-pm.io) until Strongloop acquisition by IBM. Micro-services in JavaScript, APM in JavaScript and C++.
- Participate developing the strong-agent APM and metrics collector.
- Develop process and cluster management for single machines (strong-pm.io), and distributed service orchestration (unreleased after acquisition).
- Contribute to Node.js core, primarily to Unix process handling.
2007/05-2013/03: Senior Architect and Development Lead, Wurldtech (Vancouver, BC)
Lead a team of 8 developers developing a network protocol exploit generation Linux appliance. Python/Twisted, Lua, and C.
- Implement Scrum, and ship product within first year of development.
- Rewrite the network protocol and penetration framework from Java to Lua.
- Implement many network and industrial protocols in C and Lua (modbus, ZibBee, etc.)
- Write a protocol interceptor in C, along with a Lua rule engine for a Linux/VxWorks intrusion prevention system (IPS).
2005/11-2007/06: Senior Software Architect, Bycast (Vancouver, BC)
Implement microservice components of StorageGrid, a large image distributed data store. C++, some Ruby, and Lua.
- Implement an XML RPC API for the Grid in C++, and rewrite its HTTP/1.1 server for standards conformance and security.
- Implement grid communication protocols in Ruby, for QA team to automate tests.
- Write Lua bindings in C for Grid APIs and implement tape archive components in Lua.
2000/10-2005/10: Senior Software Developer, Certicom (Mississauga, ON)
Develop C language cryptographic toolkits. C, some Ruby and Perl.
- Extend WTLS protocol toolkit, troubleshoot vendor interoperability problems.
- Propose and implement Crypto-C API extensions to support 3rd party and hardware-based crypto.
- Design PKI-C toolkit, and implement BER/DER, key formats, X.509 certificate encode/decode/validation, CMS, and PFX. Multiple legacy products were able to replace bespoke PKI implementations with one common library.
- Implement cryptographic key store architecture and plugins using LDAP, file-based PKCS#12, CAC smartcards, Cryptoki (PKCS#11) smartcards, and WinCE servers. Integrate key stores into PKI-C.
- Implement test automation to expose protocol and memory usage errors in existing C toolkits, and fix them.
- Wrote a Ruby documentation generator for PKI-C (adopted by other toolkits).
1998/10-2000/10: Software Developer, Cogent Real-Time Systems (Mississauga, ON)
Develop industrial distributed systems in C and Cogent’s LISP-dialect, using a microservice architecture (service discovery, hierarchical key-value store, message queueing, time-series data, etc.). C, some Gamma (a LISP variant).
- Port microservice SDK product to Linux, after writing Linux kernel emulation of QNX4 messaging.
1995-1998/10: Development Lead, International Submarine Engineering (Port Coquitlam, BC)
Responsible for ACE, an event-based kernel and configuration language for robotics. Port to QNX4 on my own initiative, which became the RTOS of choice for subsequent projects. Implement sensor device serial protocols. C++.
Education
B.A.Sc., Engineering-Physics, Computer Science Option; University of British Columbia (1996)
Open source
- Node.js
- • commits to Node.js core • authored or maintained many Strongloop packages, such as modern-syslog (~9K downloads/week), strong-supervisor (~1.7K downloads/week),
- C+Lua
- • luasocket, forked, integrated multiple CVS and Mercurial forks into github, brought collaborators together, and passed project back to original author • C/Lua bindings: pcap-lua, netfilter-lua, termios-lua, bcrc-lua
- C
- • libnet, adopted a widely used packet crafting and injection library • GNU mailutils, commits to email address decoding, file locking, SMTP
- Ruby
- • vCard and iCalendar support (vpim), > 1million downloads • ZeroConf DNS service discovery (net-mdns)
- Go
- • git-walk, recursive, parallel command execution in Ruby, Node.js, and Go • operator-nodejs, operator that triggers Node.js diagnostic reports • wtfutil secret store, use docker-credential-helpers to store API keys and other secrets • whereami, example app to explore Go programming and channels