Compare commits

..

No commits in common. "master" and "8880ccb2f3dbd0a5c3453d2cc2e260b4f87d523f" have entirely different histories.

8 changed files with 34 additions and 310 deletions

View File

@ -1,23 +0,0 @@
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/5f9d1bb572e08ec432ae46c78581919d837a90f6.tar.gz") {}}:
let
resumePackage = pkgs.callPackage ../resume/default.nix {};
in pkgs.stdenv.mkDerivation {
name = "greg.everydayimshuflin.com-website";
src = ./.;
buildInputs = [resumePackage];
installPhase = ''
mkdir $out
cp index.html $out
cp style.css $out
cp self.jpg $out
cp favicon.png $out
mkdir $out/resume/
cp ${resumePackage}/*.pdf $out/resume
'';
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,126 +0,0 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1689068808,
"narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"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": 1689477032,
"narHash": "sha256-tcVslINoIDszgc5cES0Y1k0Lq1HHPla9PSALU+Y8jkY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "66c990850b878437510cc6096e6babce86de5dcb",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1686949509,
"narHash": "sha256-52OTWmIjf5t5VcoGhSjRsCWHlwSf/mPhY+0fpaiA1hs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "992ccdd822ecff0712ed0004f89df9e96f6a4963",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"resume-flake": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1706774078,
"narHash": "sha256-MxUwWWM+SWTcdb2H7kMfO97P4UMvDiqf2d0GM6vQlUY=",
"ref": "refs/heads/master",
"rev": "b733b58f5331dd3591eb0265d2bcfc13654b0041",
"revCount": 60,
"type": "git",
"url": "file:///home/greg/code/active/resume"
},
"original": {
"type": "git",
"url": "file:///home/greg/code/active/resume"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"resume-flake": "resume-flake"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"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
}

View File

@ -1,43 +0,0 @@
{
description = "Professional website";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
resume-flake.url = "/home/greg/code/active/resume";
};
outputs = { self, nixpkgs, flake-utils, resume-flake }:
{
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt;
} //
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
resume = resume-flake.packages.x86_64-linux.default;
in
{
packages.default = pkgs.stdenv.mkDerivation {
name = "greg.everydayimshuflin.com-website";
src = ./.;
installPhase = ''
mkdir -p $out/resume
cp index.html $out
cp style.css $out
cp self.jpg $out
cp favicon.png $out
cp ${resume}/*.pdf $out/resume
'';
};
}
);
}

View File

@ -1,10 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<title>Greg Shuflin - Software Developer</title>
<link rel="icon" type="image/x-icon" href="favicon.png">
<meta charset='utf-8'/>
<link href="style.css" rel="stylesheet"/>
</head>
<body>
@ -13,25 +11,10 @@
<div>
<h1>Greg Shuflin - Software Developer</h1>
<section class="important-links">
<p>Download a copy of <a href="./resume/Greg Shuflin Resume.pdf">my resume</a>.
<p>Contact me via <a class="emailLink" href="mailto:greg.shuflin+developerportfolio@protonmail.com">greg.shuflin@protonmail.com</a>
or <a href='https://www.linkedin.com/in/gregshuflin/'>LinkedIn</a>.
<p>My Nostr public key: <a href="nostr:npub1t4tqw45837fzs0589jqqna0s5wcmzstnsvw2vlrj7934w9l25sgsgnjcsl">
npub1t4tqw45837fzs0589jqqna0s5wcmzstnsvw2vlrj7934w9l25sgsgnjcsl
</a>
<p>See open-source code I've written:
<ul>
<li> <a href="https://github.com/gshuflin">@gshuflin</a> (professional GitHub account)
<li> <a href="https://github.com/neunenak">@neunenak</a> (personal GitHub account)
<li> <a href="https://code.everydayimshuflin.com/greg">code.everydayimshuflin.com</a> (self-hosted <a href="https://gitea.com/">Gitea</a> instance).
</ul>
</section>
<p>Download a copy of <a href="./resume/Greg Shuflin resume.pdf">my resume</a>.
</div>
<div id='selfPhoto'>
@ -43,81 +26,35 @@
<p>I'm a software engineer with broad expertise across several different
disciplines of industry software development, particularly network
programming, full-stack web development, all things cryptocurrency, and
modern cloud-focused devops/Unix systems administration. On the side, I
dabble in 3d graphics, functional programming/type theory, programming
language design, and mucking about with microcontrollers.
programming, full-stack web development, and modern cloud-focused devops/Unix
systems administration. I dabble in 3d graphics, functional programming/type
theory, programming language design, and mucking about with microcontrollers
on the side, and one or another of these skillsets has come in handy before.
<p>I've shipped code in <strong>Rust</strong>, <strong>Python</strong>,
<strong>C/C++</strong>, <strong>Ruby</strong> (on Rails),
<strong>Scala</strong>, <strong>Elm</strong>, and <strong>Haskell</strong>.
My educational credentials are B.A.s in <strong>Linguistics</strong>,
<strong>Computer Science</strong> and <strong>Japanese</strong> from the
<strong>University of California, Berkeley</strong>. My language of choice
for most sorts of software project is Rust these days, but there's a whole
wide world out there of interesting developments in programming language
research - I'd love to write, say, <a
href="https://www.idris-lang.org/">Idris</a> for a living one
day.
<p>I've shipped code in Rust, Python, C, C++, Ruby on Rails, Scala, Elm, and
Haskell. My educational credentials are a BA in Linguistics, Computer
Science and Japanese from the University of California, Berkeley. I used to
have a line here that said "Also if you're hiring for a Rust position I'd
love to talk to you.", but since I now have a position where I spend a lot
of my time writing Rust, I suppose it worked.
<p>My passion as a software developer is software correctness - I think the
industry as a whole places too little emphasis on writing software that does
the right thing from the beginning. I want to use the best tools and
practices available to write software that is easily maintainable and
minimizes bugs from the start of a project onwards.
<h2>Open-source work</h2>
<p>As part of my work at Toolchain Labs, I
<a href="https://github.com/pantsbuild/pants/commits?author=gshuflin">contribute</a>
to the <a href="https://www.pantsbuild.org/">Pants</a> build system. Much of my work
on this project has involved porting the codebase from a legacy Python execution engine
to a modern and more performant Rust execution engine.
<h2>Open-source contributions</h2>
<p>My professional Github profile is <a href="https://github.com/gshuflin">@gshuflin</a>. I have
used <a href="https://github.com/neunenak">@neunenak</a> as a personal Github profile in the past, and still use it
for contributing to projects that use Github as their main git repository host. I've moved most of my personal code
to a self-hosted <a href="https://gitea.com">Gitea</a> instance at <a href="https://gitea.everydayimshuflin.com/greg">gitea.everydayimshuflin.com</a>, to
reduce my dependency on cloud services I have no control over.
<ul>
<li>As part of my work at Toolchain Labs, I was a <a
href="https://github.com/pantsbuild/pants/commits?author=gshuflin">contributor</a>
to the <a href="https://www.pantsbuild.org/">Pants</a> build system.
Much of my work on this project involved porting the codebase from a
legacy Python execution engine to a modern and more performant Rust
execution engine
<li>I maintain a <a href="https://github.com/typst/typst">typst</a> package
<a href="https://code.everydayimshuflin.com/greg/typst-lepizig-glossing">leipzig-glossing</a>
for typesetting linguistic interlinear glosses according to the Leipzig Glossing
Rules.
<li>I'm a user of and <a
href="https://github.com/casey/just/commits?author=neunenak">occasional
contributor to</a> the <a href="https://github.com/casey/just">just</a>
command runner, written in Rust.
<li>A wrote a quick and dirty <a href="https://gitea.everydayimshuflin.com/greg/rust-parser-combinator">parser combinator
library</a> in Rust, mostly as a proof of concept. I'd like to see if I can incorporate some of the
ideas from the paper <a href="https://research.rug.nl/en/publications/efficient-parsing-with-parser-combinators">
Efficient parsing with parser combinators</a> to make it faster.
<li>I contributed a basic <a
href="https://github.com/koka-lang/koka/pull/193/commits/ab290a41a4249450d9934a4c23d2b8ed7e98b448">Vim
plugin</a> for the <a
href="https://koka-lang.github.io/koka/doc/book.html">Koka</a> language,
an research programming language experimenting with the very neat idea of
algebraic effect systems.
<li>I wrote a simple Rust command line program for <a href="https://github.com/neunenak/hilite">
<p>I wrote a simple Rust command line program for <a href="https://github.com/neunenak/hilite">
for highlighting stderr console output</a>, inspired by Mike Schiraldi's hilite utility, which
I used at Meraki for making the actual errors more obvious in lengthy C++ compiler output. It
is published on <a href="https://crates.io/crates/hilite">crates.io</a>.
<!-- <li>I recently started porting the <a href="https://github.com/neunenak/sshfs">SSHFS</a> UNIX utility -->
<!-- from C to Rust. -->
</ul>
<p>My professional Github profile is <a href="https://github.com/gshuflin">@gshuflin</a>. I have
used <a href="https://github.com/neunenak">@neunenak</a> as a personal Github profile in the past,
and am in the process of moving my personal code to a <a href="https://gitea.everydayimshuflin.com/greg">self-hosted Gitea
instance</a>.
<h2>Some personal projects</h2>
<p>A few side projects I've worked on
@ -139,7 +76,7 @@
<a href='https://github.com/AlexNisnevich'>Alex Nisnevich</a> and several
other occasional contributors.
<ul>
<li><a href="https://alexnisnevich.github.io/untrusted/">Untrusted</a>
<li><a href="http://alex.nisnevich.com/untrusted/">Untrusted</a>
<a href="https://github.com/AlexNisnevich/untrusted" class='codeLink'>(code)</a>
- a Javascript roguelike. Every level is deliberately unbeatable, and
the player must edit the source code of the level in order to progress.
@ -156,12 +93,12 @@
where the player takes on the role of a corrupt public transit bureaucrat
who is paid-off by an evil ride-sharing corporation, and tasked with
making the public bus system worse. Written in
<a href='https://elm-lang.org/'>Elm</a>, a Haskell-like pure functional
<a href='http://elm-lang.org/'>Elm</a>, a Haskell-like pure functional
language that compiles to Javascript/HTML.
</li>
<li>
<a href='https://alexnisnevich.github.io/kalevala/'>Kalevala</a>
<a href='http://alexnisnevich.github.io/kalevala/'>Kalevala</a>
<a href='https://github.com/AlexNisnevich/kalevala' class='codeLink'>
(code)

View File

@ -1,18 +1,4 @@
default:
just --list
server := "realname-server.everydayimshuflin.com"
resume_dir := "/home/greg/code/active/resume"
resume_filename := "Greg Shuflin resume.pdf"
update-resume:
nix flake lock --update-input resume-flake
deploy-html:
scp index.html favicon.png style.css self.jpg greg@{{server}}:"/srv/greg.everydayimshuflin.com/"
deploy-resume-pdf:
just {{resume_dir}}/build_resume
scp -r "{{resume_dir}}/{{resume_filename}}" greg@{{server}}:"/srv/greg.everydayimshuflin.com/resume"
deploy: deploy-html deploy-resume-pdf
deploy:
scp index.html style.css self.jpg greg@realname.everydayimshuflin.com:"/srv/greg.everydayimshuflin.com/"
scp -r resume greg@realname.everydayimshuflin.com:"/srv/greg.everydayimshuflin.com/"

Binary file not shown.

View File

@ -1,37 +1,29 @@
@import url(https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic);
@import url(http://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic);
h1 {
font-family: Ubuntu;
}
@media (min-width: 600px) {
header {
display: flex;
justify-content: space-between;
}
}
#selfPhoto {
margin-top: 20px;
margin-right: 30px;
}
@media (min-width: 80rem) {
#main {
margin-left:auto;
margin-right:auto;
width:960px;
}
}
section.important-links {
font-size: large;
}
body {
background-color:#2B2B4D;
color: white;
font-family: "Fira Sans", sans-serif;
font-family: Ubuntu;
}
b {
@ -39,15 +31,16 @@ b {
}
a {
color: #f74848;
color:#ff3333;
font-weight:bolder;
}
a:visited {
color:#f74848;
color:#ff3333;
}
li {
font-family: Ubuntu;
margin-bottom:10px;
}
a.codeLink {