Résumé
My career has taken me from being an engineering physicist to a computational mathematician to a software engineer and finally to a DevOps evangelist. During my undergraduate research into magnetically confined high-temperature plasmas, I discovered I was more interested in the numerical methods working behind the scenes, and decided to pursue that in graduate school. In the midst of that, I realized the majority of the problems you run into aren’t so much in the algorithms themselves, but in their implementation in the software, so I made the switch over to software engineering. My experience in that arena showed me it’s less about the implementation details and more about the team culture you have and how that contributes to the overall success of the project, and thus the switch to what I’m calling a “DevOps evangelist” role, where my purpose is to help you do the amazing work you already do, but do it better.
I excel in getting plugged into a team, determining what its various pain points are that prevent it from being as successful as it can be, prioritizing which of those need to be addressed first, and then iterating with the team to make incremental improvements to help them move in the right direction. Though many view DevOps as a collection of tools or tasks that enable the “real work” to get done, it’s actually a paradigm shift in how we view both the work we do and how we go about doing it. Helping teams realize this paradigm shift, and the resulting productivity boost, is one of my passions.
Throughout my career, I’ve enjoyed the opportunities afforded for continual learning and improvement, whether that’s developing my skills as a leader, or honing my competencies with an ever-evolving tech stack. I excel in self-directed study, come up-to-speed with new technologies quickly, and then often find myself the most proficient person around in whatever language, library, or tool is in question. I pride myself in being not just a developer, but a software engineer, who is able to assess a project’s needs, determine the optimal technologies to address them, and then design, build, deliver, and maintain solutions with their long-term sustainability and resiliency to the ever-shifting landscape in mind.
I function best as a generalist, leading or interfacing with a team of specialists. I excel at keeping the high-level and long-term plan in mind, breaking it down into manageable pieces, and finding the right people to work those tasks. When needed, I have the experience and attention to detail to dig down into the weeds with the specialists to ensure the solutions we’re designing and building will meet the overall project needs. I do all this best through asynchronous communication via project management and team collaboration tools, with synchronous meetings scheduled only as needed.
Education
Experience
Sandia National Laboratories, Albuquerque, New Mexico
April, 2023 – Present
Senior Member of the Technical Staff: Radar Intelligence, Surveillance, &
Reconnaissance
Automating adherence to software engineering best practices; assisting teams in
improving their project management practices; streamlining a process for
open-sourcing Python infrastructure.
Sandia National Laboratories, Albuquerque, New Mexico
December, 2022 – April, 2023
Senior Member of the Technical Staff: Systems Engineering & Integrated
Solutions
Driving the adoption of software engineering best practices; establishing
coding/testing standards for Python package development; developing a process
for modularizing and open-sourcing Python infrastructure.
Sandia National Laboratories, Albuquerque, New Mexico
May, 2021 – December, 2022
Member of the Technical Staff: Systems Engineering & Integrated Solutions
Leading an initiative to automate manual integration and release testing;
encouraging fuller adoption of GitLab as an all-in-one DevOps and project
management platform to improve developer productivity and overall team success.
Sandia National Laboratories, Albuquerque, New Mexico
October, 2018 – May, 2021
Member of the Technical Staff: Software Engineering & Research
Developing continuous integration/deployment workflows and infrastructure;
advising teams on achieving a DevOps transformation; leading teams to design
and develop tools to improve sustainability and reproducibility.
Sandia National Laboratories, Albuquerque, New Mexico
September, 2017 – October, 2018
Member of the Technical Staff: Computational Mathematics
Introducing software engineering best practices into team workflows; developing
code integration workflows and infrastructure.
Sandia National Laboratories, Albuquerque, New Mexico
June, 2016 – September, 2017
Limited Term Employee: Computational Mathematics
Software engineering, development, maintenance, testing; version control
instruction.
Northrop Grumman Corporation, Aurora, Colorado
June, 2014 – June, 2016
Engineer Systems II
Extending software capabilities; developing and testing algorithms; addressing
data quality.
Colorado School of Mines, Golden, Colorado
August, 2012 – May, 2014
Graduate Teaching Fellow
Advanced Engineering Mathematics and Calculus 3; “Problem Solving with Matlab”
tutorial series.
Front Range Community College, Westminster, Colorado
May, 2013 – August, 2013
Math Instructor
College Algebra; online education certified.
Sandia National Laboratories, Albuquerque, New Mexico
May, 2012 – July, 2012
SIP Graduate Professional Technical Summer Intern
Code validation via manufactured solutions to partial differential equations.
Colorado School of Mines, Golden, Colorado
August, 2011 – May, 2012
Graduate Teaching Assistant
Recitation sections of Calculus 3.
University of Tulsa, Tulsa, Oklahoma
August, 2009 – May, 2011
Graduate Teaching Assistant
Quiz sections of Calculus 1 & 2.
University of Tulsa, Tulsa, Oklahoma
May, 2007 – May, 2009
Plasma Physics Research Assistant
Computationally solved nonlinear magnetohydrodynamic (MHD) equations.
Skills
Software Engineering:
DevOps: Well-versed in the three ways and five ideals. Extensive experience serving as DevOps lead on computational science teams.
git: Extensive experience developing, using, and teaching simple to sophisticated workflows, along with managing GitLab/GitHub projects. Prefer GitLab for an all-in-one DevOps solution.
GitLab CI/CD: Extensive experience establishing GitLab CI/CD pipelines, along with coupling them to Jenkins for more complex workflows when needed.
GitHub Actions: Significant experience standing up GitHub Actions workflows and interfacing external services with GitHub for additional CI testing.
Jenkins Pipelines: Extensive experience crafting complex pipelines and maintaining hundreds of jobs via Pipeline scripts. Modest experience administering Jenkins instances.
Cloud: Experience with OpenStack (similar to AWS, GCP, Azure), Kubernetes, and Helm managing and deploying applications containerized with Docker to an internal cloud.
Automation: Extensive experience writing custom scripting to ensure all users, developers, and CI services interact with a codebase in the same, replicable way. Basic experience with Ansible and Terraform.
Quality: Experience with SonarQube, Fortify, BlackDuck, etc.
Agile: Extensive experience with Scrum, Kanban, and the Scaled Agile Framework (SAFe). Specialize in tailoring methodologies to the team to get the most out of them.
Project Management: Experience with requirements elicitation, design, execution, monitoring, and stakeholder interaction. Flexible within the plan, but will work hard to protect scope and team from external interference.
Programming:
Python: Extensive experience writing tools to unify build processes. Substantial experience with Sphinx, pytest, and building modular ecosystems of reusable packages. Some experience with Django and the SciPy stack. Referred to as the “Python ninja”. Current language of choice.
Groovy: Extensive experience using advanced features to build complex Jenkins Pipeline suites. A close second in language of choice.
C++: Extensive experience developing and maintaining large object-oriented codes. Experience creating and utilizing templated classes, including template metaprogramming. Proficient with the Standard Template Library and RogueWave containers. Some experience with Boost libraries.
bash/tcsh: Extensive scripting experience.
Fortran 77/95/2003: Experience developing large, parallel, object-oriented codes.
OpenMPI: Experience parallelizing Fortran FEM codes.
Perl: Some experience patching installation scripts.
Julia: Basic experience.
Java: Basic experience
JavaScript/TypeScript: Basic experience.
OpenMP: Some experience parallelizing Fortran FEM codes. Prefer OpenMPI.
Mathematical Tools:
LaTeX: Extensive experience typesetting a variety of works. Prefer to use
tikZ
,pgfplots
, andpgfplotstable
to automate the generation of papers from code-generated data using only LaTeX.Mathematica: Certified by Wolfram Research. Extensive experience with symbolic manipulations, visualizations, creating dynamic user interfaces to codes, etc.
Matlab: Extensive experience implementing numerical methods and visualizing results. Developed “Problem Solving with Matlab” tutorial series. Some experience with computer vision packages.
Trilinos: Panzer, Teuchos, Thyra, Phalanx, E/Tpetra, NOX, LOCA, Piro, Teko.
PETSc/LAPACK: Experience implementing parallel FEM codes.
Other:
German: Once fluent in conversational and some technical.
SketchUp: Extensive experience utilizing for woodworking and carpentry design.
Blackboard/Desire2Learn/MyMathLab: Experience managing courses; online education certified.
Open-Source Work
reverse-argparse
Lead Architect / Lead Developer / User / Maintainer
GitHub
| PyPI
| ReadTheDocs
See Transforming Hacky Scripts into a Modular Infrastructure below.
SetProgramOptions
Requirements Developer / Code Reviewer / User / Maintainer
GitHub
| PyPI
| ReadTheDocs
See Unifying the DevOps Infrastructure Within Trilinos below.
ConfigParserEnhanced
Requirements Developer / Code Reviewer / User / Maintainer
GitHub
| PyPI
| ReadTheDocs
See Unifying the DevOps Infrastructure Within Trilinos below.
SPiFI
Requirements Developer / Code Reviewer / User / Maintainer
GitHub
See Developing the SPiFI Library and Associated Jenkins Pipelines below.
Projects
Bringing Python Best Practices to a Radar Simulation Code
Sandia National Laboratories, Spring, 2023 – Present
Python was used as a wrapper language to tie together a MATLAB radar simulation
suite and a C++ visualization library for the sake of exploring the
possibilities of planning radar collections. I was brought on to the project
to initially help with packaging and distribution, and then to start applying
Python development best practices to the code. In the midst of the latter, I
brought the team up-to-speed with modern software project management practices
using GitLab. This led to an effusively positive review from an internal
software quality audit, and the auditors recommended some of our practices as
worthy of imitation for software projects across the labs.
Code Generation Webapp
Sandia National Laboratories, Spring, 2023 – Summer, 2023
Sandia’s radar software group uses a Django-based webapp to store programmatic
representations of the interface control documents (ICDs) for the radars under
development. The app can translate the ICDs to CSV, HTML, and JSON, and can
automatically generate the C++ or Java code needed to interface with the
devices. I extended the webapp to allow a secondary C++ generator for a
specialized use case, and refactored the code to start bringing it into
alignment with Python best practices.
Open-Sourcing Sandia-Developed Python Packages
Sandia National Laboratories, Fall, 2022 – Present
In order to build Sandia’s reputation in the broader software engineering and
scientific computing communities and increase the likelihood we can attract and
retain top talent, I’m leading a trail-blazing effort to develop a process for
open-sourcing internally-developed Python packages. We hope to encourage the
design and development of general-purpose, reusable components, and establish a
workflow for active co-development of both internal and external repositories
by Sandians.
Transforming Hacky Scripts into a Modular Infrastructure
Sandia National Laboratories, Spring, 2022 – Spring, 2023
Many view scripting as something that just needs to be done to enable the real
work to take place. With such a view, there’s a strong tendency to think
there’s no need to apply software engineering best practices to the development
of your scripts, which, over time, leads to an ever-growing mountain of
technical debt. Over the course of a year, I refactored a collection of
hacked-together Python scripts into a modular infrastructure, the components of
which are focused on doing only one thing and doing it well, and are reusable
in multiple contexts. They are fully documented with Google-style docstrings,
and fully unit tested with pytest
. The project concluded with a series of
tech talks (6+ hours of recorded content) to give the high-level overview of
how the various pieces interact, and the design considerations that went into
building them. The talks highlight that the infrastructure now serves as a
case study for adhering to the SOLID principles of object-oriented design, and
should set the stage for further infrastructure extensions in the future after
their operations and maintenance was handed over to other individuals on the
team.
DevOps Book Club
Sandia National Laboratories, Fall, 2021 – Present
Since building shared understanding is the basis for cultural transformation, I
established a book club to help my team build their understanding of the
fundamental principles that underpin the DevOps paradigm shift. This is
accomplished through reading and discussing books on DevOps proper, on
collaboration and leadership, and on software engineering best practices. This
effort has been called out in multiple retrospectives as having significantly
impacted the competencies of team members and overall effectiveness of the
team.
From Fragility to Flexibility
Sandia National Laboratories, Spring, 2023
Everyone has experience with a piece of code that’s absolutely critical, but
everyone’s afraid to touch. The original developers have moved on, if you
touch it, you might break it, and it’s “working” now. One such example was the
Python script used to orchestrate a series of helm
and kubectl
commands
in the shell to deploy containerized services to internal Kubernetes clusters.
Over time, though, infrastructure feature requests continued to pile up to
which the response was always, “We could do that, but that would require
modifying the code we’re not supposed to touch.” I took the initiative to
completely rewrite the script, breaking it up into a series of modules for
reusability elsewhere. The unit test coverage level was maintained at 94%, and
no existing behavior was broken. We tested the new system alongside the old
one for a number of weeks to prove feature parity before merging. After the
reimplementation was merged, the various feature requests were able to be
addressed with only a few lines each, and the new flexible architecture will
allow the module to continue to grow to meet evolving stakeholder needs in the
future.
Automated Testing Improvement Initiative
Sandia National Laboratories, Summer, 2021 – Fall, 2022
The Geophysical Monitoring System
is a Kubernetes-based application suite developed in Java and TypeScript that
historically has a substantial set of manual acceptance tests that take days to
complete for each quarterly release. I led an initiative to establish the
infrastructure and associated team policies and best practices to automate
component-, integration-, and system-level tests in the GitLab CI pipelines.
After the initial phase was completed, the prototype infrastructure was matured
to production-ready, the pipelines were optimized, and the robustness of the
applications was improved. Work to automate existing manual tests continues as
we slowly but surely move toward continuous delivery. It’s worth noting that I
had no prior experience with GitLab CI pipelines, but learned the new
technology in a matter of weeks and quickly earned the nickname of “pipeline
guru”.
Unifying the DevOps Infrastructure Within Trilinos
Sandia National Laboratories, Summer, 2020 – Spring, 2021
Over the past few years, two distinct DevOps infrastructures have grown up
within the Trilinos project. Understanding
that both solutions had their pros and cons, both were less flexible than
desirable, and ultimately the prospect of maintaining two separate solutions
long term would be fraught with error, it was determined a year-long effort
would be made to replace them with a single solution incorporating the lessons
learned from the past. I conducted an initial investigation of the existing
solutions over a two-month period, and then followed that with a time of
gathering stakeholder requirements. I then drafted a plan to cover two
general-purpose components for consistently loading environments across
machines, and consistently configuring a CMake-based
code, and then led the all-remote team, spread across four states in two time
zones, in the design and execution. Modularity, flexibility, unit testing,
code coverage, and documentation were all hallmarks of the way we tackled the
problem. The intent was to not only provide Trilinos with what it needed, but
to provide those in the greater scientific software community with general
tools they can use to improve the sustainability and replicability of the codes
they develop.
DevOps Infrastructure Consultant
Sandia National Laboratories, Summer, 2020
The Dakota project provides a software suite
for optimization and uncertainty quantification. Their build and test
infrastructure had grown organically over more than two decades to the point of
being both fragile and brittle. They sought my services to determine what they
would need to do to get from where there were to where they wanted to be. I
conducted a number of interviews with team members, and interfaced closely with
their newly hired DevOps engineer, to determine both their needs and what they
could realistically accomplish. I then developed a 15-month plan to rebuild
their infrastructure from the ground up such that it would be easy to maintain
and extend for years into the future. I presented the plan to a wide audience
largely via an extended metaphor, so the various pieces would be easy to grasp
by non-experts, and a secretary’s reaction was, “I hardly ever know what you
all are talking about, but this presentation I understood!”
Developing JOG-CI: Connecting Jenkins, OpenStack, and GitLab CI/CD
Sandia National Laboratories, Spring, 2020 – Summer, 2020
OpenStack is a collection of components that
allows you to maintain your own private cloud infrastructure. The ability to
rapidly stand up cloud tenants, running on corporate hardware behind the
scenes, was desirable for lowering the barrier to entry for teams to get up and
running with continuous integration. A lightweight tool for standing up such
tenants and connecting them to either Jenkins or GitLab (or both) was developed
under my direction by our department’s year-round intern, and that tool has
been used by a handful of teams to stand up and tear down instances as needed,
depending on changing testing needs. We both came up to speed with OpenStack
and the ins and outs of private cloud administration in a matter of weeks.
Faster Turnaround Improves Developer Productivity
Sandia National Laboratories, Winter, 2019 – Summer, 2020
A complete run of EMPIRE’s pipelines used to take about 20 hours. Running only
once per day, it was hard to determine where new bugs were introduced in a
codebase that would see dozens of requests merged daily. As such, a merge from
develop to master would happen every few weeks, if we were lucky. I led a
major refactor of our pipelines, restructuring them with modularity in mind,
such that they could fail and get actionable feedback to the team as soon as
possible. We additionally achieved parallelizing the testing across a
collection of machines, again decreasing our time to notification of success or
failure. The dozens of Jenkins jobs used by each top-level pipeline are
governed by a single Groovy Pipeline script, making maintainability and
extensibility a breeze. The end result was a reduction down to about five
hours, such that the pipeline suite now runs multiple times a day. With more
frequent feedback, we’re kept clean more often, and developers spend less time
debugging and more time doing science.
One Script to Rule Them All: Unifying Build Processes Across Platforms
Sandia National Laboratories, Summer, 2019 – Spring, 2020
The BuildScripts repository for the EMPIRE codebase had grown organically over
time, with bash scripts for running on different platforms, with different
configurations, etc. Developers also had their own scripts for setting up
their environment and configuring the code. I led an effort to unify our build
process across platforms and create a “one build script to rule them all,” so
to speak, to be used by users, developers, and automation services. Python was
used for the sake of documentation (Sphinx), testing (pytest), and unified style guides.
Replicability was enhanced by building in both a comprehensive logging utility
and the ability to replay prior runs of the script. The tool was designed with
modularity and flexibility in mind, such that it’s easy extend existing pieces
or plug in new ones when future needs arise. Investing the time, money, and
energy in developing such an infrastructure paid dividends in productivity,
both for the scientific developers and the DevOps engineers.
Developing the SPiFI Library and Associated Jenkins Pipelines
Sandia National Laboratories, Spring, 2018 – Spring, 2019
In order to adequately test the git workflow mentioned directly below, a
flexible pipeline was needed, and the Jenkins pipeline plugin suite with the Apache Groovy language under the hood provided the power
necessary. The plugin suite has a high barrier to entry, so a colleague and I
worked closely together to develop the SEMS Pipeline Framework Infrastructure
(SPiFI) library, I developing the
pipeline itself and driving the requirements for the library, and he developing
the library to ease and automate routine pipeline tasks. The library has since
been rolled out to half a dozen teams or so, and is used to drive hundreds of
jobs on a daily basis.
Stability with Respect to the Tip of Develop
Sandia National Laboratories, Fall, 2017 – Fall, 2018
Trilinos is a collection of math libraries for
large-scale, complex multi-physics problems on next generation high-performance
computing architectures. Its development is largely driven by a handful of
physics application codes that are tightly coupled with it. Because the
applications drive the algorithm development, they would like to be able to use
the latest commit on the develop branch, but at the same time they would like
to make sure commits to Trilinos never break them and stall application
development. I developed a git workflow involving a fork of Trilinos and a
secondary approved version of the develop branch, which is updated
automatically via nightly testing. In the event testing fails, the branch
isn’t updated, and the application team can continue development unhindered.
They can file an issue against Trilinos that will be resolved through Trilinos’
usual process. Flexibility is also afforded for the rare instances where
simultaneous changes must be made to both the application and Trilinos
codebases. This approach has been used successfully by two separate
application teams for the last few years.
Defining Policies to Turn a Team and Project Around
Sandia National Laboratories, Summer, 2017 – Fall, 2018
EMPIRE is a collection of next generation electromagnetic/electrostatic/fluid
dynamic codes. Prior to the summer of 2017, there was confusion as to who was
on the team, what people were working on, what needed to be done, how one could
get started, etc. Pushes happened directly to the master branch, and there was
minimal testing, code review, documentation, etc. I played a large part in
driving the adoption of the following: GitLab issues, description templates,
and Kanban boards were used to track work and capture design discussions.
GitLab merge requests, complete with code review and approval, were required
to get changes into the develop branch. Style guides for both the code and
documentation were developed to move toward a common look and feel. A git
workflow was developed to ensure no direct pushes to master or develop, and
master would be updated via nightly testing. Automated testing was
established to test multiple machines and nfigurations to improve stability. A
monthly retrospective was established to regularly check in on how well our
policies were working for us and allow us to tweak them as needed.
Git Instruction
Sandia National Laboratories, Spring, 2017 – Fall, 2019
I led the Center for Computing Research University (CCR-U) group in teaching
courses introducing participants to version control via git, utilizing the
Software Carpentry instruction style. We
developed both introductory and intermediate courses, which were very popular
and received excellent feedback, and helped hundreds of Sandians to level up
their software engineering competency over the course of a few short years.
It’s worth noting that I went from having never used git to teaching courses in
it in under a year, quickly earning the tongue-in-cheek moniker of “git fu
master”.
Panzer Memory Usage Refactor
Sandia National Laboratories, September, 2016 – July, 2017
Local to global communication in parallel finite element simulations occurs
through the use of owned vectors, containing all the information owned by a
given process, and ghosted vectors, containing the information from
neighboring processes. The original implementation duplicated all the data in
the owned vector in the midst of the ghosting process, meaning more data was
being stored in memory than was necessary. I refactored classes such that
ghosted vectors contain only the ghosted information, and any time a user wants
to grab an element of a vector given a local ID, the logic of whether it lives
in the owned or ghosted vector is hidden from the user. Avoiding the data
duplication significantly reduces the run-time memory usage.
Generalized Current Constraint Boundary Conditions in Charon
Sandia National Laboratories, October, 2016 – June, 2017
The Charon semiconductor device physics simulation code previously had the
ability to attach a constant current constraint to a terminal of a device
(diode, transistor, etc.). I generalized this capability such that any number
of constraints can be added to a device (at most one per terminal). A resistor
contact constraint type was added, corresponding to hooking up a resistor with
a voltage source on its far side. A block LDU preconditioner was generalized
to work for any of these constraint scenarios. This capability helps users
more readily simulate real-world configurations.
LOCA and Charon Integration
Sandia National Laboratories, July – September, 2017
Previously if a Charon user wanted to sweep a voltage contact boundary
condition on a device, they would use a rather brute-force Python script to get
the job done. I integrated the Library of Continuation Algorithms (LOCA) with
Charon to provide this capability natively, and with more flexibility. LOCA is
able to intelligently ramp up the parameter step size, and, in the case of a
solver failure, backtrack, cut the step size, and proceed with the continuation
run. This also provides the capability to track bifurcations in the future,
should we need to.
Algorithm Development
Northrop Grumman Corporation, September, 2014 – June, 2016
Given real-time input data from multiple sources, how do we clean and
manipulate the data to yield the answer we seek? Details of the algorithm and
its application are classified. A colleague and I reviewed relevant
literature, determined most information was no longer applicable to our new
geometric configuration, and developed an elegant iterative algorithm to walk
its way intelligently through the solution space to the correct answer. I also
developed a Matlab tool to read in pieces of data from in the midst of the
algorithm to generate a multi-page PDF detailing just how the algorithm is
working its way to the solution, which aids tremendously in discovering
scenarios for which the algorithm needs improvement.
Automating Large-Scale Distributed Software Installation
Northrop Grumman Corporation, Summer, 2014
An installation and configuration of HP’s Network Node Manager software suite
across multiple virtual machines (VMs) took an operator four days using a
series of manuals to guide them through the process. Having no experience with
VMs or Linux sysadmin activities, I came up to speed in weeks. I then
developed a series of scripts to be deployed and run on the VMs to update
various packages in Red Hat Enterprise Linux (RHEL) to the appropriate
versions, patch some of HP’s Perl scripts used in the installation, and install
and configure the software suite. Automating the process reduced the time
needed to about two hours with minimal human interaction.
Adaptive Local-Global Multiscale Finite Element Methods
Colorado School of Mines, August, 2012 – May, 2014
When solving the classical uniformly elliptic boundary value problem in a
medium that is either highly oscillatory or has high contrast the standard
Galerkin finite element method (FEM) is insufficient and \(h\)-,
\(p\)-, and \(r\)-refinement become prohibitively expensive for large
problems. Multiscale FEMs consist of solving local homogeneous problems on the
course mesh elements to create multiscale basis functions that already have
some knowledge of the medium. Determining the appropriate boundary conditions
for these local solves is an area of active research. The adaptive
local-global multiscale FEM projects an initial global solve onto extended
course mesh elements, makes that projection nodal on the coarse mesh elements,
and then averages across the edges of the course mesh. The resulting local
solves yield nodal basis functions with expanded support that satisfy the
partition of unity. In theory there exist ideal basis functions that can
reconstruct the exact solution exactly—iterating this method allows us to
work toward those ideal basis functions. This computational effort can be done
ahead of time such that the near-ideal basis functions can be used for any
source terms and time-evolution scenarios. Effective parallelism was achieved
through the use of OpenMPI and PETSc.
Automated Generation of Homework Assignments and Solution Procedures
Colorado School of Mines, August, 2013 – May, 2014
Problems in Advanced Engineering Mathematics are highly formulaic—given a
problem of a certain type, there are certain steps to follow to the solution.
As such the generation of such problems, and their full solution procedures,
is simply a matter of programming. Mathematica was utilized to randomly
generate problem sets and solutions for the class.
Manufacturing Solutions to Fluid Flow Problems
Sandia National Laboratories, Summer, 2012
Assuming solutions of a certain form and working them through systems of
nonlinear coupled partial differential equations (PDEs) allows one to determine
the source terms necessary for the equations to be satisfied. I developed a
Mathematica suite for manufacturing such solutions to incompressible Navier
Stokes, some of its turbulent extensions, and to MHD. Solutions and source
terms were exportable to C for interfacing with a code being validated, and all
details were exportable to LaTeX for paper generation.
Boundary Integral Equation Methods for Solutions to Laplace’s Equation
University of Tulsa, Fall, 2010
This general solution method consists of transferring all the computation from
the domain to its boundary. Both inner and outer Dirichlet, Neumann, and Robin
problems were considered. Solvability was proven, and uniqueness was shown for
all but the inner Neumann problem, whose solutions differ only by a constant.
Solutions were determined in terms of harmonic potentials from Green’s
representation formulas.
Boundary Element Method and Visualization Tool
University of Tulsa, Fall, 2010
The numerical equivalent to the project above, when attempting to solve a PDE
on a given domain, one can instead subdivide the boundary into a number of
boundary elements and do all the necessary integration there. Determining the
solution somewhere in the domain is then just a matter of evaluating a function
at that point. I developed an interactive Mathematica suite for solving
various PDEs. Users have the ability to specify the boundary, various PDE and
boundary condition terms, where to evaluate the solution, etc.
Nonlinear Evolution of Unstable MHD Equilibria
University of Tulsa, May, 2007 – May, 2009
I created a user interface between an eigenvalue code, an equilibrium code
(SCOTS), and a nonlinear MHD evolution code (NIMROD) allowing for an
exploration of parameter space to determine where modes were stable or
resistive- or ideal-unstable. We then ran nonlinearly from a starting point
near the stability boundary and observed how the plasma evolved.
Clearance
DOE Q: July, 2018 – Present
Certifications
CompTIA Security+ (June 2014 – May 2017)
Mathematica—Advanced Foundations
Continuing Education
Kubernetes:
Certified Kubernetes Administrator (CKA) with Practice Tests
Istio Hands-On for Kubernetes (in progress)
Python:
Project Management:
Leadership:
The Art of Being an Effective Mentor (internal)
Preparing for Management (internal)
Five Conflict Styles and How to Use Them (internal)
Miscellaneous:
Basic Instructor Training (internal)
System Administrator Policies (internal)
Presentations
Jason M. Gates. “The Complexities of Replicability.” Presentation. The Department of Applied Mathematics @ CU Boulder. April 2023.
Jason M. Gates, David Collins, and Josh Braun. “ShellLogger: Keeping Track of Python’s Interactions with the Shell.” Presentation. Tri-lab Advanced Simulation & Computing Sustainable Scientific Software Conference. May 2022.
Jason M. Gates and William McLendon. “Enhancing Python’s ConfigParser.” Lightning talk. US Research Software Engineering Association Community Call. April 2022.
David Collins, Josh Braun, and Jason M. Gates. “Logger: A Tool for Keeping Track of Python’s Interactions with the Shell.” Presentation. US Research Software Engineering Conference. May 2021.
Jason M. Gates, William Mclendon, Josh Braun, and Evan Harvey. “LoadEnv: Consistently Loading Supported Environments Across Machines.” Presentation. US Research Software Engineering Conference. May 2021.
Jason M. Gates, David Collins, and Josh Braun. “CI Tools as Lego Blocks: Build Your Ideal Custom Solution.” Presentation. Society of Industrial & Applied Mathematics Computational Science & Engineering Conference. March 2021.
Vivek Sarkar, Jason Gates, Charles Ferenbaugh, Vadim Dyadechko, Anshu Dubey, Hartwig Anzt, and Pat Quillen. “Technical Approaches to Improve Developer Productivity for Scientific Software.” Panel discussion. Collegeville Workshop on Scientific Software. July 2020.
Jim Willenbring, Ross Bartlett, and Jason Gates. “Git Solutions.” Interview. Collegeville Workshop on Scientific Software. July 2020.
Jason M. Gates. “Training Best Practices.” Tea time discussion. Collegeville Workshop on Scientific Software. July 2020.
Jason M. Gates. “Introduction to GitDist.” Presentation. Trilinos User-Developer Group Meeting. October 2019.
Jason M. Gates. “Intro to SPiFI.” Presentation. Trilinos User-Developer Group Meeting. October 2019.
Jason M. Gates. “Stability w.r.t. the Tip of develop: An Experience Report from Two Years In.” Presentation. Trilinos User-Developer Group Meeting. October 2019.
Jason M. Gates. “Training in Version Control and Project Management.” Lightning talk. Collaborations Workshop. March 2019.
Jason M. Gates. “Stability w.r.t. the Tip of Develop.” Presentation. Trilinos User-Developer Group Meeting. October 2017.
Jason Matthew Gates, Roger P. Pawlowski, and Eric Christopher Cyr. “Panzer: A Finite Element Assembly Engine within the Trilinos Framework.” Presentation. Society of Industrial & Applied Mathematics Computational Science & Engineering Conference. March 2017.
Publications
Miranda Mundt, Jon Bisila, Reed Milewicz, Joshua Teves, Michael Buche, Jonathan Compton, Jason Gates, Kirk Landin, and Jay Lofstead. “Challenges and Strategies for Testing Automation Practices at Sandia National Laboratories.” Paper. US Research Software Engineering Conference. October 2023.
Jason M. Gates. “Using GitLab Issues for Iterative, Asynchronous Software Design.” Whitepaper. Collegeville Workshop on Scientific Software. July 2023.
Reed Milewicz, Jonathan Bisila, Miranda Mundt, Sylvain Bernard, Michael Buche, Jason M. Gates, Samuel Andrew Grayson, Evan Harvey, Alexander Jaeger, Kirk Timothy Landin, Mitchell Negus, and Bethany L. Nicholson. “DevOps Pragmatic Practices and Potential Pitfalls in Scientific Software Development.” Paper. International Congress on Information and Communication Technology. February 2023.
Jason M. Gates, Josh Braun, and David Collins. “One Script to Rule Them All: Unifying Build Processes Across Platforms.” Whitepaper. Collegeville Workshop on Scientific Software. July 2020.
Jason M. Gates, Joe Frye, Brent Perschbacher, and Dena Vigil. “Git Productive!” Whitepaper. Collegeville Workshop on Scientific Software. July 2020.
Jason M. Gates. “Faster Turnaround Improves Developer Productivity.” Poster. Collegeville Workshop on Scientific Software. July 2020.
Patrick McCann, Rachael Ainsworth, Jason M. Gates, Jakob S. Jørgensen, Diego Alonso-Álvarez, and Cerys Lewis. “How do you motivate researchers to adopt better software practices?” Speed blog. Collaborations Workshop. July 2019.
Jason M. Gates. “Defining Policies to Turn a Team and Project Around.” Poster. Third Conference of Research Software Engineers. September 2018.
D P Brennan, P K Browning, J Gates, and R A M Van der Linden. “Helicity-injected current drive and open flux instabilities in spherical tokamaks.” Plasma Physics and Controlled Fusion 51.4 (2009):045004.
Honors & Awards
Team Employee Recognition Award for EMPIRE
Team Employee Recognition Award Nomination for Advanced Simulation and Computing DevOps Visionaries
Spot Award for Git Training
Department of Applied Mathematics and Statistics Graduate Student Teaching Award
Graduate Teaching Fellowship & Assistantships
Outstanding Senior in German
Academic Excellence Award
Member of ΦΒΚ, ΦΣΙ, ΤΒΠ, ΣΠΣ
University of Tulsa Presidential Scholarship
Byrd Scholarship
Oklahoma Academic All-State Scholarship
ACT Perfect Score