1 | | = Resume = |
2 | | Software Engineer and Entrepreneur with 17+ years of experience spanning tools development, Linux kernel and distribution development, security design, automation, virtualization, source control, and open source contributions. |
| 1 | Software Engineer and Entrepreneur with 23+ years of experience spanning tools development, Linux kernel and distribution development, security design, automation, virtualization, containerization, source control, and open source contributions |
| 2 | |
| 3 | |
| 4 | |
| 5 | == Skills: == |
| 6 | |
| 7 | |
| 8 | Python, sh/bash, C/C++, ARM/Xscale assembly, Java |
| 9 | |
| 10 | Django, Satchmo |
| 11 | |
| 12 | Git, Mercurial, Subversion, CVS, patchutils |
| 13 | |
| 14 | Source control conversions, svndumptool |
| 15 | |
| 16 | !DevOps, Jenkins, !BuildBot, Trac, !MergeBot, iTest, Ansible, Atlassian suite (Bitbucket, Jira, Confluence, Bamboo) |
| 17 | |
| 18 | virtualization, VMware ESXi, vCenter, vCloud, ovftool, qemu/kvm, !VirtualBox, linode |
| 19 | |
| 20 | Docker, minikube, Rancher Desktop, Kubernetes, Helm, Hashicorp Vault |
| 21 | |
| 22 | Linux Kernel development; file-systems, network, block, and character device drivers; x86/ARM/Xscale |
| 23 | |
| 24 | Linux distribution development and RPM packaging |
| 25 | |
| 26 | Software security analysis and design |
| 27 | |
| 28 | Reverse-engineering Java bytecode to source code |
| 29 | |
| 30 | Dot Hill RAID array storage management |
| 31 | |
| 32 | Columnar database (!InfoBright) |
| 33 | |
| 34 | data recovery, forensics |
| 35 | |
| 36 | Contributor to open source projects |
| 37 | |
| 38 | Mentoring and training coworkers |
| 39 | |
| 40 | Code generation |
| 41 | |
| 42 | Fedora, CentOS, Debian, Solaris |
| 43 | |
| 44 | Javascript, CSS, html |
| 45 | |
| 46 | NXT robotics, CNC, 3D printing |
| 47 | |
| 48 | JTAG, embedded systems, Android |
| 49 | |
| 50 | System administration, NFS, NTP, Apache |
| 51 | |
| 52 | Make, Ant, Maven, Gradle |
| 53 | |
| 54 | *NIX utilities |
| 55 | |
| 56 | |
| 57 | |
| 58 | |
| 59 | |
| 60 | == Philosophy (Or "How I Work"): == |
| 61 | |
| 62 | |
| 63 | * Write code that is concise and clear. |
| 64 | |
| 65 | * Select a minimal set of modular tools and languages with maximum combined scope; learn them extensively; apply them appropriately; and continually reevaluate the possibilities. |
| 66 | |
| 67 | * Automate and augment as much as possible to reduce errors and speed up development. |
| 68 | |
| 69 | * Use source control to its fullest to capture forward progress, improve confidence in changes, improve teamwork, and increase manageability of development. |
| 70 | |
| 71 | * Watch the world around you; discern what is worth knowing; learn from others' successes and failures. |
| 72 | |
| 73 | * Use Free and Open Source Software everywhere you can; know "why" when you can't, and work to change that. |
| 74 | |
| 75 | * The path to performance is: fastest to implement first, then algorithmic improvements, then profiling guided improvements, then progressively lower languages with greater optimization. Tread no further down this path than you must. |
| 76 | |
| 77 | * Push inherent complexity into data structures to simplify the code. |
| 78 | |
| 79 | |
| 80 | |
| 81 | == Technical Experience: == |
| 82 | |
| 83 | |
| 84 | Automated development processes; implemented installation process around Helm to reduce manual steps and human error. |
| 85 | |
| 86 | Implemented Helm chart for identity provider solution; created reproducible local Kubernetes development environment based on minikube and later migrated to Rancher Desktop; designed configuration and secret management scheme; implemented migration to Hashicorp Vault. |
| 87 | |
| 88 | Helped maintain internal Keycloak fork, including version upgrades. |
| 89 | |
| 90 | Created tools around Jira, Bamboo, Confluence, Fortify, and NexusIQ to streamline the team's work, improve consistency, and automate repetitive tasks. |
| 91 | |
| 92 | Handled release processes, automated tasks done between human decision points (Jira issue creation, builds, test deployments, MOP generation, security scans). |
| 93 | |
| 94 | |
| 95 | |
| 96 | Replaced a data transformation C++ program that was the system throughput bottleneck, with a data-driven Python implementation which improved throughput by 10x, eliminating that stage as the system bottleneck. |
| 97 | |
| 98 | |
| 99 | |
| 100 | Developed and deployed a virtualized (VMware ESXi and vCenter) continuous integration (Jenkins) and testing (iTest) system, applying !DevOps principles to a complex environment while source control transitioned from Subversion to Git. |
| 101 | |
| 102 | Developed Mercurial-based promotion engine for software development; providing pull requests and automated merges. |
| 103 | |
| 104 | Added configurable workflow capabilities to Trac, and gained trunk commit privileges in 2007 (over 700 commits). |
| 105 | |
| 106 | Created “Advanced !TicketWorkflow Plugin” to further enhance Trac's configurable workflow. |
| 107 | |
| 108 | Brought source control (Subversion), bug tracking (Trac), continuous integration (!BuildBot), and pull requests (!MergeBot) to a chaotic development environment. |
| 109 | |
| 110 | Scripted conversion of a CVS repository to Subversion with nightly updates; those scripts were the basis for the organization's later transition to Git. |
| 111 | |
| 112 | Converted Subversion, CVS, and VSS repositories with full, interleaved history into a multi-project Subversion repository. |
| 113 | |
| 114 | Recovered lost source code from Subversion metadata directories, recovered lost bugzilla bug tracking data from Outlook mailbox files and imported into Trac. |
| 115 | |
| 116 | Contributed new source control history transformations to svndumptool. |
| 117 | |
| 118 | Contributed bugfixes to Mercurial related to large files. |
| 119 | |
| 120 | |
| 121 | |
| 122 | Linux kernel experience includes rewriting a vendor network driver for a 6x performance gain, implementing file-systems, flash block device driver, numerous character device drivers; and modifying existing drivers. |
| 123 | |
| 124 | Ported the iop321 XScale sub-architecture support from Linux 2.4 to Linux 2.5, and got it merged into Russell King's tree (2.5.65-rmk1, 2.5.70-rmk1), and from there into Linus's tree (2.5.62, 2.5.64, 2.5.68, 2.5.69). |
| 125 | |
| 126 | Worked on four x86-based boards and seven ARM/XScale-based boards, from initial bring-up on Linux through deployment, including an upgrade to a new generation platform. |
| 127 | |
| 128 | Designed and implemented the build and packaging system for the RPM-based Linux distribution running on those boards, an ARM/XScale cross-compile of !RedHat 6.x; documented build and release procedures for the SCM group. |
| 129 | |
| 130 | Automated the product installation process to create reproducible installs in 1/5th the time, and in the process, identified undocumented bugfixes missing from source control (CVS). |
| 131 | |
| 132 | |
| 133 | |
| 134 | Implemented tools and libraries for managing storage arrays. |
| 135 | |
| 136 | Provided platform-level support for development team. |
| 137 | |
| 138 | Implemented a virtualized (!VirtualBox) environment for storage development. |
| 139 | |
| 140 | Created a data-structure based cable auditing tool for complex hardware deployments, providing specific, plain English explanations of the cabling errors. |
| 141 | |
| 142 | Scripted IOzone benchmarks and identified parameter-induced file-system performance problems on (up to) 32-way striped SCSI disks on a supercomputer. |
| 143 | |
| 144 | |
| 145 | |
| 146 | Identified catastrophic security flaw in the company's flagship security product, created a new security design that passed third-party review, and evolved the implementation toward that design. |
| 147 | |
| 148 | From ad hoc backups, reverse-engineered legacy security binaries (Java bytecode) to recreate lost source code. |
| 149 | |
| 150 | Created tools for creating and analyzing attack trees and implemented code generation to enforce security properties. |
| 151 | |
| 152 | Mentored coworkers on security principles. |
| 153 | |
| 154 | |
| 155 | |
| 156 | Mentored others through design and architectural discussions and voluntarily requested design and code reviews across team boundaries. |
| 157 | |
| 158 | Won first place in company programming competition. |
| 159 | |
| 160 | Contributed to or supported open source projects including: Trac, Linux, Vim, svndumptool, and Mercurial |
| 161 | |
| 162 | Launched a business using Django and Python as a solo founder. |
| 163 | |
| 164 | Maintained “breakindent” patches for Vim until Bram accepted a variant into upstream. |
| 165 | |
| 166 | Built and programmed a robotic floppy disk conversion system, including photographing disk labels via Android, data recovery in the presence of bad sectors and forensic analysis for deleted files. |
| 167 | |
| 168 | Wrote decoder for a digital multimeter's serial output. |
| 169 | |
| 170 | |
| 171 | |
| 172 | == Links: == |
| 173 | |
| 174 | |
| 175 | https://retracile.net |
| 176 | |
| 177 | https://brickbuiltnameplates.com |
| 178 | |
| 179 | |
| 180 | |
| 181 | https://trac.edgewall.org/search?q=ecarter |
| 182 | |
| 183 | https://trac-hacks.org/wiki/AdvancedTicketWorkflowPlugin |
| 184 | |
| 185 | https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/log/?qt=grep&q=eli+carter |
| 186 | |
| 187 | https://www.mercurial-scm.org/repo/hg/log?rev=carter |
| 188 | |
| 189 | https://repos.borg.ch/svn/svndumptool/tags/svndumptool-0.6.1/CONTRIBUTORS.txt |
| 190 | |
| 191 | |
| 192 | |
| 193 | == Employment History: == |
| 194 | |
| 195 | || Synchronoss Technologies || Sr Deployment Architect (!DevOps) || 2017 - Current || |
| 196 | || Entrepreneur (brickbuiltnameplates.com, software) || Solo Founder || 2009 - Current || |
| 197 | || Viavi Solutions || Software Engineer || 2015 - 2017 || |
| 198 | || Independent Contractor || Software Engineer || 2014 - 2015 || |
| 199 | || Tektronix Communications (via contracting firms) || Software Engineer || 2011 - 2014 || |
| 200 | || HEB Technologies, LLC. || Software Security Engineer || 2008 - 2011 || |
| 201 | || !CommProve Inc. || Software Tools Engineer || 2006 - 2007 || |
| 202 | || Tektronix Texas / Inet Technologies || Software Engineer (Platforms) || 1999 – 2006 || |
| 203 | |
| 204 | |
| 205 | |
| 206 | == Education: == |
| 207 | |
6 | | == Preferred Languages == |
7 | | Python, sh/bash, C/C++, and ARM/XScale assembly |
8 | | |
9 | | == Skills == |
10 | | Python, sh/bash, C/C++, ARM/Xscale assembly, Java |
11 | | |
12 | | Django, Satchmo |
13 | | |
14 | | Git, Mercurial, Subversion, CVS, patchutils |
15 | | |
16 | | Source control conversions, svndumptool |
17 | | |
18 | | !DevOps, Jenkins, !BuildBot, Trac, !MergeBot, iTest, Ansible |
19 | | |
20 | | virtualization, VMware ESXi, vCenter, ovftool, qemu/kvm, !VirtualBox, linode |
21 | | |
22 | | Linux Kernel development; file-systems, network, block, and character device drivers; x86/ARM/Xscale |
23 | | |
24 | | Linux distribution development and RPM packaging, autoconf tools |
25 | | |
26 | | Software security analysis and design |
27 | | |
28 | | Reverse-engineering Java bytecode to source code |
29 | | |
30 | | Dot Hill RAID array storage management |
31 | | |
32 | | data recovery, forensics |
33 | | |
34 | | Contributor to open source projects |
35 | | |
36 | | Mentoring coworkers |
37 | | |
38 | | Code generation |
39 | | |
40 | | Fedora, CentOS, Debian, !MontaVista, Solaris |
41 | | |
42 | | Javascript, CSS, html |
43 | | |
44 | | NXT robotics |
45 | | |
46 | | JTAG, embedded systems, Android |
47 | | |
48 | | System administration, NFS, NIS, NTP, Apache |
49 | | |
50 | | Make, Ant, Maven |
51 | | |
52 | | *NIX utilities |
53 | | |
54 | | Columnar database (!InfoBright) |
55 | | |
56 | | == Philosophy (Or "How I Work") == |
57 | | * Write code that is concise and clear. |
58 | | * Select a minimal set of modular tools and languages with maximum combined scope; learn them extensively; apply them appropriately; and continually reevaluate the possibilities. |
59 | | * Automate and augment as much as possible to reduce errors and speed up development. |
60 | | * Use source control to its fullest to capture forward progress, improve confidence in changes, improve teamwork, and increase manageability of development. |
61 | | * Watch the world around you; discern what is worth knowing; learn from other's successes and failures. |
62 | | * Use Free and Open Source Software everywhere you can; know "why" when you can't, and work to change that. |
63 | | * The path to performance is: fastest to implement first, then algorithmic improvements, then profiling guided improvements, then progressively lower languages with greater optimization. Tread no further down this path than you must. |
64 | | |
65 | | == Technical Experience == |
66 | | |
67 | | Developed and deployed a virtualized (VMware ESXi and vCenter) continuous integration (Jenkins) and testing (iTest) system, applying !DevOps principles to a complex environment while source control transitioned from Subversion to Git. |
68 | | |
69 | | Developed Mercurial-based promotion engine for software development; providing pull requests and automated merges. |
70 | | |
71 | | Added configurable workflow capabilities to Trac, and gained trunk commit privileges in 2007 (over 700 commits to date). |
72 | | |
73 | | Created “Advanced !TicketWorkflow Plugin” to further enhance Trac's configurable workflow. |
74 | | |
75 | | Brought source control (Subversion), bug tracking (Trac), continuous integration (!BuildBot), and pull requests (!MergeBot) to a chaotic development environment. |
76 | | |
77 | | Scripted conversion of a CVS repository to Subversion with nightly updates; those scripts were the basis for the organization's later transition to Git. |
78 | | |
79 | | Converted Subversion, CVS, and VSS repositories with full, interleaved history into a multi-project Subversion repository. |
80 | | |
81 | | Recovered lost source code from Subversion metadata directories, recovered lost bugzilla bug tracking data from Outlook mailbox files and imported into Trac. |
82 | | |
83 | | Contributed new source control history transformations to svndumptool. |
84 | | |
85 | | Contributed bugfixes to Mercurial related to large files. |
86 | | |
87 | | |
88 | | Linux kernel experience includes rewriting a vendor network driver for a 6x performance gain, implementing file-systems, flash block device driver, numerous character device drivers; and modifying existing drivers. |
89 | | |
90 | | Ported the iop321 XScale sub-architecture support from Linux 2.4 to Linux 2.5, and got it merged into Russell King's tree (2.5.65-rmk1, 2.5.70-rmk1), and from there into Linus's tree (2.5.62, 2.5.64, 2.5.68, 2.5.69). |
91 | | |
92 | | Worked on four x86-based boards and seven ARM/XScale-based boards, from initial bring-up on Linux through deployment, including an upgrade to a new generation platform. |
93 | | |
94 | | Designed and implemented the build and packaging system for the RPM-based Linux distribution running on those boards, an ARM/XScale cross-compile of !RedHat 6.X; documented build and release procedures for the SCM group. |
95 | | |
96 | | Automated the product installation process to create reproducible installs in 1/5th the time, and in the process, identified undocumented bugfixes missing from source control (CVS). |
97 | | |
98 | | |
99 | | Implemented tools and libraries for managing storage arrays. |
100 | | |
101 | | Provided platform-level support for development team. |
102 | | |
103 | | Implemented a virtualized (!VirtualBox) environment for storage development. |
104 | | |
105 | | Created a data-structure based cable auditing tool for complex hardware deployments, providing specific, plain English explanations of the cabling errors. |
106 | | |
107 | | Scripted IOzone benchmarks and identified parameter-induced file-system performance problems on (up to) 32-way striped SCSI disks on a supercomputer. |
108 | | |
109 | | |
110 | | Identified catastrophic security flaw in the company's flagship security product, created a new security design that passed third-party review, and evolved the implementation toward that design. |
111 | | |
112 | | From ad hoc backups, reverse-engineered legacy security binaries (Java bytecode) to recreate lost source code. |
113 | | |
114 | | Created tools for creating and analyzing attack trees and implemented code generation to enforce security properties. |
115 | | |
116 | | Mentored coworkers on security principles. |
117 | | |
118 | | |
119 | | Mentored others through design and architectural discussions and voluntarily requested design and code reviews across team boundaries. |
120 | | |
121 | | Won first place in company programming competition. |
122 | | |
123 | | Contributed to or supported open source projects including: Trac, Linux, Vim, svndumptool, and Mercurial |
124 | | |
125 | | Launched a business using Django and Python as a solo founder. |
126 | | |
127 | | Maintained “breakindent” patches for Vim until Bram accepted a variant into upstream. |
128 | | |
129 | | Built and programmed a robotic floppy disk conversion system, including photographing disk labels via Android, data recovery in the presence of bad sectors and forensic analysis for deleted files. |
130 | | |
131 | | Wrote decoder for a digital multimeter's serial output. |
132 | | |
133 | | == Employment History == |
134 | | Software Engineer at Viavi Solutions (2015-current)[[BR]] |
135 | | Software development in Python and C++, columnar database expertise |
136 | | |
137 | | Entrepreneur at brickbuiltnameplates.com (2009-current)[[BR]] |
138 | | Created everything from conception through launch |
139 | | |
140 | | Independent Contractor Software Engineer (2014-2015)[[BR]] |
141 | | Continuous integration tools development and deployment |
142 | | |
143 | | Software Engineer at Tektronix Communications (via contracting firms) (2011 - 2014)[[BR]] |
144 | | Source control automation development, storage product backend development |
145 | | |
146 | | Software Engineer at HEB Technologies (2008 - 2011)[[BR]] |
147 | | Created security design for secure collaboration tool and evolve legacy system towards it. |
148 | | |
149 | | Software Tools Engineer at !CommProve Inc. (2006 - 2007)[[BR]] |
150 | | Trac, Subversion, !BuildBot and integration thereof to improve reproducibility and automation. |
151 | | |
152 | | Software Engineer (Platforms) at Tektronix Texas / Inet Technologies (1999 - 2006)[[BR]] |
153 | | Linux kernel and distribution work. |
154 | | Software development process improvements, primarily improving the reproducibility of the product. |
155 | | |
156 | | "Ancient History" (pre-1999)[[BR]] |
157 | | Freelance computer consulting since high school, and a couple other computer related jobs. |