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