Compare commits
No commits in common. "55b5b782ded237d3bec0f119a902b1addae2681f" and "d30f140b6aa7b814e8217080c492c46865449c82" have entirely different histories.
55b5b782de
...
d30f140b6a
|
@ -35,14 +35,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
# Base
|
|
||||||
|
|
||||||
**[Base](https://getbase.org/)** is a rock solid, responsive CSS framework based on Normalize.css. Parts of Base are used in addition to the Juice theme.
|
|
||||||
|
|
||||||
# Zola
|
# Zola
|
||||||
|
|
||||||
**[Zola](https://www.getzola.org)** is a fast static site generator in a single binary with everything built-in.
|
[Zola](https://www.getzola.org) is a fast static site generator in a single binary with everything built-in.
|
||||||
|
|
||||||
# icons8
|
# icons8
|
||||||
|
|
||||||
We use several **[icons8](https://icons8.com)** images throughout the site.
|
We use several [icons8](https://icons8.com) images throughout the site.
|
|
@ -6,7 +6,7 @@ weight = 1
|
||||||
|
|
||||||
# Summary
|
# Summary
|
||||||
|
|
||||||
I am a polyglot developer with considerable experience in Ruby and Rails and cloud infrastructure. I excel at being a force multiplier, mentoring developers, and writing clear and useful documentation for other engineers. I am passionate about giving my teams the tools they need to develop and deliver software by creating powerful and simple development and deployment environments.
|
I am a polyglot developer with considerable experience in Ruby and Rails and bash. I excel at documenting critical technical processes for other engineers, being a force multiplier, and mentoring other developers. I am very passionate about finding new and creative ways to automate deployments in cloud environments so that business value can be delivered quickly and efficiently.
|
||||||
|
|
||||||
# Work History
|
# Work History
|
||||||
|
|
||||||
|
@ -20,11 +20,8 @@ September 2021 - 20 January 2023
|
||||||
* Single-handedly reduced new engineer onboarding time to about 2 hours
|
* Single-handedly reduced new engineer onboarding time to about 2 hours
|
||||||
* Supported the entire engineering department with the local development environment in both Linux and macOS
|
* Supported the entire engineering department with the local development environment in both Linux and macOS
|
||||||
* Rewrote the git-hosted markdown documentation into a complete tutorial and walkthrough to onboard new developers using Notion
|
* Rewrote the git-hosted markdown documentation into a complete tutorial and walkthrough to onboard new developers using Notion
|
||||||
* Developed policies and best practices for features across multiple teams and stakeholders, including product
|
|
||||||
* Designed complex data structures for use in all countries serviced by Oyster
|
* Designed complex data structures for use in all countries serviced by Oyster
|
||||||
* Collaborated with product owners to document feature requirements and time estimates
|
* Developed policies and best practices for features across multiple teams and stakeholders, including product
|
||||||
* Implemented features of all sizes as well as writing fixes for ad-hoc failures
|
|
||||||
* Added instrumentation to track arbitrary metrics for features and performance
|
|
||||||
* Participated in many technical interviews, resulting in hiring many new engineers including other Staff level engineers
|
* Participated in many technical interviews, resulting in hiring many new engineers including other Staff level engineers
|
||||||
|
|
||||||
## Consolo Services / WellSky, Remote
|
## Consolo Services / WellSky, Remote
|
||||||
|
@ -58,46 +55,7 @@ October 2004 - June 2006
|
||||||
|
|
||||||
# Technologies
|
# Technologies
|
||||||
|
|
||||||
<table class="table-responsive">
|
{{ capsule(item="Ruby") }} {{ capsule(item="Ruby-on-Rails") }} {{ capsule(item="Rust") }} {{ capsule(item="Kubernetes") }} {{ capsule(item="Helm") }} {{ capsule(item="Cloud infrastructure (AWS & GCP)") }} {{ capsule(item="Github Actions") }} {{ capsule(item="Google Cloud Build") }} {{ capsule(item="Heroku") }} {{ capsule(item="DataDog") }} {{ capsule(item="NewRelic") }} {{ capsule(item="Prometheus") }} {{ capsule(item="Alertmanager") }} {{ capsule(item="Grafana") }} {{ capsule(item="Nix") }} {{ capsule(item="Docker") }} {{ capsule(item="Podman") }} {{ capsule(item="Terraform") }} {{ capsule(item="Ansible") }} {{ capsule(item="bash / sh scripting") }} {{ capsule(item="JavaScript") }} {{ capsule(item="TypeScript") }} {{ capsule(item="Notion") }} {{ capsule(item="mdbook") }} {{ capsule(item="Erlang") }} {{ capsule(item="Elixir") }} {{ capsule(item="PostgreSQL") }} {{ capsule(item="SQLite") }} {{ capsule(item="Linux") }} {{ capsule(item="FreeBSD") }} {{ capsule(item="GNU Make") }} {{ capsule(item="just") }} {{ capsule(item="nginx") }} {{ capsule(item="caddy") }} {{ capsule(item="JSON") }} {{ capsule(item="YAML") }} {{ capsule(item="TOML") }} {{ capsule(item="REST") }} {{ capsule(item="GraphQL") }} {{ capsule(item="HTTP(S)") }}
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Ruby and Ruby on Rails</td>
|
|
||||||
<td>I have used Ruby and Rails professionally since 2006</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Documentation</td>
|
|
||||||
<td>Notion, <code><a href="https://rust-lang.github.io/mdBook/">mdbook</a></code>, and Markdown</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Cloud Computing</td>
|
|
||||||
<td>AWS and GCP</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Containers</td>
|
|
||||||
<td>Docker, <code><a href="https://podman.io/">podman</a></code>, <code><a href="https://firecracker-microvm.github.io/">firecracker</a></code>, and FreeBSD jails</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Automation</td>
|
|
||||||
<td>Terraform, Ansible, <code><a href="https://just.systems">just</a></code>, and plain shell scripts</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>CI / CD</td>
|
|
||||||
<td>CircleCI, Google Cloud Build, Jenkins, and Github Actions</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Instrumentation</td>
|
|
||||||
<td>Prometheus, Alertmanager, Grafana, Honeycomb, NewRelic, and DataDog</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Databases</td>
|
|
||||||
<td>PostgreSQL and SQLite</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Other languages</td>
|
|
||||||
<td>I have used Rust, Erlang, Elixir, JavaScript, TypeScript, Python, C, and Java to solve all manner of tasks.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
# Education
|
# Education
|
||||||
|
|
||||||
|
@ -113,13 +71,13 @@ August 2001 - December 2009
|
||||||
* I make most meals in the house and I can also make some killer baked goods.
|
* I make most meals in the house and I can also make some killer baked goods.
|
||||||
* I enjoy overlanding, offroading, and camping.
|
* I enjoy overlanding, offroading, and camping.
|
||||||
* My family has a farm.
|
* My family has a farm.
|
||||||
* A _working_ farm with more than 75 animals across 8 different species.
|
* A _real_ farm with more than 75 animals.
|
||||||
* I do not need a gym membership: I have a farm. It is hard work, but rewarding.
|
* I do not need a gym membership: I have a farm. It is hard work, but rewarding.
|
||||||
* My partner grows cut flowers professionally.
|
* My partner grows cut flowers professionally.
|
||||||
* My tractor is more expensive than my truck.
|
* My tractor is more expensive than my truck.
|
||||||
* I self-host most of the services I use online (but not email).
|
* I self-host most of the services I use online (but not email).
|
||||||
* I enjoy playing video games.
|
* I enjoy playing video games.
|
||||||
* I learn new programming languages that seem interesting to me.
|
* I learn new programming languages that seem interesting.
|
||||||
* My favorite method is to use the [Advent of Code](https://adventofcode.com) puzzles.
|
* My favorite method is to use the [Advent of Code](https://adventofcode.com) puzzles.
|
||||||
* My family recently developed a shared interest in Pokemon TCG (Trading Card Game).
|
* My family recently developed a shared interest in Pokemon TCG (Trading Card Game).
|
||||||
* My partner and I have travelled to Japan 5 times together.
|
* My partner and I have travelled to Japan 5 times together.
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
.container {
|
||||||
|
max-width: ($breakpoint-xl - $grid-gutter * 2);
|
||||||
|
padding-left: $grid-gutter;
|
||||||
|
padding-right: $grid-gutter;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(m) {
|
||||||
|
.container-m {
|
||||||
|
width: ($breakpoint-m - $grid-gutter * 2);
|
||||||
|
max-width: auto;
|
||||||
|
padding-left: $grid-gutter;
|
||||||
|
padding-right: $grid-gutter;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(l) {
|
||||||
|
.container-l {
|
||||||
|
width: ($breakpoint-l - $grid-gutter * 2);
|
||||||
|
max-width: auto;
|
||||||
|
padding-left: $grid-gutter;
|
||||||
|
padding-right: $grid-gutter;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(xl) {
|
||||||
|
.container-xl {
|
||||||
|
width: ($breakpoint-xl - $grid-gutter * 2);
|
||||||
|
max-width: auto;
|
||||||
|
padding-left: $grid-gutter;
|
||||||
|
padding-right: $grid-gutter;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
$breakpoint-m: 768px !default;
|
||||||
|
$breakpoint-l: 980px !default;
|
||||||
|
$breakpoint-xl: 1200px !default;
|
||||||
|
|
||||||
|
$grid-gutter: 16px !default;
|
||||||
|
|
||||||
|
// Mixins
|
||||||
|
|
||||||
|
// Breakpoints
|
||||||
|
// Example: .component { @include breakpoint(m) { background: red; } };
|
||||||
|
// Output: .component { @media only screen and (min-width: 720px) { background: red; } }
|
||||||
|
@mixin breakpoint($bp) {
|
||||||
|
@if $bp == xl {
|
||||||
|
@media only screen and (min-width: $breakpoint-xl) { @content ; }
|
||||||
|
}
|
||||||
|
@else if $bp == l {
|
||||||
|
@media only screen and (min-width: $breakpoint-l) { @content ; }
|
||||||
|
}
|
||||||
|
@else if $bp == m {
|
||||||
|
@media only screen and (min-width: $breakpoint-m) { @content ; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Background Color with Opacity
|
||||||
|
// Example: .element { @include background-rgba(#000000, .5); }}
|
||||||
|
// Output: .element { background: rgba(0, 0, 0, .5); }
|
||||||
|
@mixin background-rgba($color, $alpha) {
|
||||||
|
background-color: $color;
|
||||||
|
background-color: rgba($color, $alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Animations
|
||||||
|
// Example: .fade { @mixin animate(1s); }
|
||||||
|
// Output: .fade { animation-duration: 1s; animation-fill-mode: both; }
|
||||||
|
@mixin animate($duration: 1s) {
|
||||||
|
animation-duration: $duration;
|
||||||
|
animation-fill-mode: both;
|
||||||
|
}
|
|
@ -1,18 +0,0 @@
|
||||||
table {
|
|
||||||
text-align: left;
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
border: 1px solid var(--primary-text-color);
|
|
||||||
}
|
|
||||||
table td,
|
|
||||||
table th {
|
|
||||||
padding: 1rem;
|
|
||||||
border-bottom: 1px solid var(--primary-text-color);
|
|
||||||
border-right: 1px solid var(--primary-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
table tr:nth-child(2n) { background-color: #f6f8fa; }
|
|
||||||
|
|
||||||
.table-responsive { overflow-x: auto; }
|
|
|
@ -2,7 +2,8 @@
|
||||||
@import "_text.scss";
|
@import "_text.scss";
|
||||||
@import "_markdown.scss";
|
@import "_markdown.scss";
|
||||||
@import "_penguincoder.scss";
|
@import "_penguincoder.scss";
|
||||||
@import "_tables.scss";
|
@import "_mixins.scss";
|
||||||
|
@import "_containers.scss";
|
||||||
|
|
||||||
body {
|
body {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
Loading…
Reference in New Issue