Compare commits

...

24 Commits

Author SHA1 Message Date
Greg Shuflin
ecb83eb0d2 Update resume; change filename 2024-10-15 21:01:52 -07:00
Greg Shuflin
b733b58f53 Fix typo: documentation 2024-01-31 23:54:38 -08:00
Greg Shuflin
4e7191b589 Fix other weird apostrophe 2023-12-11 22:06:38 -08:00
Greg Shuflin
eccb0fb5dd Fix weird apostrophe 2023-12-11 20:25:15 -08:00
Greg Shuflin
1739b2057e Add Knox 2023-09-26 23:16:34 -07:00
Greg Shuflin
8b9bad06a6 Fix url 2023-07-01 01:35:53 -07:00
Greg Shuflin
909ed59a6b Fix website URLs 2023-07-01 01:26:28 -07:00
Greg Shuflin
8425b707b1 Fix justfile's use of typst 2023-07-01 01:25:49 -07:00
Greg Shuflin
d0c6acba08 Some wording changes to resume 2023-06-17 01:50:29 -07:00
Greg Shuflin
272ae4b8f3 Port to nix flake 2023-06-17 01:46:02 -07:00
Greg Shuflin
027beb8acb Update to latest nixpkgs
And use newest typst behavior to build
2023-04-08 18:19:24 -07:00
Greg Shuflin
9d45df71cb Fix typo 2023-03-27 20:22:35 -07:00
Greg Shuflin
73fa0f0110 Specify proper filename in just recipe 2023-03-27 20:18:36 -07:00
Greg Shuflin
010b9e731a Fix some extraneous newlines 2023-03-27 20:18:23 -07:00
Greg Shuflin
4a7217f9e1 Add nix file; add resume document metadata 2023-03-27 01:48:33 -07:00
Greg Shuflin
8c24223ac0 Add typst version of resume 2023-03-21 20:00:14 -07:00
Greg Shuflin
62333971bd Add phone number to resume 2023-03-07 14:31:08 -08:00
Greg Shuflin
b93bb5b2eb No longer at FPG 2023-01-27 15:00:59 -08:00
Greg Shuflin
13eebca1b2 Add just/sshfs, emphasize recent work 2022-11-04 23:32:55 -07:00
Greg Shuflin
20aa40c045 Add 'devops' to job description 2022-09-29 14:23:18 -07:00
Greg Shuflin
31483b7634 Short resume update 2022-09-24 21:42:53 -07:00
Greg Shuflin
52a11a896a Add kraken time to resume 2022-07-29 16:03:16 -07:00
Greg Shuflin
627a822d9d Some spacing tweaks 2022-04-16 03:28:26 -07:00
Greg Shuflin
55e43a6de7 A few more tweaks 2022-04-16 03:00:34 -07:00
11 changed files with 271 additions and 16 deletions

28
default.nix Normal file
View File

@ -0,0 +1,28 @@
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/0e19daa510e47a40e06257e205965f3b96ce0ac9.tar.gz") {}}:
let
stdenv = pkgs.stdenv;
gitignoreSrc = pkgs.fetchFromGitHub {
owner = "hercules-ci";
repo = "gitignore.nix";
rev = "a20de23b925fd8264fd7fad6454652e142fd7f73";
sha256 =
"sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=";
};
resumeFilename = "Greg Shuflin Resume.pdf";
in stdenv.mkDerivation {
name = "Greg Shuflin Resume";
nativeBuildInputs = [pkgs.typst];
#src = gitignoreSrc ./.;
src = ./.;
buildPhase = ''
typst compile resume.typ "${resumeFilename}"
'';
installPhase = ''
mkdir -p $out
mv "${resumeFilename}" $out
'';
}

59
flake.lock Normal file
View File

@ -0,0 +1,59 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1685518550,
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1686949509,
"narHash": "sha256-52OTWmIjf5t5VcoGhSjRsCWHlwSf/mPhY+0fpaiA1hs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "992ccdd822ecff0712ed0004f89df9e96f6a4963",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

31
flake.nix Normal file
View File

@ -0,0 +1,31 @@
{
description = "Greg Shuflin Resume";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }: {
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt;
} // flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
resumeFilename = "Greg-Shuflin-Resume.pdf";
in
{
packages.default = pkgs.stdenv.mkDerivation {
name = "Greg-Shuflin-Resume";
nativeBuildInputs = [ pkgs.typst ];
src = ./.;
buildPhase = ''
typst compile resume.typ "${resumeFilename}"
'';
installPhase = ''
mkdir -p $out
mv "${resumeFilename}" $out
'';
};
});
}

1
icons/house.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c0 2.7-.2 5.4-.5 8.1V472c0 22.1-17.9 40-40 40H456c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1H416 392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"/></svg>

After

Width:  |  Height:  |  Size: 744 B

1
icons/location-dot.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"/></svg>

After

Width:  |  Height:  |  Size: 459 B

1
icons/phone.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z"/></svg>

After

Width:  |  Height:  |  Size: 568 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM218 271.7L64.2 172.4C66 156.4 79.5 144 96 144H352c16.5 0 30 12.4 31.8 28.4L230 271.7c-1.8 1.2-3.9 1.8-6 1.8s-4.2-.6-6-1.8zm29.4 26.9L384 210.4V336c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V210.4l136.6 88.2c7 4.5 15.1 6.9 23.4 6.9s16.4-2.4 23.4-6.9z"/></svg>

After

Width:  |  Height:  |  Size: 648 B

1
icons/square-git.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -2,6 +2,9 @@ default:
just --list
build_resume:
typst compile resume.typ ./"Greg-Shuflin-Resume.pdf"
build_resume_latex:
lualatex -jobname "Greg Shuflin resume" resume.tex
just clean

View File

@ -48,12 +48,17 @@
\newline
{\color{mediumgray}
\faicon{map-marker} Oakland, California |
\faicon{envelope-square} \emph{greg.shuflin@protonmail.com} |
\faicon{home} {\tt \href{https://greg.everydayimshuflin.com}{greg.everydayimshuflin.com}}
\faicon{map-marker} Oakland, California
\hspace{1 em}
\faicon{envelope-square} {\tt \href{mailto:greg.shuflin@protonmail.com}{greg.shuflin@protonmail.com}}
\hspace{1 em}
\faicon{phone} {\tt 510-332-6344}
\faicon{git-square} {\tt \href{https://gitea.everydayimshuflin.com/greg}{gitea.everydayimshuflin.com} } (personal) |
\faicon{git-square} {\tt \href{https://github.com/gshuflin}{github.com/gshuflin} } (professional)
\faicon{home} {\tt \href{https://greg.everydayimshuflin.com}{greg.everydayimshuflin.com}}
\hspace{1 em}
\faicon{git-square} {\tt \href{https://gitea.everydayimshuflin.com/greg}{gitea.everydayimshuflin.com}
\href{https://github.com/neunenak}{github.com/neunenak} }
\hspace{1 em}
\newline
}
@ -69,8 +74,8 @@ industry and open-source software development:
containerization, AWS/Terraform/CDK. I run a 4U VM server on a shelf in
my kitchen for personal projects.
\item Full-stack web development in multiple web frameworks in multiple
languages. Frontend web development in the modern Javascript/Typescript
\item Full-stack web development in multiple frameworks/languages, particularly
Python ecosystem. Frontend web development in the modern Javascript/Typescript
ecosystem.
\item Network programming and troubleshooting, hardware and software packet
@ -81,17 +86,27 @@ industry and open-source software development:
\sectionheader{Professional Experience}
\newline
\jobentry{Floating Point Group}{Software Engineer}{Dec 2021-}
\jobentry{Floating Point Group}{Software Engineer}{Dec 2021 - Dec 2022}
\begin{itemize}
\item{Backend engineer for cryptocurrency trading platform
backend built on AWS with Python business logic.}
\item{Backend/devops developer for cryptocurrency trading platform. Python/AWS stack,
Docker/Terraform/web3.py, some basic Solidity. }
\item{Designed and implemented from scratch the subsystem for keeping
track of continuous customer account balances for billing and
\item{Maintained integrations with multiple exchanges, blockchains, and crypto
assets. Implemented direct customer interaction with Ethereum assets
via Metamask. }
\item{Designed and implemented subsystem for
tracking continuous customer account balances for billing and
balance reconciliation. }
\end{itemize}
\jobentry{Kraken}{Software Engineer}{Mar 2021 - Sept 2021}
\begin{itemize}
\item{Rust developer responsible for converting parts of a legacy PHP web API codebase to
Rust/Actix for better performance, reliability, and maintainability.}
\end{itemize}
\jobentry{Toolchain Labs}{Software Engineer}{2019 - 2021}
\jobentry{Toolchain Labs}{Software Engineer}{Jun 2019 - Mar 2021}
\begin{itemize}
\item{Primarily responsible for contributing business-critical features,
bugfixes, and documentation to the
@ -110,7 +125,7 @@ industry and open-source software development:
hands needed on deck. }
\end{itemize}
\jobentry{3D Robotics}{Senior Software Engineer}{2017 - 2019}
\jobentry{3D Robotics}{Senior Software Engineer}{Jun 2017 - Jun 2019}
\begin{itemize}
\item{One of two members of the backend/devops team. Primarily
responsible for feature development for API microservices in
@ -122,10 +137,10 @@ industry and open-source software development:
\item{One time I grabbed a Windows laptop and set up a Visual C++
environment so I could apply a 10-line bugfix patch to some
Autodesk software we depended on. I'm not ordinarily a Windows
developer, but I got the patch applied.}
developer.}
\end{itemize}
\jobentry{Cisco Meraki}{Software Engineer}{2013 - 2017}
\jobentry{Cisco Meraki}{Software Engineer}{May 2013 - Jun 2017}
\begin{itemize}
\item{Primarily responsible for feature development and support
of several different models of cloud-managed Ethernet
@ -157,6 +172,9 @@ Relevant Coursework: Artificial Intelligence, Compilers, Operating Systems, Algo
\sectionheader{Open-source Projects}
\begin{description}
\item { I'm an occasional contributor to the \href{https://github.com/casey/just/pull/1333}{just} command runner,
and \href{https://github.com/neunenak/sshfs}{sshfs} unix utility. }
\item[\href{http://alexnisnevich.github.io/untrusted/}{Untrusted} ({\tt \href{https://github.com/AlexNisnevich/untrusted}{github.com/AlexNisnevich/untrusted}})]
An open-source browser-based roguelike game. Every level is unbeatable and
requires the player to modify the Javascript code defining the level in

111
resume.typ Normal file
View File

@ -0,0 +1,111 @@
#set document(title: "Greg Shuflin Resume", author: "Greg Shuflin")
#set page("us-letter", margin: 0.5in)
#set text(font: "Inter") // Note - not quite the font from my old resume
#show link: orig => text(font: "Inconsolata", orig)
#let medium-gray = rgb(44%, 46%, 47%)
// latex-derived sizes? I'm guessing here
#let Huge = 2.5em
#let Large = 2em
#let large = 1.3em
#let section-header(content) = [ #text(font: "Fira Sans", size: Large, fill: rgb(0%, 0%, 100%))[#smallcaps(content)] \ ]
#let job-entry(job, job-title, dates) = [
#text(size: large, weight: "bold")[#job] \
#text(fill: medium-gray)[#job-title | #text(font: "Fira Sans", style: "italic")[#dates]]
]
// Title
#{
set text(font: "Fira Sans", size: 2.5em)
[ #smallcaps([Gregory Shuflin]) ]
}
//Contact section
#{
set text(fill: medium-gray)
let icon-item(icon-file, free-text) = [
#box(baseline: 20%)[#image("./icons/" + icon-file, height:1em)] #free-text
]
[
#icon-item("location-dot.svg", [Oakland, California])
#h(1em)
#icon-item("square-envelope.svg", link("mailto:greg.shuflin@protonmail.com")[greg.shuflin\@protonmail.com])
#h(1em)
#icon-item("phone.svg")[510-332-6344]\
#icon-item("house.svg", link("https://greg.everydayimshuflin.com")[greg.everydayimshuflin.com])
#h(1em)
#icon-item("square-git.svg")[
#link("https://code.everydayimshuflin.com/greg")[code.everydayimshuflin.com/greg],
#link("https://github.com/neunenak")[github.com/neunenak]
]
]
}
Motivated, professional computer scientist with broad expertise in industry and open-source
software development:
- Programming language theory, type theory, strongly-typed functional programming languages. Haskell, Elm, Scala. I've been using Rust since before its 1.0 release in 2015.
- Linux system administration for production cloud environments, Docker containerization, AWS/Terraform, Nix/NixOS. I run a 4U VM server in a rack in my kitchen for personal projects.
- Full-stack backend development in multiple frameworks/languages, particularly Rust and Python ecosystems. Frontend web development in the modern Javascript/Typescript ecosystem.
- Network programming and troubleshooting, hardware and software packet processing, embedded Linux hardware bringup, writing clear and maintainable C and C++. Can solder if necessary.
#section-header([Professional Experience])
#job-entry([Knox Networks], [Senior Software Engineer], [Apr 2023 - Aug 2024])
- Rust and Nix developer for experimental digital payments infrastructure software stack. AWS/Terraform, microservice deployment model.
- Heavy use of asynchronous Rust microservices, gRPC, modern encryption primitives including cloud hardware signing modules and Rust/C integration.
- Upstreamed contributions to several open-source tools to facilitate development workflow.
#job-entry([Floating Point Group], [Software Engineer], [Dec 2021 - Dec 2022])
- Backend/devops developer for cryptocurrency trading platform. Python/AWS stack, Docker/Terraform/web3.py, some basic Solidity.
- Maintained integrations with multiple exchanges, blockchains, and crypto assets. Implemented direct customer interaction with Ethereum assets via Metamask.
- Designed and implemented subsystem for tracking continuous customer account balances for billing and balance reconciliation.
#job-entry([Kraken], [Software Engineer], [Mar 2021 - Sept 2021])
- Rust developer responsible for converting parts of a legacy PHP web API codebase to Rust/Actix for better performance, reliability, and maintainability.
#job-entry([Toolchain Labs], [Software Engineer], [Jun 2019 - Mar 2021])
- Primarily responsible for contributing features, bugfixes, and documentation to the #link("https://github.com/pantsbuild/pants/commits?author=gshuflin")[Pants] open-source build system.
- Updated old Python codebase to modern typed Python + Rust execution core for improved performance and maintainability. Frequent Rust/Python FFI and Python metaprogramming.
- Routinely collaborated with external contributors in a spirit of good open-source citizenship.
- Contributed to internal React/Typescript frontend work, Django/AWS backend work at small, early-stage startup when all hands needed on deck.
#job-entry([3D Robotics], [Senior Software Engineer], [Jun 2017 - Jun 2019])
- One of two members of the backend/devops team. Primarily responsible for feature development for API microservices in Scala (Akka/Couchbase NoSQL), and AWS provision of the same (Docker, Terraform).
- Built systems for processing GDAL geospatial data, efficiently running TensorFlow/OpenCV ML workflows on quadrotor drone photos.
- One time I grabbed a Windows laptop and set up a Visual C++ environment so I could apply a 10-line bugfix patch to some Autodesk software we depended on. I'm not ordinarily a Windows developer.
#job-entry([Cisco Meraki], [Member of Technical Staff], [May 2013 - Jun 2017])
- Primarily responsible for feature development and support of several different models of cloud-managed Ethernet switches and WiFi access points.
- Healthy mix of embedded Linux firmware development on networking hardware (C++) and full stack web development (Ruby on Rails/PostgreSQL + some Scala).
- Designed and built WiFi statistics monitoring widget with d3 and React, looked cool in demos and saved at least one deal.
- Regular troubleshooting and debugging of hardware and software in production network environments. The 802.1Q protocol identifier value 0x8100 is burned into my memory from seeing it in packet logs so often.
#section-header([Education])
#text(size: large, weight: "bold")[University of California, Berkeley] \
#text(fill: medium-gray)[Graduated Winter 2012 | B.A. in Computer Science, Linguistics, Japanese]
Relevant Coursework: Artificial Intelligence, Compilers, Operating Systems, Algorithms, Data
Structures, Computer Graphics
#section-header[Open-source Contributions]
#let just-url = "https://github.com/casey/just"
#let just-commits-url = "https://github.com/casey/just/commits?author=neunenak"
- I'm an occasional contributor to the #link(just-commits-url)[just] command runner (#link(just-url)[github.com/casey/just])
#let untrusted-url = "http://alexnisnevich.github.io/untrusted/"
- #link(untrusted-url)[Untrusted] (#link(untrusted-url)[github.com/AlexNisnevich/untrusted]) is an open-source browser-based roguelike game. Every level is unbeatable and requires the player to modify the Javascript code defining the level in order to progress.
This started out as a college hackathon project by me and a friend, that we decided to keep working on and release publicly. A surprisingly large number of people around the world have contacted us telling us they've enjoyed playing it, or found it to be a fun and useful pedagogical tool for teaching programming skills.