Last active
March 24, 2025 22:55
-
-
Save mikeschinkel/c29232be5c4726be9043736bc975fb88 to your computer and use it in GitHub Desktop.
Mike Schinkel's resume — Last updated 2025-03-24 — Also see github.com/mikeschinkel/resume for more recent updates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"meta": { | |
"theme": "kendall" | |
}, | |
"basics": { | |
"name": "Mike Schinkel", | |
"label": "Senior Engineer specializing in Go, OpenAPI, Kubernetes, AWS, and CI/CD", | |
"photo": "https://www.gravatar.com/avatar/c988a2da603a19e827a39ab4d9186909?s=200&r=pg&d=mm", | |
"summary": "I am looking a long-term contract role working to enhance software products where my unique set of Go development, OpenAPI, Kubernetes AWS, and CI/CD skills and experience can have a big impact. And I will be really excited if the project I get to work on is open source.", | |
"location": { | |
"postalCode": "GA 30308", | |
"city": "Atlanta", | |
"countryCode": "US", | |
"region": "Georgia" | |
}, | |
"email": "[email protected]", | |
"phone": "678-772-8446", | |
"website": "https://hire.mikeschinkel.com/", | |
"profiles": [ | |
{ | |
"network": "GitHub", | |
"username": "mikeschinkel", | |
"url": "https://github.com/mikeschinkel" | |
}, | |
{ | |
"network": "LinkedIn", | |
"username": "mikeschinkel", | |
"url": "https://linkedin.com/in/mikeschinkel" | |
}, | |
{ | |
"network": "Twitter", | |
"username": "mikeschinkel", | |
"url": "https://twitter.com/mikeschinkel" | |
} | |
] | |
}, | |
"skills": [ | |
{ | |
"name": "Go", | |
"level": "8 of 10", | |
"keywords": [ | |
"Kubernetes development", | |
"Goroutines & Channels", | |
"Microservices", | |
"CLI tools", | |
"Testing", | |
"aws-sdk-go", | |
"docker", | |
"oapi-codegen", | |
"kin-openapi", | |
"nethttp-middleware", | |
"sqlc", | |
"cobra", | |
"yaml.v3" | |
] | |
}, | |
{ | |
"name": "OpenAPI", | |
"level": "7 of 10", | |
"keywords": [ | |
"OpenAPI", | |
"Arazzo", | |
"Overlay", | |
"REST APIs", | |
"Swagger", | |
"YAML", | |
"JSON Pointer", | |
"Webhooks", | |
"HTTP(S)" | |
] | |
}, | |
{ | |
"name": "SQL", | |
"level": "9 of 10", | |
"keywords": [ | |
"DB development", | |
"3rd-normal form", | |
"Query parsing (in Go)", | |
"sqlc for Go", | |
"MySQL", | |
"Sqlite" | |
] | |
}, | |
{ | |
"name": "Kubernetes", | |
"level": "7 of 10", | |
"keywords": [ | |
"Extension development (Go)", | |
"Debugging", | |
"External DNS", | |
"kubectl", | |
"K3s", | |
"K3d" | |
] | |
}, | |
{ | |
"name": "Virtual Machines", | |
"level": "9 of 10", | |
"keywords": [ | |
"VMware", | |
"VirtualBox", | |
"Tart VM", | |
"Parallels" | |
] | |
}, | |
{ | |
"name": "VMware", | |
"level": "7 of 10", | |
"keywords": [ | |
"ESXi", | |
"esxcli", | |
"Fusion", | |
"Admin", | |
"vSphere API", | |
"Govc CLI", | |
"PowerCLI", | |
"Govmomi", | |
"ovftool" | |
] | |
}, | |
{ | |
"name": "Docker", | |
"level": "8 of 10", | |
"keywords": [ | |
"Docker Compose", | |
"Alpine Linux", | |
"Portainer", | |
"FROM..AS", | |
"WORKDIR", | |
"COPY", | |
"ARG", | |
"ENTRYPOINT" | |
] | |
}, | |
{ | |
"name": "CI/CD", | |
"level": "8 of 10", | |
"keywords": [ | |
"Infrastructure as Code (IaC)", | |
"Github Actions", | |
"Custom Runners", | |
"CircleCI", | |
"Gitlab Pipelines", | |
"Jenkins" | |
] | |
}, | |
{ | |
"name": "Packer", | |
"level": "8 of 10", | |
"keywords": [ | |
"Image building", | |
"Writing Plugins (in Go)", | |
"HashiCorp HCL", | |
"ISO", | |
"OVA/OVF", | |
"VMware", | |
"vSphere", | |
"VirtualBox", | |
"Linux", | |
"Windows" | |
] | |
}, | |
{ | |
"name": "Github Actions", | |
"level": "7 of 10", | |
"keywords": [ | |
".github/workflow", | |
"Custom Runners", | |
"Matrix builds", | |
"Artifacts", | |
"Secrets", | |
"github.workflow", | |
"github.ref", | |
"push:", | |
"pull_request:", | |
"workflow_dispatch:", | |
"concurrency:", | |
"jobs:", | |
"steps:", | |
"uses:", | |
"on:" | |
] | |
}, | |
{ | |
"name": "Git", | |
"level": "9 of 10", | |
"keywords": [ | |
"Github", | |
"GitLab", | |
"GitOps", | |
"GitHub API" | |
] | |
}, | |
{ | |
"name": "Linux", | |
"level": "7 of 10", | |
"keywords": [ | |
"Server-related", | |
"Bash scripting", | |
"Debian", | |
"Ubuntu", | |
"Cent/OS", | |
"Alpine", | |
"visudo", | |
"nmcli", | |
"systemctl", | |
"journalctl", | |
"avahi", | |
"suduers.d", | |
"sshd_config.d" | |
] | |
}, | |
{ | |
"name": "Shell Scripting", | |
"level": "8 of 10", | |
"keywords": [ | |
"Bash", | |
"Linux", | |
"macOS" | |
] | |
}, | |
{ | |
"name": "Amazon Web Services", | |
"level": "6 of 10", | |
"keywords": [ | |
"IAM", | |
"S3", | |
"Route 53" | |
] | |
}, | |
{ | |
"name": "Make", | |
"level": "7 of 10", | |
"keywords": [ | |
"Makefile", | |
"Build processes", | |
"Task automation", | |
".PHONY" | |
] | |
}, | |
{ | |
"name": "jFrog Artifactory CLI", | |
"level": "6 of 10", | |
"keywords": [ | |
"jf rt" | |
] | |
}, | |
{ | |
"name": "Browser Extensions", | |
"level": "7 of 10", | |
"keywords": [ | |
"Chrome", | |
"Microsoft Edge", | |
"Safari", | |
"manifest.json", | |
"Manifest v3" | |
] | |
}, | |
{ | |
"name": "JavaScript", | |
"level": "6 of 10", | |
"keywords": [ | |
"Alpine JS", | |
"jQuery", | |
"macOS JAX" | |
] | |
}, | |
{ | |
"name": "macOS", | |
"qualifier": "script developer", | |
"level": "9 of 10", | |
"keywords": [ | |
"terminal", | |
"ITerm2", | |
"Bash", | |
"defaults", | |
"Javascript for Automation (JAX)" | |
] | |
}, | |
{ | |
"name": "JetBrains IDEs", | |
"level": "8 of 10", | |
"keywords": [ | |
"GoLand", | |
"PHPStorm", | |
"IntelliJ", | |
"DataGrip" | |
] | |
}, | |
{ | |
"name": "Windows", | |
"level": "6 of 10", | |
"keywords": [ | |
"Powershell scripting", | |
"ISO creation w/Packer", | |
"Virtual machines", | |
"Windows System Image Manager", | |
"autounattend" | |
] | |
}, | |
{ | |
"name": "Powershell", | |
"level": "6 of 10", | |
"keywords": [ | |
"Pester testing", | |
"Invoke-WebRequest", | |
"Invoke-RestMethod", | |
"Get-Content", | |
"ConvertFrom-Json", | |
"Set-Service", | |
"Install-WindowsFeature", | |
"New-LocalUser", | |
"Add-LocalGroupMember", | |
"$PSVersionTable", | |
"$Password", | |
"$Env" | |
] | |
} | |
], | |
"work": [ | |
{ | |
"name": "NewClarity Consulting, LLC", | |
"position": "Owner", | |
"startDate": "2007-01", | |
"highlights": [ | |
"Specializing in Go development with Kubernetes and automating CI/CD build systems", | |
"10+ clients over almost two decades", | |
"Developed and released numerous open-source software projects", | |
"Currently working on PrefsCTL for managing Apple user preferences" | |
], | |
"keywords": [ | |
"Golang Software Engineering", | |
"Kubernetes Extension Development", | |
"Developer workflow automation", | |
"CI/CD" | |
] | |
}, | |
{ | |
"name": "OpenAPI Initiative", | |
"position": "Participant", | |
"startDate": "2025-01", | |
"highlights": [ | |
"Participated on various committees to help improve OpenAPI specs.", | |
"Collaborated on providing benefits to members and to further OpenAPI awareness and adoption.", | |
"Committees include Outreach, Overlays, Arazzo (workflow), Moonwalk (OpenAPI next), and TDC", | |
"Accomplishments from my particiation are soon to be listed..." | |
], | |
"keywords": [ | |
"OpenAPI", | |
"Arazzo", | |
"Overlay", | |
"Marketing/Outreach" | |
] | |
}, | |
{ | |
"name": "Five9", | |
"position": "Contract Go Software Engineer", | |
"startDate": "2024-08", | |
"endDate": "2024-10", | |
"highlights": [ | |
"Developed External DNS Provider in Go for Five9's internal proprietary DNS", | |
"Developed CLI for interacting with Five9's internal proprietary DNS", | |
"Developed tests for CLI and External DNS Provider" | |
], | |
"keywords": [ | |
"External DNS", | |
"Kubernetes", | |
"Golang", | |
"DNS" | |
] | |
}, | |
{ | |
"name": "Technology Association of Georgia — Data Science SIG", | |
"position": "Database Engineer (Pro Bono)", | |
"startDate": "2023-11", | |
"endDate": "2024-03", | |
"highlights": [ | |
"Prepared TAG client's data to be analyzed by Data Science competition participants", | |
"Worked with TAG's client to understand their business and desired outcomes", | |
"Exported SaaS data from QuickBooks, Salesforce, event management solutions", | |
"Wrote Go program to convert QuickBooks reports to CSV formats", | |
"Imported and consolidated data into a single Sqlite database file", | |
"Cleansed and related data to allow for accurate analysis", | |
"Anonymized data, removing personally identifiable information (PII)", | |
"Coordinated with contestants to understand to DB to allow them to compete" | |
], | |
"keywords": [ | |
"Data Science", | |
"Sqlite", | |
"ProBono", | |
"Salesforce", | |
"QuickBooks" | |
] | |
}, | |
{ | |
"name": "SingleStore", | |
"position": "Contract Go Software Engineer", | |
"startDate": "2022-08", | |
"endDate": "2023-04", | |
"highlights": [ | |
"Implemented real-time debugging of Kubernetes Operator using Go's Delve debugger", | |
"Helped to maintain and evolve Kubernetes Operator for SingleStore", | |
"Developed solution to audit Go app for packages with incompatible licenses", | |
"Updated and streamlined build process for Kubernetes Operator" | |
], | |
"keywords": [ | |
"External DNS", | |
"Kubernetes", | |
"Golang", | |
"DNS", | |
"Open-source", | |
"Licenses", | |
"Operator", | |
"Build", | |
"CI/CD", | |
"Delve", | |
"Debugging" | |
] | |
}, | |
{ | |
"name": "HPE", | |
"position": "Contract DevOps & Go Software Engineer", | |
"startDate": "2021-08", | |
"endDate": "2022-08", | |
"highlights": [ | |
"Worked on HTTP client & server in Go for CentOS-based gateway and Windows Server-based client for the collection of machine status and SQL Server perf metrics", | |
"Built Jenkins jobs using Bash and Groovy to create CentOS-based RPMs and Ubuntu-based ISOs and OVAs", | |
"Automated deployment to Frog Artifactory using vCenter vSphere CLI running on VMware VM", | |
"Created Windows Server 2019 VM w/Packer for dev & test of Go-based Windows agents running locally on macOS, and wrote Packer plugin in Go", | |
"Implemented automated build and evaluate process for VMware OVA running Ubuntu on VM in vCenter triggered locally or GitHub Actions on:push", | |
"Implemented process orchestration for product build process of Ubuntu ISO then OVA for use in VMware/vSphere/vCenter", | |
"Implemented upload to jFrog Artifactory and push to Amazon AWS S3 for ultimate download by customers managed via GitHub Actions" | |
], | |
"keywords": [ | |
"Packer", | |
"vSphere", | |
"vCenter", | |
"Virtual Machines", | |
"VMware ESXi", | |
"jFrog Artifactory", | |
"Jenkins", | |
"Amazon S3", | |
"Github Actions", | |
"Windows Server", | |
"Delve Debugger", | |
"Metrics collection", | |
"ISOs & OVAs", | |
"Cent OS", | |
"Ubuntu", | |
"MS SQL Server" | |
] | |
}, | |
{ | |
"name": "LinkedIn Learning", | |
"position": "Contract Skills Assessment Test Author", | |
"startDate": "2021-08", | |
"endDate": "2021-09", | |
"highlights": [ | |
"Worked with the team from LinkedIn Learning and two (2) other authors", | |
"Collaborated on the scope and outline for Go skills assessment test", | |
"Authored 50 Go skill-related questions", | |
"Coordinated with reviewers to make requested changes" | |
], | |
"keywords": [ | |
"Go", | |
"Skills assessment", | |
"Test authoring" | |
] | |
}, | |
{ | |
"name": "Resideo Technologies for FrontSide", | |
"position": "Contract Go Software Engineer", | |
"startDate": "2021-02", | |
"endDate": "2021-05", | |
"highlights": [ | |
"Developed pattern for client to use for Go-based microservices", | |
"Developed CLI to support a Node JS-based Backstage developer portal implementation focusing on testability", | |
"Used the Echo web framework w/OpenAPI code gen for microservice scaffolding.", | |
"Implemented GitOps w/change management via Github Pull Requests to control jobs for a Jenkins build system", | |
"Developed Go-based MitM proxy as a test double for GitHub API", | |
"Integrated Node JS-based Mountebank for additional API testing", | |
"Diagnosed, remediated and submitted PR for Mountebank's no support of HTTPS CONNECT", | |
"Implemented pattern for BDD-based testing using Ginkgo and GoMega", | |
"Developed techniques to validate duplicated string literals throughout a test suite" | |
], | |
"keywords": [ | |
"Testing", | |
"Go", | |
"Microservices", | |
"MitM Proxy", | |
"GitOps", | |
"HTTP" | |
] | |
}, | |
{ | |
"name": "Various", | |
"position": "Prior non-Go/Kubernetes/CI-CD related roles", | |
"endDate": "2022-07", | |
"highlights": [ | |
"Led development teams for clients", | |
"Developed solutions for clients in a variety of programming languages ", | |
"Hosted various Meetups for both Entrepreneurs and software developers", | |
"Founded and grew a startup to #123 on Inc 500 within five years", | |
"Trained programmers professionally for several years", | |
"ASK if you need more details about these" | |
], | |
"keywords": [ | |
"Team Lead", | |
"Meetup", | |
"Inc 500", | |
"Startup", | |
"Training" | |
] | |
} | |
], | |
"projects": [ | |
{ | |
"name": "PrefsCTL", | |
"type": "utility", | |
"url": "https://github.com/mikeschinkel/prefsctl", | |
"description": "CLI tool for managing macOS preferences in a YAML file like kubectl for Kubernetes manifests", | |
"stack": [ | |
"Go", | |
"cgo" | |
] | |
}, | |
{ | |
"name": "go-sofafeed", | |
"url": "https://github.com/mikeschinkel/go-sofafeed", | |
"type": "package", | |
"description": "Golang package for fetching and parsing the JSON format Simple Organized Feed for Apple Software Updates hosted at sofa.macadmins.io", | |
"stack": [ | |
"Go" | |
] | |
}, | |
{ | |
"name": "README Merge", | |
"type": "utility", | |
"url": "https://github.com/mikeschinkel/readme-merge", | |
"description": "GitHub Action, Dockerfile, and CLI tool to allow merging child Markdown docs into one README.md", | |
"stack": [ | |
"Go", | |
"Bash", | |
"Github Actions", | |
"Docker", | |
"Markdown" | |
] | |
}, | |
{ | |
"name": "SSOT", | |
"type": "utility", | |
"url": "https://github.com/mikeschinkel/ssot", | |
"description": "Single Source Of Truth CLI utility — Like envsubst, but in-place and with .yaml", | |
"stack": [ | |
"Go" | |
] | |
}, | |
{ | |
"name": "SaveTabs", | |
"type": "daemon + browser extension", | |
"url": "https://github.com/mikeschinkel/savetabs", | |
"description": "Chrome extension paired with local HTTP server for save links along with their tab groups", | |
"stack": [ | |
"Go", | |
"Sqlite", | |
"JavaScript", | |
"HTML", | |
"CSS", | |
"HTMX", | |
"AlpineJS", | |
"Tailwind CSS", | |
"Daisy UI", | |
"Bash", | |
"Browser Extension", | |
"Chrome", | |
"Microsoft Edge" | |
] | |
}, | |
{ | |
"name": "Bash Macros", | |
"type": "utility", | |
"url": "https://github.com/mikeschinkel/bash-macros", | |
"description": "A simple script for your .bashrc to implement m1..m9 \"macro\" aliases", | |
"stack": [ | |
"Bash" | |
] | |
}, | |
{ | |
"name": "go-diffator", | |
"url": "https://github.com/mikeschinkel/go-diffator", | |
"type": "package", | |
"description": "Diffator is a Go package to provide a difference string for comparing two Go values during testing.", | |
"stack": [ | |
"Go" | |
] | |
}, | |
{ | |
"name": "go-testdata-defaulter", | |
"url": "https://github.com/mikeschinkel/go-testdata-defaulter", | |
"type": "package", | |
"description": "Set table-driven test data defaults so that tables in tests only need include data that differs from defaults.", | |
"stack": [ | |
"Go" | |
] | |
}, | |
{ | |
"name": "go-typegen", | |
"url": "https://github.com/mikeschinkel/go-typegen", | |
"type": "package", | |
"description": "Simple Golang generator package for test fixtures.", | |
"stack": [ | |
"Go" | |
] | |
} | |
], | |
"interests": [ | |
{ | |
"keywords": [ | |
"Programming", | |
"CI/CD DevOps & IaC", | |
"Homelabs", | |
"SciFi TV Series" | |
] | |
} | |
], | |
"education": [ | |
{ | |
"institution": "Georgia Institute of Technology", | |
"url": "https://www.gatech.edu/", | |
"area": "Mechanical Engineering", | |
"studyType": "B.S.M.E.", | |
"endDate": "1998" | |
} | |
], | |
"volunteer": [ | |
{ | |
"organization": "The Linux Foundation — OpenAPI Initiative", | |
"position": "Volunteer", | |
"url": "https://www.openapis.org/", | |
"startDate": "2025-01", | |
"summary": "Participating in various working group to help improve and promote the use of OpenAPI" | |
}, | |
{ | |
"organization": "Open Source Pull Requests", | |
"position": "Contributor", | |
"url": "https://github.com/search?q=author:mikeschinkel&is:pr&is:merged&type=pullrequests", | |
"website": "https://github.com/mikeschinkel", | |
"startDate": "2013-09", | |
"summary": "Active contributor to various open source projects, focusing on feature improvements and bug fixes", | |
"highlights": [ | |
"micromdm/plist — PR #46: Allow `*any` when using `UnmarshalPlist()` (accepted, 2025)", | |
"sqlc-dev/sqlc — PR #123: Avoid generating empty Go imports statement (merged, 2024)", | |
"vmware/govmomi — PR #2840: Fixed docs for govc library.info w/-json (merged, 2022)", | |
"Plus over 100 more, 60 of which have been merged" | |
] | |
}, | |
{ | |
"organization": "Davis Direction Foundation", | |
"position": "Volunteer", | |
"url": "https://www.davisdirection.com/", | |
"startDate": "2023-11", | |
"endDate": "2024-03", | |
"summary": "Prepared source data for distribution to TAG-for-Good Data Science Competition" | |
} | |
], | |
"languages": [ | |
{ | |
"language": "English", | |
"fluency": "Native speaker" | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment