Compare commits

...

33 Commits

Author SHA1 Message Date
Greg Shuflin 5c0ff2c436 Update resume flake 2024-01-31 23:57:11 -08:00
Greg Shuflin 4663400a0c Add nostr public key 2023-11-07 21:39:06 -08:00
Greg Shuflin 95a562e70b Add note about leipzig-glossing 2023-10-04 02:10:22 -07:00
Greg Shuflin 9e83defe8a Update resume 2023-10-02 16:59:29 -07:00
Greg Shuflin ee56e7fb39 Hopefully fix flake.nix for resume 2023-08-03 01:48:19 -07:00
Greg Shuflin 851f599101 Fix flake.nix 2023-08-03 01:44:09 -07:00
Greg Shuflin 294a1efe73 Update resume flake again 2023-08-03 01:41:56 -07:00
Greg Shuflin db5b2306e1 Update flake 2023-07-25 19:17:26 -07:00
Greg Shuflin 1415f482a2 Update website text 2023-07-01 01:32:32 -07:00
Greg Shuflin 164b66bb05 Update resume 2023-07-01 01:31:00 -07:00
Greg Shuflin d2b99b10d3 Fix the way I was accessing the resume flake 2023-06-17 02:58:52 -07:00
Greg Shuflin ac011a40ef Use resume flake as input 2023-06-17 02:07:48 -07:00
Greg Shuflin 6588b1d220 Convert to nix flake 2023-06-17 01:11:27 -07:00
Greg Shuflin 95b48ed751 Resume filename has capital letter 2023-03-27 02:32:51 -07:00
Greg Shuflin 76cabc152d Add nix derivation 2023-03-27 02:17:02 -07:00
Greg Shuflin 023ab8508c Make site look good on mobile 2023-03-07 16:53:21 -08:00
Greg Shuflin 4049a811c8 Add favicon 2023-02-19 03:39:18 -08:00
Greg Shuflin d5fa32562d Change http -> https 2023-02-19 03:28:26 -08:00
Greg Shuflin e09508c315 Add a bit about parser-combinator library 2023-02-03 16:18:28 -08:00
Greg Shuflin 3c65349df2 Some layout tweaks 2023-01-27 14:58:18 -08:00
Greg Shuflin 263deab59d Add link 2022-11-24 02:23:24 -08:00
Greg Shuflin 32c5ce097b Tweak font css 2022-11-04 23:50:45 -07:00
Greg Shuflin 239892ba69 Change fonts; change verbiage a bit 2022-11-04 23:48:22 -07:00
Greg Shuflin 8675e429c1 Update verbiage on website 2022-11-04 23:43:13 -07:00
Greg Shuflin b14b3e59bd Make red link color brighter 2022-09-29 15:36:43 -07:00
Greg Shuflin edd7a8f1ba Add default to justfile 2022-07-29 16:03:54 -07:00
Greg Shuflin b84100cee1 Change location of resume folder 2022-04-15 12:08:56 -07:00
Greg Shuflin c68ca7209f Building resume from source now, don't need a copy here 2021-10-07 01:51:07 -07:00
Greg Shuflin c273f1cb37 Add command to auto-build resume 2021-10-06 15:57:55 -07:00
Greg Shuflin 5202f0124f Minor change 2021-10-06 15:32:06 -07:00
Greg Shuflin 82da355a9e Add code repos + Koka contribution 2021-09-23 02:42:39 -07:00
Greg Shuflin 49c5d746da Fix link to Untrusted 2021-09-23 02:27:05 -07:00
Greg Shuflin d58f32b537 Use variable in justfile 2021-09-23 02:26:58 -07:00
8 changed files with 310 additions and 34 deletions

23
default.nix Normal file
View File

@ -0,0 +1,23 @@
{ 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
'';
}

BIN
favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

126
flake.lock Normal file
View File

@ -0,0 +1,126 @@
{
"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
}

43
flake.nix Normal file
View File

@ -0,0 +1,43 @@
{
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,8 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<title>Greg Shuflin - Software Developer</title>
<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">
<link href="style.css" rel="stylesheet"/>
</head>
<body>
@ -11,10 +13,25 @@
<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>Download a copy of <a href="./resume/Greg Shuflin resume.pdf">my resume</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>
</div>
<div id='selfPhoto'>
@ -26,35 +43,81 @@
<p>I'm a software engineer with broad expertise across several different
disciplines of industry software development, particularly network
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.
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.
<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>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.
<h2>Open-source work</h2>
<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.
<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.
<p>I wrote a simple Rust command line program for <a href="https://github.com/neunenak/hilite">
<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">
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>.
<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>.
<!-- <li>I recently started porting the <a href="https://github.com/neunenak/sshfs">SSHFS</a> UNIX utility -->
<!-- from C to Rust. -->
</ul>
<h2>Some personal projects</h2>
<p>A few side projects I've worked on
@ -76,7 +139,7 @@
<a href='https://github.com/AlexNisnevich'>Alex Nisnevich</a> and several
other occasional contributors.
<ul>
<li><a href="http://alex.nisnevich.com/untrusted/">Untrusted</a>
<li><a href="https://alexnisnevich.github.io/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.
@ -93,12 +156,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='http://elm-lang.org/'>Elm</a>, a Haskell-like pure functional
<a href='https://elm-lang.org/'>Elm</a>, a Haskell-like pure functional
language that compiles to Javascript/HTML.
</li>
<li>
<a href='http://alexnisnevich.github.io/kalevala/'>Kalevala</a>
<a href='https://alexnisnevich.github.io/kalevala/'>Kalevala</a>
<a href='https://github.com/AlexNisnevich/kalevala' class='codeLink'>
(code)

View File

@ -1,4 +1,18 @@
default:
just --list
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/"
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

Binary file not shown.

View File

@ -1,29 +1,37 @@
@import url(http://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic);
@import url(https://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: Ubuntu;
font-family: "Fira Sans", sans-serif;
}
b {
@ -31,16 +39,15 @@ b {
}
a {
color:#ff3333;
color: #f74848;
font-weight:bolder;
}
a:visited {
color:#ff3333;
color:#f74848;
}
li {
font-family: Ubuntu;
margin-bottom:10px;
}
a.codeLink {