1
0
Fork 0

Add experience data.

main
Mari 5 years ago
parent 57de72c3d5
commit ea5d7e6367
  1. 22
      .eleventy.js
  2. 350
      _data/experience.yaml
  3. 8
      _includes/assets/css/main.css
  4. 7
      _includes/assets/css/print.css
  5. 10
      _includes/assets/css/resizing.css
  6. 6
      index.md

@ -44,16 +44,16 @@ module.exports = function(eleventyConfig) {
// negated IDs are lowlights and others are highlights // negated IDs are lowlights and others are highlights
// * an object, in which case its keys are used as an array (as above)m // * an object, in which case its keys are used as an array (as above)m
// regardless of their values // regardless of their values
// highlightsFirst is an optional boolean; if true, highlights are listed
// first, then lowlights, though order is preserved within those groups. If
// false or not specified, order is the same as the input.
// Returns an array of objects, each of which has a one-to-one correspondence // Returns an array of objects, each of which has a one-to-one correspondence
// with an input item, using that object as its prototype and adding a // with an input item, using that object as its prototype and adding a
// boolean "highlight" property. Order is preserved within highlights and // boolean "highlight" property.
// lowlights, but highlights are first in the list. function identifyHighlights(itemList, filter, highlightsFirst) {
function identifyHighlights(itemList, filter) {
if (!Array.isArray(itemList)) { if (!Array.isArray(itemList)) {
return itemList; return itemList;
} }
const highlights = [];
const lowlights = [];
if (!Array.isArray(filter)) { if (!Array.isArray(filter)) {
if (filter === true || filter === "all") { if (filter === true || filter === "all") {
filter = ["all"] filter = ["all"]
@ -63,16 +63,20 @@ module.exports = function(eleventyConfig) {
filter = []; filter = [];
} }
} }
itemList.forEach(function(item) { const result = itemList.map(function(item) {
if ((filter.includes("all") if ((filter.includes("all")
&& !filter.includes("-" + item.id)) && !filter.includes("-" + item.id))
|| filter.includes(item.id)) { || filter.includes(item.id)) {
highlights.push(inheritAndAdd(item, {highlight: true})); return inheritAndAdd(item, {highlight: true});
} else { } else {
lowlights.push(inheritAndAdd(item, {highlight: false})); return inheritAndAdd(item, {highlight: false});
} }
}); });
return highlights.concat(lowlights); if (highlightsFirst) {
return result.filter(function(item) { return item.highlight }).concat(result.filter(function(item) { return !item.highlight }));
} else {
return result;
}
} }
eleventyConfig.addFilter("identifyHighlights", identifyHighlights); eleventyConfig.addFilter("identifyHighlights", identifyHighlights);

@ -9,19 +9,79 @@ roles:
# started getting to work on reviewing configurability # started getting to work on reviewing configurability
# changes and getting up to speed on this team # changes and getting up to speed on this team
endDate: 2019-10-04 # dead on, this was my last day at Google endDate: 2019-10-04 # dead on, this was my last day at Google
shortDescription: | shortDescription: >
Optimizations and flexibility for multiplatform builds for Bazel projects. Optimizations and flexibility for multiplatform builds for Bazel projects.
description: | description: >
Let's see here. Primary expert for _configuration trimming_, a major overhaul of Bazel's
What did I do on Configurability? multiplatform support to save time and memory for users by collapsing
Besides _endless_ amounts of **trimming**? equivalent nodes in the build graph.
achievements: achievements:
- id: trimming - id: feature-flags
description: | description: >
I did _endless_ amounts of **trimming**. Designed and built a feature flag system for Bazel, used by ~50
- id: other Android teams within Google, with more asking to be enabled weekly.
description: | - id: whitelisting
I did other stuff, **too**. description: >
Designed and built a mechanism for controlling rollouts of Bazel
features, which was quickly adopted by other subteams within Bazel.
- id: attribute-refactor
description: >
Refactored Bazel's attribute support, prompting a code owner to
describe the result as "so much better it hurts."
- id: test-trimming
description: >
Sped up developer build/test switching, saving 2min+ reanalysis on
each switch, adding up to an hour or more of wait time saved per
engineer over a day's builds.
- id: tagged-trimming
description: >
Implemented manual trimming to get Android developers
reduced memory use immediately, saving multiple GB of memory
per build and avoiding OOM conditions.
- id: tagged-trimming-rollout
description: >
Built a fully automated Python-based migration tool for and consulted
with users to roll out manual trimming, saving hours of tedious manual
corrections per project.
- id: auto-trimming
description: >
Researched the automatic trimming problem and wrote over 60
pages of design documents proving
[the viability of trimming and the tradeoffs of different options](https://docs.google.com/document/d/1MHq-PKTEhTj7uI185Lm7HSFJK0xSssaY3ZTz7Djq-6A/edit).
- id: trimming-prototype
description: >
Built a TypeScript/Angular2-based prototype to gather data on the
tradeoffs of different trimming algorithms with real builds and
integrated a prototype into Bazel.
- id: bazel-u
description: >
Ran multiple talks for the Bazel team about trimming and feature
flags, consulted with individual developers across teams, and received
a peer bonus for my expertise.
- id: trimming-metaphors
description: >
Wrote an easy-to-read
[introduction to the complexities of trimming](https://docs.google.com/document/d/1J6yvbe0Rt-KLGzVtW9Pt0YjPB8R_tQQ7zy8jIjay7l0/edit)
and received a peer bonus describing it as "one of the best docs I've
read at Google."
- id: bazelcon
description: >
Solicited experts for BazelCon 2018, coordinated rooms day-of, and
made office hours work despite last-minute loss of venue. Received a
peer bonus from the head organizer.
- id: personal-postmortem
description: >
Wrote, gave a talk on, and received a peer bonus for a document
speaking frankly about emotional safety on the team.
- id: team-culture
description: >
Proposed improvements to team culture, ran meetings on the subject,
consulted with management and gathered feedback from team members.
- id: kotlin
description: >
Consulted with the Kotlin team at Google about the possibility of
using Kotlin within Bazel.
- id: bazel-release - id: bazel-release
image: jobs/google/bazel-old.png image: jobs/google/bazel-old.png
name: Software Engineer in Test # II name: Software Engineer in Test # II
@ -32,15 +92,52 @@ roles:
# Q3 2014 - but it hadn't gotten cold yet # Q3 2014 - but it hadn't gotten cold yet
endDate: 2017-06-15 # did I truly ever stop working on the release process? endDate: 2017-06-15 # did I truly ever stop working on the release process?
# however, this is around when it stopped being my job # however, this is around when it stopped being my job
description: "The long version is, I did so much freaking junk on this thing." shortDescription: >
shortDescription: "The short version is, a lot." Migrations, stability, and features for the internal release process of
Bazel (a.k.a. Blaze).
description: >
Local expert on Google-internal release and testing tools, primary expert
on the release process for the Google-internal version of Bazel (a.k.a.
Blaze).
achievements: achievements:
- id: testability
description: >
Updated old release Bash scripts to allow for testing of changes
without risking the stability of the release.
- id: autorerun
description: >
Automated the rerunning of all tests across Google's continuous
builds, saving sheriffs the time and hassle of manually checking the
results and starting reruns.
- id: documentation
description: >
Thoroughly documented the existing release process and all changes
being made to it and presented this information at a team summit,
received a peer bonus.
- id: sheriff
description: >
Consulted with sheriffs and acted as a go-to backup sheriff during
especially difficult situations. Received 4 peer bonuses for different
key moments of help.
- id: redesign
description: >
Designed a new version of the release process using more modern
infrastructure, avoiding version desync problems and allowing better
testing.
- id: tooling
description: >
Automated release of sheriff tooling to developer workstations,
preventing use of out-of-date utilities and making diagnostics during
release significantly easier.
- id: release
description: >
Fixed, documented, and added checks for a rarely used process,
avoiding regular misunderstandings about how the process works.
- id: mentor - id: mentor
description: | description: >
I taught Florian the secrets of releases. Mentored a new team member in Python and internal release tools,
- id: teach guided him through implementing the redesign and becoming the new
description: | expert. Received a peer bonus.
I taught everyone else how to be sheriff.
- id: bazel-android - id: bazel-android
image: jobs/google/bazel-old.png image: jobs/google/bazel-old.png
name: Software Engineer # II name: Software Engineer # II
@ -51,7 +148,28 @@ roles:
# configurability full-time, since before that I was # configurability full-time, since before that I was
# doing configurability as a side job and Android as a # doing configurability as a side job and Android as a
# primary job # primary job
description: null description: >
Built features relating to compiling Android apps within Bazel.
achievements:
- id: aidl
description: >
Fixed a long-standing bug in Bazel's AIDL support, correcting
incorrect builds, and migrated all Google Android projects, saving
teams time and bugs.
- id: native
description: >
Upgraded Bazel's Android native code support to allow for automatic
compilation within Bazel, avoiding the need for users to implement it
in a separate system.
- id: jack
description: >
Added support for the Jack and Jill compilers to Bazel, allowing the
Jack team to instantly test their work across the real projects within
Google.
- id: snapchat
description: >
Consulted with a major App Engine client and helped their developers
get set up to use Bazel for their Android app. Received a spot bonus.
- id: google-tooling - id: google-tooling
image: jobs/google/google.png image: jobs/google/google.png
name: Software Engineer in Test # II name: Software Engineer in Test # II
@ -64,7 +182,33 @@ roles:
# the project around midway through Q1 # the project around midway through Q1
endDate: 2017-12-18 # dead on, this is the day I got a peer bonus for endDate: 2017-12-18 # dead on, this is the day I got a peer bonus for
# helping with turning this down # helping with turning this down
description: null shortDescription: >
Built and maintained parts of a test-account creation service.
description: >
Built and maintained parts of an internal test-account creation service
which was used by several teams throughout Google for easy isolated
integration testing. At its peak, it created and deleted hundreds of
accounts every minute.
achievements:
- id: wallet-profile
description: >
Installed a new account template on the account creation service,
allowing users to create Google accounts which already had Wallet
accounts set up.
- id: dartui
description: >
Rewrote the existing hacky Javascript-and-jQuery UI for an internal
user in clean, well-tested Dart, allowing for fully automated
push-on-green releases.
- id: maintenance
description: >
Investigated bug reports, coordinated with other teams and remained
on-call to keep users' tests running. Received three peer bonuses and
a spot bonus.
- id: shutdown
description: >
Received a peer bonus for assisting with the shutdown and migration to
a newer service owned by the account team.
- id: wallet-testing - id: wallet-testing
image: jobs/google/wallet.png image: jobs/google/wallet.png
name: Software Engineer in Test # II name: Software Engineer in Test # II
@ -73,13 +217,47 @@ roles:
startDate: 2011-07-18 # dead on, this was my start date startDate: 2011-07-18 # dead on, this was my start date
endDate: 2013-09-15 # same as with the Bazel Release Process start date, endDate: 2013-09-15 # same as with the Bazel Release Process start date,
# since they're the same day # since they're the same day
description: null shortDescription: >
Built and maintained test infrastructure for the Wallet web frontend.
description: >
Embedded test infrastructure support for the Wallet web frontend team;
worked with related teams and fellow software engineers in test to make
sure developers could quickly and easily write and run tests.
achievements:
- id: page-objects
description: >
Built a framework based on WebDriver PageObjects allowing developers
to write tests as if giving instructions, making tests more stable,
less buggy, and shorter.
- id: integration-suite
description: >
Built and optimized a full-stack in-memory integration test, cutting
time-to-results 75% and allowing integration testing to run in the
continuous build for instant feedback.
- id: smoke-tests
description: >
Wrote an adapter allowing tests written for in-memory to be used on
the staging and production sites for fully automatic release
testing, halving the build cop checklist.
- id: fun-events
description: >
Organized fun events and wrote fun recruitment emails for the team,
keeping spirits high and the team close.
- id: guice
description: >
Received a peer bonus for teaching teammates how to work with Guice
wiring and the innards of the integration test infrastructure.
- id: agora-games - id: agora-games
image: jobs/agora.gif image: jobs/agora.gif
name: Software Intern name: Software Intern
company: Agora Games company: Agora Games
startDate: 2010-11-04 # or thereabouts, this is when I was interviewing startDate: 2010-11-04 # or thereabouts, this is when I was interviewing
endDate: 2010-12-04 # as recorded in a livejournal comment... endDate: 2010-12-04 # as recorded in a livejournal comment...
shortDescription: >
Wrote browser tests for Rails-based web services.
description: >
Wrote Cucumber and Selenium-based browser tests for Rails-based web
services.
- id: star-analytics - id: star-analytics
image: jobs/staranalytics.png image: jobs/staranalytics.png
name: Software Intern name: Software Intern
@ -87,72 +265,76 @@ roles:
company: Star Analytics company: Star Analytics
startDate: 2010-04-15 # very approximate, got my IP phone/laptop around then startDate: 2010-04-15 # very approximate, got my IP phone/laptop around then
endDate: 2011-05-15 # ish, I stopped this around when I left school endDate: 2011-05-15 # ish, I stopped this around when I left school
shortDescription: >
Wrote a C#-based UI for the Star Analytics task automation service.
description: >
Developed a C#-based user-friendly GUI for building one's own custom tasks
and processes, allowing even those without coding knowledge to use this
feature.
- id: misc - id: misc
image: jobs/blocks.svg image: jobs/blocks.svg
name: Hobbyist name: Hobbyist
team: Other (personal, school, side jobs etc.) Projects team: Other (personal, school, side jobs etc.) Projects
startDate: null startDate: null
endDate: null endDate: null
achievements:
# ## Personal projects - id: blog
# * Personal blog website using Eleventy + Netlify description: >
# * Anki plugins for Japanese study Built a [personal blog website](https://blog.reya.zone) using Eleventy
# * Personal Docker server for mail and nextcloud and Netlify, and hand-coded the theme and filters etc. in
# * Discord bots HTML, JS, and CSS. (Not unlike this resume!)
# * Assortment of handmade Minecraft plugins, self-run server - id: anki
# * PDF page-identification and splitting C# utility for helping at the church description: >
Built Python [Anki plugins](https://github.com/programmablereya/wani-anki)
# ## RPI projects to ease my Japanese study, synchronizing learned kanji from WaniKani
# * Python OpenGL-based game and enabling one-click swapping of fields in downloaded cards.
# * Rails based task management project - id: discord
description: >
# ## Regis projects Built an extensible Kotlin-based Discord chatbot for playing Codenames
# * C SDL-based game with friends.
# * Java based student chat program - id: minecraft
description: >
# ## Google projects (tech) Built several Minecraft plugins, both in Java and in Kotlin, for use
# * Web wallet testing on my self-hosted server.
# * account making service - id: church
# * Bazel release process fixing and documentation description: >
# * Bazel Android support: native code, Jack, resource-split APKs, aidl tooling fixes Built a C#-based tool for splitting out the pages of a PDF which
# * dynamic configs on aspects as part of Jack contain the IDs from a list, saving the church hours of manual work
# * Bazel release process overhaul design printing only those pages.
# * Bazel Android support: feature flags - id: rental
# * "This is so much better it hurts." - from attribute code refactoring as part of this description: >
# * Whitelisting mechanism as part of this, used by another developer for another feature Built Python/PyGTK/SQLite based rental property payment tracking
# * Bazel configurability: manual trimming design + rollout software and migrated the old Visual Basic version to it, permitting
# * Test trimming (saved 5min+ recompile on every test flag change) it to keep functioning after the old computer died.
# * Tagged trimming (design + migration tool + rollout - for example, a project with 5GB memory use that had ballooned to 10+ GB and OOM-ing could drop down to a very buildable 8GB) - id: dice-roller
# * Bazel configurability: automatic trimming research description: >
# * 2 years, ~60 pages of design documents, 2 different prototypes Built a Javascript-based dice-rolling chatbot for MSN+, enabling my
## Google projects (non-tech) friends and I to play D&D over the internet easily.
# * Helped organize team fun events on Whisky - id: flagship-tasks
# * Organizer for BazelCon 2018 description: >
# * Worked to improve configurability team culture Built a [task management project](https://github.com/thoughtbeam/flagship_tasks)
in Ruby on Rails for an engineering capstone project at RPI.
## Peer bonuses: - id: assignments
# * Personal postmortem for burnout description: >
# * account creation tool (x3) + shutdown Built an assignment tracker in Python/PyGTK for managing work at
# * Guice wiring and integration testing support RPI.
# * Sheriffing (x3) - id: extreme-pi-2
# * Diagnosed & wrote tool to fix bug in test, reenabling releases description: >
# * BazelCon 2018 office hours, copy editing, logistics Built a Python/PyOpenGL based video game for a Graphics class project
# * Really easy to understand configuration trimming document ("one of the best docs I've read at Google") at RPI.
# * Big release process documentation - id: extreme-pi
# * Helped teach other Bazel developers about Bazel configurability - multiple Bazel U sessions description: >
# * Helped others understand Bazel feature flags Built an SDL game in raw C for a capstone project in high school.
# * Release process migration design help - id: encrypted-chat
# * Python and release process teaching description: >
# * --legacy_android_support no-oping Built an obfuscated chat program in Python allowing communication
# * release process tools moved into binfs and hashbang between students over the school networks in high school.
# ## Spot bonuses: - id: vectors
# * Consulted with Snapchat description: >
# * Gaiamaker Built a TI-BASIC based vector calculation program which was used by my
entire high school class to make vector calculations easier in
# ## Misc. perf references Physics class.
# * Engineering conscientiousness (doing the right thing) - id: java-chat
# * Energetic and invested description: >
Built a Java-based chat program allowing communication between
# Star Analytics C# frontend students over the school networks in high school.
# Agora Games: Ruby web testing

@ -266,11 +266,11 @@ header rt {
.role { .role {
display: flex; display: flex;
flex-flow: column; flex-flow: column;
justify-content: center; justify-content: flex-start;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
position: relative; position: relative;
padding-left: 3.1rem; padding-left: 3.3rem;
min-height: 3rem; min-height: 3.3rem;
} }
.role .firstline { .role .firstline {
@ -295,7 +295,7 @@ header rt {
.role .icon { .role .icon {
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0.3rem;
width: 3rem; width: 3rem;
height: 3rem; height: 3rem;
} }

@ -1,4 +1,11 @@
@media only print { @media only print {
a {
text-decoration: inherit;
font-style: inherit;
font-weight: inherit;
color: inherit;
}
footer, .buttons, .show-all, .show-highlights, #print, .highlight-icon { footer, .buttons, .show-all, .show-highlights, #print, .highlight-icon {
display: none; display: none;
} }

@ -36,23 +36,23 @@
} }
/* Large desktop only - full size columns and empty space */ /* Large desktop only - full size columns and empty space */
@media only screen and (min-width: 1120px) { @media only screen and (min-width: 1307px) {
main, footer { main, footer {
width: 1120px; width: 1307px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
} }
@media only screen and (min-width: 1100px) { @media only screen and (min-width: 1307px) {
:root { :root {
font-size: 20px; font-size: 20px;
} }
} }
@media only screen and (min-width: 900px) and (max-width:1099px) { @media only screen and (min-width: 900px) and (max-width:1307px) {
:root { :root {
font-size: calc(13px + (100vw - 900px) * 7 / 200) font-size: calc(13px + (100vw - 900px) * 7 / 407)
} }
} }

@ -9,8 +9,8 @@ filter:
awards: all awards: all
--- ---
Computers are my life. Since receiving a my-first-QBasic book from my computer teacher in first grade, I've been fascinated by everything programming - the fast-growing capabilities of the web, the immense power of distributed databases, cross-process synchronization in parallel programming, low-level memory management, high-level programming techniques and methods of approaching problems... Computers are my life. Since receiving a my-first-QBasic book from my computer teacher in first grade, I've been fascinated by everything programming - the fast-growing capabilities of the web, the immense power of distributed databases, cross-process synchronization in parallel programming, low-level memory management, and high-level programming techniques and methods of approaching problems, to give a few examples.
I am constantly picking up new languages and frameworks to satisfy my curiosity - the list on this page is testament to that! - and recently that tendency has extended to human languages, as well, with Japanese. So it is that as I decide to try living away from my birthplace of New York, I'm moving to Tokyo to further my interest in Japanese and in Japan. I am constantly picking up new languages and frameworks to satisfy my curiosity - the list on this page is a testament to that! - and recently, that tendency has extended to human languages, as well, with Japanese. So it is that as I decide to try living away from my birthplace of New York, I'm moving to Tokyo to further my interest in Japanese and in Japan.
I'm looking to continue my software engineering journey while I'm there. I'd like to work on interesting, meaningful problems in a close-knit, team-based environment. If your company might be that environment, give me an email or a call! I'm looking to continue my software engineering journey while I'm there. I want to work on interesting, meaningful problems in a close-knit, team-based environment. If your company might be that environment, give me an email or a call!

Loading…
Cancel
Save