From 3cd476f4f104c42d8006a26e4d7578564d8f56d3 Mon Sep 17 00:00:00 2001 From: Josh Beard Date: Thu, 16 Jan 2025 13:49:21 -0700 Subject: [PATCH] 2025 updates and housekeeping --- .deepsource.toml | 12 --- .github/.typoci.yml | 43 -------- .remarkrc.js | 16 --- .stylelintrc.json | 40 ------- resume.yaml | 242 +++++++++++++++--------------------------- templates/resume.html | 8 +- templates/style.css | 242 +++++++++++++++++------------------------- 7 files changed, 187 insertions(+), 416 deletions(-) delete mode 100644 .deepsource.toml delete mode 100644 .github/.typoci.yml delete mode 100644 .remarkrc.js delete mode 100644 .stylelintrc.json diff --git a/.deepsource.toml b/.deepsource.toml deleted file mode 100644 index ac1255f..0000000 --- a/.deepsource.toml +++ /dev/null @@ -1,12 +0,0 @@ -version = 1 - -[[analyzers]] -name = "shell" -enabled = true - -[[analyzers]] -name = "python" -enabled = true - - [analyzers.meta] - runtime_version = "3.x.x" \ No newline at end of file diff --git a/.github/.typoci.yml b/.github/.typoci.yml deleted file mode 100644 index d87b092..0000000 --- a/.github/.typoci.yml +++ /dev/null @@ -1,43 +0,0 @@ -# This is a sample .typo-ci.yml file, it's used to configure how Typo CI will behave. -# Add it to the root of your project and push it to github. ---- - -# What language dictionaries should it use? By default Typo CI will select 'en' & 'en_GB' -# Currently Typo CI supports: -# de -# en -# en_GB -# es -# fr -# it -# nl -# pt -# pt_BR -# tr -dictionaries: - - en - - en_GB - -# Any files/folders we should ignore? -excluded_files: - - "vendor/**/*" - - "node_modules/**/*" - - "*.key" - - "*.enc" - - "*.min.css" - - "*.css.map" - - "*.min.js" - - "*.js.map" - - "*.mk" - - "package-lock.json" - - "yarn.lock" - - "Gemfile.lock" - - ".typo-ci.yml" - - ".github/.typo-ci.yml" - -# Any words we should ignore? -excluded_words: - - typoci - -# Would you like filenames to also be spellchecked? -spellcheck_filenames: true diff --git a/.remarkrc.js b/.remarkrc.js deleted file mode 100644 index 8a0dc8b..0000000 --- a/.remarkrc.js +++ /dev/null @@ -1,16 +0,0 @@ -exports.settings = { bullet: '*', paddedTable: false }; - -exports.plugins = [ - 'remark-frontmatter', - 'remark-gfm', - 'remark-preset-lint-recommended', - 'remark-preset-lint-consistent', - ['remark-lint-list-item-indent', false], - ['remark-lint-no-dead-urls', false], // Does not work because of github protection system - ['remark-lint-maximum-line-length', 120], - ['remark-lint-maximum-heading-length', 120], - ['remark-lint-strong-marker', '*'], - ['remark-lint-emphasis-marker', '_'], - ['remark-lint-unordered-list-marker-style', '*'], - ['remark-lint-list-item-spacing', false], -]; diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index 000abc1..0000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "extends": [ - "stylelint-config-recommended", - "stylelint-config-rational-order" - ], - "plugins": [ - "stylelint-order" - ], - "rules": { - "at-rule-empty-line-before": null, - "at-rule-no-unknown": null, - "at-rule-no-vendor-prefix": true, - "block-opening-brace-space-before": null, - "block-closing-brace-newline-after": ["always", { - "ignoreAtRules": [ - "if", - "else", - "elseif" - ] - }], - "color-hex-case": "upper", - "color-hex-length": "long", - "color-named": "never", - "comment-empty-line-before": ["always", { - "ignore": ["stylelint-commands"] - }], - "font-family-name-quotes": "always-where-recommended", - "font-weight-notation": "numeric", - "function-url-quotes": "always", - "no-descending-specificity": null, - "no-unknown-animations": true, - "property-no-vendor-prefix": true, - "selector-class-pattern": "^[a-z0-9]+(-[a-z0-9]+)*(__?[a-z]+)?(--[a-z]+)?$", - "selector-descendant-combinator-no-non-space": null, - "string-quotes": "double", - "unit-allowed-list": ["px", "em", "deg", "ms", "%", "mm", "vh", "dppx"], - "value-keyword-case": "lower", - "value-no-vendor-prefix": true - } -} diff --git a/resume.yaml b/resume.yaml index ffcf8a7..fc4b8e4 100644 --- a/resume.yaml +++ b/resume.yaml @@ -10,8 +10,8 @@ # Header # ----------------------------------------------------------------------------- name: Josh Beard -headline: IT Professional / DevOps / Sysadmin -description: Josh Beard is an IT professional in Colorado +headline: DevOps | Platform | Delivery +description: Josh Beard is an adaptable IT professional in Colorado, delivering solutions that balance simplicity and efficiency. url: https://joshbeard.me/resume repo: url: https://github.com/joshbeard/resume @@ -49,9 +49,7 @@ contact: url: https://en.wikipedia.org/wiki/Colorado_Springs,_Colorado summary: > - IT professional with a strong background in systems administration, cloud, and - DevOps with years of experience and collaborations with more than a - hundred teams across hundreds of projects. + Pragmatic engineer that values simplicity, efficiency, and getting things done. # ----------------------------------------------------------------------------- # Experience @@ -61,21 +59,26 @@ experience: org: Live Oak Bank start: September 2022 end: Present - location: Remote details: - - Serve as the DevOps Lead for a software engineering team dedicated to - developing cutting-edge banking services. - - Work extensively with AWS, Terraform, GitLab, Go, Python, and Docker. - - Developed and maintain an open source Terraform provider for publishing - to the ReadMe.com documentation platform. - - Successfully implemented CI/CD pipelines across numerous projects, - streamlining processes, introducing new features, and enhancing release - reliability. - - Orchestrated the deployment of robust monitoring, observability, and - alerting solutions using AWS, DataDog, and PagerDuty, all managed with - Terraform. - - Engineered Terraform modules and tools to efficiently oversee and - manage hundreds of GitLab projects, users, and pipelines. + - Lead the design and development of tools and workflows to improve + software delivery and developer efficiency across multiple teams. + - Design and build a release orchestration tool in Go to coordinate + releases across teams and projects, enhancing safety, oversight, and + management of the release process while significantly improving team + efficiency. + - Streamline developer workflows by building and maintaining CI/CD + pipelines, introducing automated dependency and vulnerability + management, and improving feedback loops. + - Provide teams with improved developer tooling and processes to simplify + and standardize deployment and release workflows. + - Write and maintain an open-source Terraform provider and a companion Go + API client for the ReadMe.com developer portal to manage documentation + and API specifications as code. + - Work extensively with AWS, Terraform, GitLab, Go, Python, and Docker to + deliver reliable and scalable solutions supporting modern software + engineering practices. + - Establish monitoring and alerting systems to ensure reliable delivery + pipelines and actionable insights for teams. tech: - AWS - DataDog @@ -83,6 +86,7 @@ experience: - GitLab - Go - Golang + - Kubernetes - Python - Shell - Terraform @@ -91,24 +95,17 @@ experience: org: Ventera, Inc at USGS start: June 2022 end: April 2023 - location: Remote details: - # yamllint disable-line - - Contracted to [Water Resources Mission Area](https://www.usgs.gov/mission-areas/water-resources) - at the [US Geological Survey](https://www.usgs.gov/). - - DevSecOps on a small team working on a project focused on modernizing - and advancing a highly-utilized set of services for water data - collected and provided by the USGS. - - Collaboratively designed, implemented, and supported infrastructure and - CI/CD pipelines for a Python codebase of Lambda functions, modularized - static websites, and supporting resources. - - Specialized in cloud-native and serverless application development - and infrastructure. - - Integrated and automated code analysis into the developer workflow and - pipeline. + - Contracted to the Water Resources Mission Area at the USGS to modernize + and advance services delivering critical water data. + - Supported infrastructure and CI/CD pipelines for serverless Python + applications and static websites, built with AWS services. + - Automated security checks and integrated code analysis into CI/CD + pipelines, simplifying compliance for development teams. + - Worked closely with a small team, balancing hands-on engineering with + collaborative problem-solving. tech: - - AWS (CloudFormation, Lambda, CloudFront, S3, IAM, RDS, API Gateway, - more) + - AWS - GitLab - Python @@ -116,172 +113,97 @@ experience: org: Apogee Engineering, LLC at USGS start: September 2015 end: May 2022 - location: Remote details: - # yamllint disable-line - - Contracted to [Science Analytics and Synthesis](https://www.usgs.gov/core-science-systems/science-analytics-and-synthesis/) - at the [US Geological Survey](https://www.usgs.gov/). - - Managed the architecture and implementation of the IT platform for 50+ - USGS products, ensuring their smooth operation. - - Led and contributed significantly to complex technical projects within - the Science Analytics and Synthesis group at the US Geological Survey. - - Deployed comprehensive configuration management across hundreds of - Linux servers using Puppet and Ansible. - - Migrated hundreds of projects from Bamboo and BitBucket to GitLab. - - Architected and deployed scalable and flexible HTTP services with AWS, - Nginx, and Traefik. - - Successfully migrated 50+ products from on-premise and on-VM - deployments to AWS and Docker. - - Automated CI/CD pipelines for hundreds of projects, streamlining - release processes and enhancing consistency. - - Collaborated effectively with over a dozen teams to deliver critical - applications to the USGS science community. - - Authored extensive documentation, adopting a "docs-as-code" approach to - ensure clear guidance on DevOps practices and project-specific - information (utilized Markdown). - - Provided mentorship and training to colleagues on various topics, - including Docker, AWS, and Terraform. - - Established and managed Infrastructure as Code for numerous - applications and services. + - Managed the architecture and infrastructure for over 50 USGS products, + ensuring scalability and reliability. + - Led the migration of hundreds of projects from legacy CI/CD systems to + GitLab, improving efficiency and developer experience. + - Deployed configuration management at scale using Puppet and Ansible, + simplifying server operations for hundreds of Linux systems. + - Moved 50+ applications from on-premise to AWS with Docker, enabling more + flexible and scalable deployments. + - Supported cross-team collaboration and delivery, building tools and + processes that teams could easily adopt and extend. + - Mentored colleagues in DevOps best practices, including Docker, AWS, and + Terraform, empowering teams to manage their own infrastructure. + - Authored extensive documentation with a “docs-as-code” approach, + standardizing project knowledge and operational guidance. tech: - - Linux + - AWS - GitLab - Docker - - AWS (wide range of services) - Terraform - Ansible - Puppet - Python - - Packer - - VMware vSphere - - Jira - - Artifactory - - Bamboo - - BitBucket - - Tomcat - - Ruby - Nginx - Traefik - - Apache - - title: Sr. Professional Services Engineer + - title: Professional Services Engineer org: Puppet Inc. start: September 2013 end: April 2015 - location: Remote details: - - Consulted on Puppet products and DevOps practices for a wide range of - customers, including some of Puppet's largest customers and most - sophisticated engagements. - - Instructed dozens of classes on Puppet products to organizations and - general public. - - Contributed Puppet modules and other tools for community use and used - within Puppet's commercial products. - - Developed Puppet, Ruby, and shell code for extending products and - automating processes. - - Consulted on pre-sales, scoping of work, and post-sales support. - - Earned high marks for customer satisfaction, team work, and - professionalism. + - Delivered consulting and training on Puppet and DevOps practices to + enterprise clients, tailoring solutions to unique needs. + - Created reusable Puppet modules and tools to streamline automation for + internal and external use. + - Earned high marks for adaptability, customer engagement, and technical + problem-solving across a diverse client base. tech: + - Puppet - Linux - - Puppet and Puppet Enterprise - - Git - - GitLab - - Packer - - Vagrant - - Jira - - Tomcat - Ruby + - Git - Shell - - Nginx - - Apache - - WebSphere - title: Linux/Unix Systems Administrator org: Douglas School District start: January 2010 end: September 2013 - location: Box Elder, SD - details: - - Deployed and administered school district Linux and FreeBSD servers and - services for thousands of users. - - Improved integration across network services for over 2,000 students, - faculty, and staff. - - Administered network file systems, HTTP, DNS/DHCP, Firewalls, - Monitoring, Logging, Mail (SMTP, POP3, IMAP, filtering, webmail), and - other services for all district users. - - Improved workstation provisioning through automation, deploying several - hundred new workstations a year. - - Introduced configuration management (Puppet) to manage servers. - - Redesigned district website and implemented WordPress to manage it. - tech: - - FreeBSD - - Linux - - MacOS - - Puppet - - Apache - - Nginx - - BIND - - Shell - - HTML - - CSS - - PHP - - Ruby - - KVM - - pf - - Sophos - - Graylog - - Nginx - - Icinga - - NFS - - Postfix - - WordPress + # details: + # - Deployed and maintained critical IT infrastructure for 2,000+ users, + # introducing automation and configuration management with Puppet. + # - Improved provisioning and management processes for servers and + # workstations, ensuring reliable operations district-wide. - - title: Tier II Technical Support + - title: Senior Support Engineer org: Apple, Inc. start: October 2008 end: January 2010 - location: Remote - # details: - # - Provided end-user support to customers and business using Apple - # products; especially Apple’s computers and macOS. - # - Consistently received high marks for customer satisfaction and - # issue resolution. - title: Signal Support Systems Specialist org: US Army start: August 2006 end: October 2008 - location: Fort Carson, CO # details: - # - Supported Army battalion network and communications equipment, - # including workstations, tactical radios, GPS, crypto, network - # services, and multimedia systems. - # - Among first members of battalion staff at Fort Carson and integral - # part of initial stand up of IT operations and communications. + # - Supported battalion communications and network systems, including + # tactical radios, GPS, and IT operations. + +# ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # Skills # ----------------------------------------------------------------------------- skills: products: - - 12 Factor App Methodology - - AWS (EC2, RDS, IAM, S3, Elasticsearch, ECS, EFS, CloudFront, Lambda, - Route53, Secrets Manager, Load Balancing, CloudFormation, CDK, misc) - - Accessibility - - Analysis (e.g. Codacy, CodeFactor, Mend, DeepSource, Owasp ZAP, rspec) + - 12 Factor Apps + - AWS + - Alpine Linux - Ansible - Apache - Arch Linux - Artifactory - Atlassian - Bamboo - - Bash and Shell + - Bash - BitBucket - CI/CD - Cloud + - Compliance - DataDog - - Debian/Ubuntu + - Debian + - DevSecOps - DigitalOcean - Docker - Elasticsearch @@ -297,12 +219,13 @@ skills: - Golang - Graylog - HAProxy - - HTML/CSS + - HTML - Infrastructure as Code - Jira + - Kubernetes - LXC - - MariaDB/MySQL - MongoDB + - MySQL - Nginx - Octopus - PagerDuty @@ -310,15 +233,16 @@ skills: - Packer - Postfix - PostgreSQL - - Puppet/Puppet Enterprise + - Proxmox + - Puppet - Python - - RedHat/CentOS/Rocky/EL + - RedHat - Ruby - - Security and Compliance + - Security - Sensu - Serverless - - Terraform (including provider development) - - Test-Driven Development (TDD) + - Shell + - Terraform - Tomcat - Traefik - - Vagrant + - Ubuntu diff --git a/templates/resume.html b/templates/resume.html index 6dae17b..1b42ea7 100644 --- a/templates/resume.html +++ b/templates/resume.html @@ -96,8 +96,12 @@

Experience

{% for job in resume['experience'] %}
-

{{ job['title'] }} with {{ job['org'] }}

-

{{ job['start'] }} - {{ job['end'] }} · {{ job['location'] }}

+

{{ job['title'] }} at {{ job['org'] }}

+

{{ job['start'] }} - {{ job['end'] }} + {%- if 'location' in job %} + · {{ job['location'] }} + {%- endif %} +

    {%- for item in job['details'] %}
  • {{ item }}
  • diff --git a/templates/style.css b/templates/style.css index 6ae912b..ca62982 100644 --- a/templates/style.css +++ b/templates/style.css @@ -1,3 +1,4 @@ +/* Reset */ * { margin: 0; padding: 0; @@ -7,36 +8,34 @@ border: 0; } -article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section { - display:block; -} - +/* Base Styles */ html, body { - margin: 0; - padding: 0; color: #5A595A; background: #408663; } -header { - display: none; +p { + font-size: 1em; + line-height: 1.4em; } -.clear { - clear: both; +h2 { + margin-bottom: 6px; + color: #737373; + font-size: 1.2em; } -img.icon { - width: 14px; - margin-right: 6px; +h3 { + margin: 20px 0 10px; + color: #34495D; + font-size: 18px; } -p { - color: #5A595A; - font-size: 1em; - line-height: 1.4em; +h3:first-child { + margin-top: 0; } +/* Layout */ #cv { width: 90%; max-width: 1024px; @@ -45,6 +44,7 @@ p { box-shadow: 0 0 25px #333333; } +/* Header Styles */ #heading { display: flex; flex-direction: row; @@ -56,17 +56,11 @@ p { flex: 1; } -#heading_extra { - flex: 0 1 auto; - overflow: hidden; -} - -h1 { +#name h1 { margin-bottom: -6px; color: #FFFFFF; font-size: 2.5em; line-height: 1.4em; - content: "Josh Beard"; } #name h2 { @@ -75,52 +69,53 @@ h1 { font-size: 1em; } +#heading_extra { + flex: 0 1 auto; + overflow: hidden; +} + +/* Content Area */ #resume_content { padding: 0 40px 20px; } +.section_content { + flex: 1; + margin-bottom: 20px; + line-height: 140%; +} + +/* Links */ +#resume_content a { + text-decoration: none; +} + #resume_content a:link { color: #045FB4; - text-decoration: none; } #resume_content a:visited { color: #380B61; - text-decoration: none; } -#resume_content a:hover, #resume_content a:active { +#resume_content a:hover, +#resume_content a:active { text-decoration: underline; } +/* Contact and Format Lists */ #contact_details ul, #other_formats ul { margin-top: 2px; list-style-type: none; } - -#other_formats ul { - font-size: 0.8em; -} - -#other_formats { - padding: 4px 12px; - color: #FFFFFF; - /* font-variant: small-caps; */ - text-align: right; - background: #31333C; -} - #contact_details ul li { line-height: 1.5; } #contact_details ul li, -#other_formats ul li { - color: #FFFFFF; -} - +#other_formats ul li, #contact_details ul li a, #other_formats ul li a, a[href^=tel] { @@ -133,15 +128,25 @@ a[href^=tel] { color: #EBD94C; } +/* Other Formats Section */ +#other_formats { + padding: 4px 12px; + color: #FFFFFF; + text-align: right; + background: #31333C; + font-size: 0.8em; +} + #other_formats li { display: inline; margin-left: 10px; } #other_formats li:first-child { - margin-left: 0px; + margin-left: 0; } +/* Job Articles */ article.job { margin-bottom: 14px; padding-bottom: 14px; @@ -152,14 +157,14 @@ article.job:last-child { border-bottom: none; } -h3 + ul, -article.job ul { +article.job ul, +h3 + ul { margin: 20px 0 0 10px; list-style: square; } -h3 + ul li, -article.job ul li { +article.job ul li, +h3 + ul li { margin-bottom: 4px; } @@ -167,6 +172,7 @@ article.job ul li p { display: inline; } +/* Sections */ section { display: flex; padding: 20px 0 0; @@ -188,46 +194,12 @@ section h2 { word-wrap: break-word; } -.section_content { - flex: 1; - margin-bottom: 20px; - line-height: 140%; -} - -h2 { - margin-bottom: 6px; - color: #737373; - font-size: 1.2em; -} - -h3 { - margin-top: 20px; - margin-bottom: 10px; - color: #34495D; - font-size: 18px; -} - -h3:first-child { - margin-top: 0; -} - -.section_body { - margin-top: 8px; -} - -#resume_content .section_content .job h2 a:visited, -#resume_content .section_content .job h2 a { - color: #34495D; -} - -p.key_tech { - margin-top: 14px; -} - +/* Footer */ #footer { display: flex; padding: 22px 22px 12px; color: #FFFFFF; + background: #26272A; } #footer_left, @@ -235,9 +207,9 @@ p.key_tech { width: 50%; } -#footer, #foot_copyright { +#footer, +#foot_copyright { line-height: 1.5; - background: #26272A; } #footer #foot_copyright, @@ -245,24 +217,29 @@ p.key_tech { text-align: right; } -#footer a, #foot_copyright a { +#footer a, +#foot_copyright a { color: #FFFFFF; text-decoration: none; } -#footer a:hover, #foot_copyright a:hover { +#footer a:hover, +#foot_copyright a:hover { color: #EBD94C; text-decoration: underline; } -/* -@media all and (max-width: 800px) { - #contact_details ul li a { - font-size: 1.1em; - } +/* Utility Classes */ +.clear { + clear: both; } -*/ +img.icon { + width: 14px; + margin-right: 6px; +} + +/* Media Queries */ @media all and (max-width: 601px) { #cv { width: 95%; @@ -274,14 +251,17 @@ p.key_tech { display: block; text-align: center; } + #other_formats { text-align: center; } + section { display: block; } - section h2, .section_content { + section h2, + .section_content { width: 100%; } @@ -294,7 +274,8 @@ p.key_tech { line-height: 3; } - #footer_left, #footer_right { + #footer_left, + #footer_right { width: auto; } @@ -309,7 +290,6 @@ p.key_tech { line-height: 3; text-align: center; } - } @media all and (max-width: 480px) { @@ -341,17 +321,13 @@ p.key_tech { #contact_details ul li a { color: #70AD8F; } - } @media print { - html,body { + html, body { background: none; } - a { - color: #333333; - text-decoration: none; - } + #cv { width: 100%; background: #FFFFFF; @@ -367,36 +343,6 @@ p.key_tech { border: 1px solid #CCCCCC; } - #heading_right, - #heading_left { - text-align: left; - } - - #other_formats { - display: none; - } - - img.icon { - display: none; - } - - #resume_content { - padding: 0; - border-top: none; - } - #resume_content a:link { - color: #5A595A; - text-decoration: none; - } - - #resume_content a:visited { - color: #5A595A; - text-decoration: none; - } - h3 a:visited, - h3 a { - color: #34495D; - } #name h1 { color: #444444; } @@ -405,8 +351,11 @@ p.key_tech { color: #555555; } - #footer, #foot_copyright { - display: none; + #contact_details ul li, + #contact_details a, + #contact_details ul li a, + a[href^=tel] { + color: #555555; } section h2 { @@ -418,16 +367,21 @@ p.key_tech { margin-top: 10px; } - #contact_details ul li, - #contact_details a, - #contact_details ul li a, a[href^=tel] { - color: #555555; + #resume_content { + padding: 0; + border-top: none; } - /* - article { - page-break-inside: avoid; + #resume_content a:link, + #resume_content a:visited { + color: #5A595A; + text-decoration: none; } - */ + img.icon, + #other_formats, + #footer, + #foot_copyright { + display: none; + } }