Compare commits
217 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
a0b60021cf | |
|
|
8487f1577e | |
|
|
da21248adb | |
|
|
28dd611b7b | |
|
|
7f7256fe07 | |
|
|
a79740c871 | |
|
|
d644cf7be1 | |
|
|
0bb733ac90 | |
|
|
53ac3de436 | |
|
|
e11eeddb6a | |
|
|
c5e75cb2fb | |
|
|
b00b568fa0 | |
|
|
ec063d080c | |
|
|
c19a6741c1 | |
|
|
8afa0a8be4 | |
|
|
dcd4d2676b | |
|
|
fa86ad236a | |
|
|
8e37db681c | |
|
|
7d0489efc1 | |
|
|
c106e71369 | |
|
|
a3a24a1e62 | |
|
|
9e28fc0499 | |
|
|
6bdeb5c2d4 | |
|
|
066949aec5 | |
|
|
fddd8c380e | |
|
|
bfcb62f3fd | |
|
|
ac1a48261c | |
|
|
69ee836205 | |
|
|
a55ac869b7 | |
|
|
2f8590e3e2 | |
|
|
746b4c2c24 | |
|
|
d7b07f8317 | |
|
|
7676e1f443 | |
|
|
dec8416915 | |
|
|
72a7f7e91e | |
|
|
c739041642 | |
|
|
85d7bbe0c2 | |
|
|
29b2dce736 | |
|
|
91799b978a | |
|
|
abf22cc58b | |
|
|
7bc307d28c | |
|
|
1d25cbcfb3 | |
|
|
7ca8071baf | |
|
|
8e119c59e0 | |
|
|
245a3a739b | |
|
|
6cbf36a7cf | |
|
|
5aa0f0ebab | |
|
|
e63c4006db | |
|
|
c1370cf6b1 | |
|
|
9006e9ba22 | |
|
|
b3506dc6aa | |
|
|
9ac8b7e870 | |
|
|
3083378712 | |
|
|
76def1218c | |
|
|
12d21ba0f4 | |
|
|
df81c6b315 | |
|
|
3062630e1d | |
|
|
52b7176c69 | |
|
|
7936c53bdb | |
|
|
0d36f5b7da | |
|
|
62885e3b63 | |
|
|
558dcaecc3 | |
|
|
ec1ed7fb88 | |
|
|
820dda9d5d | |
|
|
fc2ac7ef39 | |
|
|
9fc2142295 | |
|
|
8842ccf514 | |
|
|
565f9e8c8c | |
|
|
e861816019 | |
|
|
4751c09772 | |
|
|
9ce8ab9722 | |
|
|
3cbe621dce | |
|
|
65caa9527f | |
|
|
9a1ce92160 | |
|
|
c275bf5f4e | |
|
|
4223a5767d | |
|
|
422f7205d2 | |
|
|
de42646ae5 | |
|
|
c543a78033 | |
|
|
50f5741041 | |
|
|
0c17821874 | |
|
|
7079ad4b1d | |
|
|
98c972cc90 | |
|
|
2b19a1d2f8 | |
|
|
86e5716d33 | |
|
|
4a96954c2d | |
|
|
9cfaae18d7 | |
|
|
b128e9d6f5 | |
|
|
173cd383e4 | |
|
|
93643d0881 | |
|
|
c5bc7e291d | |
|
|
f30e3fbe71 | |
|
|
d7c2207eca | |
|
|
f62ab35fa8 | |
|
|
a2a6cccd93 | |
|
|
523c4fd9a6 | |
|
|
fb68fce267 | |
|
|
95c4253e26 | |
|
|
8e246d07be | |
|
|
76ea44a124 | |
|
|
a3f7753a71 | |
|
|
e23d61a4f0 | |
|
|
155bba7b5a | |
|
|
143ae9ba04 | |
|
|
0512028c40 | |
|
|
78e6af29ed | |
|
|
fce00bad38 | |
|
|
be5671616f | |
|
|
e8bd522a52 | |
|
|
30fdbe31f9 | |
|
|
6c9d11f035 | |
|
|
47c11b8fba | |
|
|
de9d53f494 | |
|
|
712881ad02 | |
|
|
41cee6f459 | |
|
|
e3e14d6ed0 | |
|
|
8ae43a6356 | |
|
|
9068fa6647 | |
|
|
c72098a66c | |
|
|
3d2c4ef882 | |
|
|
ddf2af808c | |
|
|
a66222e143 | |
|
|
5570e6edbe | |
|
|
5b3106f981 | |
|
|
5f51d1564e | |
|
|
e295b06efe | |
|
|
143dabb7d9 | |
|
|
cc81b47e49 | |
|
|
e7ed323f2c | |
|
|
507f3436c7 | |
|
|
077a03c35e | |
|
|
a504c357c5 | |
|
|
c24ab809a5 | |
|
|
76aa1a20cf | |
|
|
d4560d05fd | |
|
|
96af96b22b | |
|
|
7864a95eb1 | |
|
|
a8a0cbad96 | |
|
|
9a320d1a43 | |
|
|
2fcd38ef01 | |
|
|
10f199a93d | |
|
|
97e5f3150f | |
|
|
0735f99f65 | |
|
|
9c3c235073 | |
|
|
afa43aafdf | |
|
|
6767833e8e | |
|
|
09608c5938 | |
|
|
8184467dc2 | |
|
|
edaf7b7efd | |
|
|
16966c4753 | |
|
|
ab38461d16 | |
|
|
83a00d5034 | |
|
|
f238e32e1f | |
|
|
dff3bf2179 | |
|
|
30baf3ffef | |
|
|
a925580e89 | |
|
|
8b2e8e39fd | |
|
|
d94ddad195 | |
|
|
204aee596d | |
|
|
28cf47111f | |
|
|
046903a7f5 | |
|
|
c1224ff604 | |
|
|
4a2e8dc48b | |
|
|
949f968245 | |
|
|
9cc98adfae | |
|
|
af2db988fb | |
|
|
aba83156ee | |
|
|
ae6ed10323 | |
|
|
0c06d17407 | |
|
|
c6fc22b178 | |
|
|
d1278dc5b7 | |
|
|
e6c1d153b7 | |
|
|
88c4caf3a0 | |
|
|
0e640d0219 | |
|
|
7ee12afe20 | |
|
|
2ef773b4fe | |
|
|
ded72f67ed | |
|
|
d478599217 | |
|
|
cd7251ee45 | |
|
|
98fd145856 | |
|
|
4adaa14452 | |
|
|
1e5b251590 | |
|
|
e97fcc2d8c | |
|
|
8b1d395f19 | |
|
|
c714db922b | |
|
|
6e98d349e8 | |
|
|
196bcac6dd | |
|
|
abd6e369da | |
|
|
eda630dcde | |
|
|
23b6271f36 | |
|
|
f0c9b1c3a4 | |
|
|
dadd94778b | |
|
|
36b285f706 | |
|
|
99b97efd80 | |
|
|
7deca1b9c9 | |
|
|
49314cc0c5 | |
|
|
d69c76f85b | |
|
|
1d258f18ed | |
|
|
38390a780c | |
|
|
38470725a6 | |
|
|
aa7795215e | |
|
|
057251fecc | |
|
|
204670a626 | |
|
|
476bc0ea10 | |
|
|
7538839ade | |
|
|
91d7b82988 | |
|
|
56d847ea1e | |
|
|
98e1f7c8cb | |
|
|
702dea753e | |
|
|
98475466e1 | |
|
|
b21e6a3013 | |
|
|
63f7a83318 | |
|
|
32e836579f | |
|
|
5c0ea418d5 | |
|
|
9393801259 | |
|
|
c9be79a3c8 | |
|
|
f8d95489bb |
|
|
@ -1,3 +1,4 @@
|
|||
index.html,1616964719736,3f99d785be835c8aff1990faf8bf678d2779414226c3ba41a6bf8210c9044e85
|
||||
resume.css,1616964719738,9561dffbb8787cf3367cce3e3eb1169b74852e6fe7c4f8422bf9ad39affdd2d8
|
||||
resume.pdf,1616964719741,81d95603bad78aa3f433e5acd87ad92afb7d4a765684b662b4d237524603d4d0
|
||||
index.html,1697076028715,3bd03c4d83dbeb2ed2b7bee9267742390fb06c0bee7086dc5befae5529fcbca2
|
||||
BreeLaPointeResume.pdf,1697076028715,e65c67dce31a4e83006e2876b59398353a76ef1c3884fee6bdfb15a1a69745fb
|
||||
fonts/Lato-Bold.ttf,1697076028715,e77763dcc0ed479b272159ee5dad99264d0cea536b5fd3072504d6687e18ba54
|
||||
fonts/Lato-Regular.ttf,1697076028715,1272611e0b7f2015372f7ff6bce5bd351b5746578cbaff916ed6c0bf67f84e10
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
name: builder
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'Dockerfile.cicd'
|
||||
|
||||
jobs:
|
||||
builder:
|
||||
name: builder
|
||||
runs-on: dind
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: builder
|
||||
run: |
|
||||
t=registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
|
||||
until docker ps; do
|
||||
sleep 5
|
||||
done
|
||||
docker build -t "$t" -f ./Dockerfile.cicd .
|
||||
docker push "$t"
|
||||
docker rmi $(docker ps | grep ${t%:*} | grep '<none>' | awk '{print $3}') || true
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
name: cicd
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'src/**'
|
||||
|
||||
jobs:
|
||||
cicd:
|
||||
name: cicd
|
||||
runs-on: dind
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: cicd
|
||||
run: |
|
||||
echo "export FIREBASE_CI_TOKEN='${{ secrets.FIREBASE_CI_TOKEN }}'" >> ./.env
|
||||
echo "export GITLAB_PAT='${{ secrets.GITLAB_PAT }}'" >> ./.env
|
||||
f=$(mktemp)
|
||||
echo '
|
||||
FROM registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
|
||||
WORKDIR /mnt
|
||||
COPY ./ /mnt/
|
||||
RUN bash -c "true; source ./.env; bash ./deploy.firebase.sh"
|
||||
' | sed 's/^ *//' > $f
|
||||
docker build -f $f -t resume-build:resume-build .
|
||||
result=$?
|
||||
docker rmi resume-build:resume-build || true
|
||||
exit $?
|
||||
|
|
@ -1,7 +1,11 @@
|
|||
**/*.sw*
|
||||
/.firebase/*.cache
|
||||
**/*.pdf
|
||||
resume
|
||||
**/*.tar
|
||||
deploy
|
||||
vendor
|
||||
firebase-debug.log
|
||||
/**/node_modules
|
||||
/json-resume/out
|
||||
!/open-resume.com.d/resume.pdf
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
StylesPath = styles
|
||||
|
||||
MinAlertLevel = suggestion
|
||||
|
||||
Packages = proselint, write-good, Readability, Joblint
|
||||
|
||||
[*]
|
||||
BasedOnStyles = Vale, proselint, write-good, Readability, Joblint
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
FROM jdkato/vale:latest as vale
|
||||
|
||||
FROM andreysenov/firebase-tools:latest
|
||||
|
||||
USER root
|
||||
|
||||
RUN echo installing dependencies...
|
||||
RUN apt update \
|
||||
&& apt -y install git woff2 bash curl wget gnupg2 \
|
||||
&& ( \
|
||||
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
|
||||
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | tee -a /etc/apt/sources.list.d/google.list \
|
||||
&& (apt update; apt --fix-broken install; apt -y install google-chrome-stable) \
|
||||
) \
|
||||
&& curl -L https://github.com/svenstaro/miniserve/releases/download/v0.24.0/miniserve-0.24.0-x86_64-unknown-linux-musl > /bin/miniserve \
|
||||
&& chmod +x /bin/miniserve
|
||||
|
||||
RUN echo copying vale...
|
||||
COPY --from=vale /bin/vale /bin/vale
|
||||
|
||||
RUN echo OK
|
||||
Binary file not shown.
|
|
@ -0,0 +1,16 @@
|
|||
# Resume
|
||||
|
||||
* todo
|
||||
* prepare stories
|
||||
* cross-team project with a hitch and deadline pressure
|
||||
* an urgent incident
|
||||
* in interviews, do the dumb version first
|
||||
|
||||
## Usage
|
||||
|
||||
1. modify [homebrew.yaml](./src/homebrew/homebrew.yaml)
|
||||
1. generate `cd ./src/homebrew; bash ./homebrew.sh` (interrupt when it starts timestamping)
|
||||
1. `open ./src/homebrew/homebrew.html`
|
||||
1. `ctrl + p` and save as pdf
|
||||
1. commit + push
|
||||
1. `.gitea/...` CICD pushes to firebase + gitlab
|
||||
|
|
@ -0,0 +1,857 @@
|
|||
# TODO https://www.linkedin.com/posts/brianjenney_ive-spoken-with-about-500-developers-in-activity-7119717343127117824-I016/?utm_source=share&utm_medium=member_desktop
|
||||
# > did [x] using [y] which led to [z].
|
||||
- when: 2019
|
||||
rendered: Decreased backend service's annual outages by 91% and reduced hardware costs by 40% by selecting, training owners on, and migrating without downtime to a different database.
|
||||
quantity:
|
||||
- 718 avg outage min per year down to 64 avg outage min per year
|
||||
- 356 outage minutes 2018 for marauders-map
|
||||
- 352 outage minutes 2018 for couchbase
|
||||
- 203 outage minutes 2018 for gobs
|
||||
- 47 outage minutes 2019 for marauders-map
|
||||
- 149 outage minutes 2019 for couchbase
|
||||
- 282 outage minutes 2019 for gobs
|
||||
- 47 outage minutes 2019 for geni
|
||||
- 184 outage minutes 2020 for gobs
|
||||
- 5 outage minutes 2020 for geni
|
||||
- 48 outage minutes 2021 for couchbase
|
||||
- 48 outage minutes 2021 for gobs
|
||||
- 31 outage minutes 2022 for gobs
|
||||
- 131 outage minutes 2023 for couchbase
|
||||
- 131 outage minutes 2023 for gobs
|
||||
- 12 outage minutes 2023 for geni
|
||||
- when: 2020
|
||||
rendered: Automated infrastructure patching without customer impact for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.
|
||||
- when: 2020
|
||||
what:
|
||||
- edits healthcheck as a modular stack monorepo before it was cool that does visibility+remediation
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- routinely randomly sampled N ETL
|
||||
- scanned ~N rows per second vs 3 source systems
|
||||
- fixed ~N per day
|
||||
rendered: "Established a healthcheck system to scan X rows per second, resolve drift from upstream systems, and expose findings."
|
||||
- when: 2020
|
||||
what:
|
||||
- BoQ hosting 2020..2023
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: c
|
||||
quantity:
|
||||
- N text books
|
||||
- audience of N
|
||||
- 1 time a week
|
||||
rendered: "Hosted engineering book club, including book selection and weekly group reflection."
|
||||
- when: 2020
|
||||
what:
|
||||
- GOBS from p2p to stateless (via redis, killing leveldb)
|
||||
- decoupled cache miss rate from releases
|
||||
- decreased thread scalability
|
||||
- decoupled disk size service scale
|
||||
- same team known technology less sentinel operational burden
|
||||
- decreased error rate from N to N during releases
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- reduced touchpoints per call from N to N
|
||||
rendered: "Simplified microservice by extracting peer-to-peer layer, decoupling single nodes' performance, availability, and scale from global performance."
|
||||
- when: 2020
|
||||
what:
|
||||
- nexpose-remediations and blackduck sme
|
||||
why:
|
||||
- scalability
|
||||
grade: c
|
||||
quantity:
|
||||
- decoupled knowledge of problem space from solution
|
||||
- implement optional interface with your tribal knowledge and done
|
||||
- made things like log4j feasible
|
||||
- scripted tribal knowledge
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- scale test rems vs re
|
||||
why:
|
||||
- failfast
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- mongo sme designed and released rems-mongo
|
||||
why:
|
||||
- scalability
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- re, terminator to nomad
|
||||
why:
|
||||
- scalability
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- design GOBS off of Couchbase
|
||||
why:
|
||||
- scalability
|
||||
grade: a
|
||||
quantity:
|
||||
- single greatest operational pain, instability cause, financial burden
|
||||
- horizontal scale on known, stable technology to reduce total team space
|
||||
- simplified complex system to core requirements
|
||||
- GOBS on Mongo with Xongo w/ Ryan intern mentor
|
||||
- for all gobs,geni,maraudersmap,couchbase...
|
||||
- ...35 outages/722 minutes 18 // geni on cb
|
||||
- ...21 outages/290 minutes 19 // geni on cb
|
||||
- ...13 outages/615 minutes 20
|
||||
- ...8 outages/88 minutes 21
|
||||
- ...13 outages/31 minutes 22
|
||||
- ...14 outages/143 minutes 23
|
||||
rendered: "Designed a replacement for a system, which yielded 28 outages annually, based entirely on technologies well understood by the team."
|
||||
- when: 2020
|
||||
what:
|
||||
- REMS migration implementation
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- no incidents
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- DRS for REMS
|
||||
why:
|
||||
- scalability
|
||||
- isolation for REMS
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- FSDef,FSIndex to GOBS from Couchbase
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- Mongo on TLS SME/pilot
|
||||
- Redis on TLS,Password no downtime migration via middleware
|
||||
why:
|
||||
- scalability
|
||||
grade: c
|
||||
quantity:
|
||||
- 0 incident
|
||||
- 0 downtime
|
||||
rendered: null
|
||||
- when: 2020
|
||||
what:
|
||||
- Mongosback V2 for cron > rundeck
|
||||
- Mongosback V2.1 autorelease after bake time, indexes
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: a
|
||||
quantity:
|
||||
- onboarding from copy-paste to 1 line change
|
||||
- served N teams over N years
|
||||
rendered: Created custom Python tooling to create, increment, restore, and check for MongoDB database backups for standalone, replicated, and sharded deployments without customer impact, and has been the in-house standard for 21 teams for 4 years.
|
||||
- when: 2020
|
||||
what:
|
||||
- REMS+DSCat Mongo SME
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
rendered: Developed and owned highly available and reliable data storage and operational tooling.
|
||||
- when: 2021
|
||||
rendered: Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.
|
||||
- when: 2021
|
||||
rendered: Genericized AWS asset management tooling ahead of company-wide mass migration initiative.
|
||||
- when: 2021
|
||||
rendered: Championed disaster recovery by supporting training runs with documentation, tools, and live support across teams and enforced continuous compliance for 17 database clusters with monitoring and alerting.
|
||||
- when: 2021
|
||||
rendered: Lent expertise owning MongoDB across teams by advising on configuration and data models and genericizing disaster recovery tooling for 21 teams.
|
||||
- when: 2021
|
||||
what:
|
||||
- systems review planning
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- mentored new hire until he left the team for his starter project (S3)
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- mentored sr engineer on Bash, rundeck, in-house metrics and alerting, ssh...
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- on-call training with chaos testing, hands-on, log perusing
|
||||
- Mongo multi-phase, multi-timezone interactive training with offline reading and video + online chaos testing + forum for anonymous feedback
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: c
|
||||
quantity:
|
||||
- N chaos tests // 2021-06-16, 2022-08-08, 2023.02.01, 2019-01-23, 2019-08-09, 2019-09-04
|
||||
- N systems // re, geni, gobs, terminator, is
|
||||
- N participants
|
||||
rendered: "Administered on-call training, including 6 chaos tests gamedays across 5 systems."
|
||||
- when: 2021
|
||||
what:
|
||||
- s2se; scripted Galera with safety for multi-team // https://qualtrics.slack.com/archives/C016VAW2L04/p1613540701066600
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity:
|
||||
- 3 teams // https://qualtrics.slack.com/archives/C016VAW2L04/p1613540701066600 // vocalizedb=3*8, dis=3*8, me=5*3*8
|
||||
- spreadsheet with N steps // https://docs.google.com/spreadsheets/d/1JsxGdEWlGOFivJZMOBMmlkaoqRz3gTJB7NtjVGI3q-I/edit#gid=644182888 // https://qualtrics.slack.com/archives/C016VAW2L04/p1612567987267700 // https://gitlab-app.eng.qops.net/data-store/orchestration/runbooks/-/blob/8d30ca087c6f1a5518515b98e7948b48aac6d08a/Maintenance/Galera_to_TLS/upgrade.sh
|
||||
- "Scripted no-downtime database reconfiguration, which reduced 44 manual steps per node to 3 and was leveraged by 3 teams to update 168 instances."
|
||||
- our N clusters
|
||||
rendered: "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances."
|
||||
- when: 2021
|
||||
what:
|
||||
- dr backup check to monitor s3 compliance w/ 19 teams onboarded and eventually handed to dbteam
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- 16 teams // s3-backup-check $ git grep '^[a-z].*:' $(git rev-list --all) | grep :config.*yaml: | sed 's/.*:config.//' | sed 's#/.*##' | sort -u | tr '\n' ' '; echo .examples action-planning analytics-engine datastore dbteam devplat-mongo dp-orchestration dp-orchestration.yaml:geni-mongo-$DC: dp-orchestration.yaml:rdb-$DC-i: dp-orchestration.yaml:rdb-$DC-s: dtool exh geni.yaml:backups: geni.yaml:geni: geni.yaml:rdb: jfe job-platform orch pxapp statwing ta tickets workflow-triggers
|
||||
- parallelized to P=3 and trivially configurable
|
||||
- caught N issues backups failing causes for us
|
||||
rendered: Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.
|
||||
- when: 2021
|
||||
what:
|
||||
- REMS on SSDs analysis, budget proposal, approval, deploy, mock traffic
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- N% more cost but N% less shards
|
||||
- https://docs.google.com/document/d/1Yh-HrA4xuaZD4CMFJwqHjir_B4qLIPbXEUmw9m5azy8/edit#heading=h.uw3h16ap7r5f
|
||||
rendered: "Forecasted financial and complexity cost to launch on cheap hardware yielded $N savings over 2 years. // compute $ and include dev cost of setting up new shards, say .5 dev week so 1k=100k/52/2 per shard"
|
||||
- when: 2021
|
||||
what:
|
||||
- Took REMS migration implementaion back from handoff and reduced ETA from inf to 3w at max speed w/ visibility and parallelism
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- found Go likes lots of small > few big RAM nodes
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- REMS quality of life
|
||||
- idempotency test
|
||||
- brand/user/issuer/byte limiting
|
||||
- squishing
|
||||
- lazy JSON parsing
|
||||
- resumable jobs
|
||||
- heartbeating jobs
|
||||
why:
|
||||
- scalability
|
||||
grade: d
|
||||
quantity:
|
||||
- reduced RAM from >N to N with lazy json flame graphs
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- DSCat mongo query analysis and optimization
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- cross-team Mongo incident remediation, support, guidance, SME
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- couchsback to v2 as rclone
|
||||
why:
|
||||
- scalability
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- pushed against proposed optimizations (rems cleaning of old edit fields on stale edits) and proved gains (.3% data saved on wire to TS) wouldnt pay off but complied when commanded
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- LegacyPublicAPI; they wanted to hand to us, so I executed what itd take to shift ownership to us and documented the gotchas, and it was so bad that they reverted my complete code and revisited so this handoff wouldnt repeat with other teams
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2021
|
||||
what:
|
||||
- healthcheck platform design approved but implementaion priority rejected
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
rendered: Mentored entry and mid-level engineers on stability, clean code, and distributed systems.
|
||||
- when: 2022
|
||||
rendered: Hosted engineering book and white paper clubs for continuous improvement and cross-team experience sharing for 2 years.
|
||||
- when: 2022
|
||||
rendered: Recovered 98% of data lost in critical incident via coordinating cross-team efforts and dissecting native database operation logs.
|
||||
- when: 2022
|
||||
what:
|
||||
- champion of quality; suspected and saw symptoms of data incorrectness in REMS snapshots, insisted and provided more and more evidence despite willful holiday ignorance, eventually recognized as p1
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- discovered bug affecting N rows
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- became team lead
|
||||
why:
|
||||
- scalability
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- cost-benefit of geni on ddb; 10x the cost but reduces hardlyAnyOperationalBurdenQuantified
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity:
|
||||
- contrary to popular opinion, found N% more cost for N risk to move mongo to DDB as-is
|
||||
rendered: Challenged deprecation of MongoDB for DynamoDB, ultimately saving $N annually and operational burden on N teams.
|
||||
- when: 2022
|
||||
what:
|
||||
- geni iops -> i insist and tune docker when team wants to ignore call to action
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- response-files OOMs image resizing sidecar proposed + open source used
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- N ooms/errors per week
|
||||
- N on call alerts for nothing
|
||||
- 0 migration pain
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- generic aws migration scripts w/ mentee leveraged by tens of teams for s3, ddb, lambda, sns, sqs
|
||||
what2: |
|
||||
https://huggingface.co/chat/conversation/6533fbd355db1e7b0bf62a3b
|
||||
Model: mistralai/Mistral-7B-Instruct-v0.1
|
||||
https://www.linkedin.com/posts/thedanielbotero_use-these-chatgpt-prompts-if-you-want-to-activity-7119669945298284546-q1DA/?utm_source=share&utm_medium=member_desktop
|
||||
created custom AWS asset management tooling that streamlined our infrastructure management process and saved time and resources
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- scalability
|
||||
grade: a
|
||||
quantity:
|
||||
- 9 teams
|
||||
- |
|
||||
Production[674592268301]/api_access $ ls replication-user-* | grep -o 'replication.user.[a-z]*-' | uniq
|
||||
replication-user-datasets-
|
||||
replication-user-datastore-
|
||||
replication-user-des-
|
||||
replication-user-distributions-
|
||||
replication-user-dp-
|
||||
replication-user-dpie-
|
||||
replication-user-eax-
|
||||
replication-user-graphic-
|
||||
replication-user-xmd-
|
||||
- with 1 mentee
|
||||
- each team saved N man hours
|
||||
- 7 aws technologies
|
||||
rendered: "Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each."
|
||||
- when: 2022
|
||||
what:
|
||||
- cicd for team; onboarding + converting + creating continuous testing framework
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- N repos from wild west to E2E // atlas-data loader, -qmp, -qmp canary, -data loader canary, qdp counts, janus
|
||||
- blocked N releases // from spinnaker ui probably
|
||||
- ajw initial release from 25% e2e test to 75%
|
||||
- more E2E tests on previously E2E test free repos because old mentee sahithig didnt feel comfortable joining the team fearing shes break stuff
|
||||
- test everything; our tests found FSCS outages and then FSCS team found they had no visibility
|
||||
- test everything; atlas data loader first e2e test
|
||||
- test everything; block dev if merging release isnt noop
|
||||
- test everything; legacy responses first e2e test
|
||||
- test everything; except dont; response-files keepalives cross-dc would expire and break response-files allocs permanently, so tests couldnt pass to release fix
|
||||
- test everything; janus cruddy e2e tests
|
||||
- 10 data-store/* repos, 1 legacyresponses
|
||||
- |
|
||||
fffffffff finding carter throughput gonna hurt if even possible
|
||||
well, i guess i just need to find b1 failures because qamel fail and check commit diff for the one after
|
||||
only since cruddy invention
|
||||
spinnaker prunes so
|
||||
- |
|
||||
'from:@Spinnaker "Deploy to Beta" "Failed" in:#datastore-releases'
|
||||
11 unique dates in -30d..now
|
||||
10 unique dates in -60d..-30d
|
||||
10 unique dates in -90d..-60d
|
||||
rendered: "Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average."
|
||||
- when: 2022
|
||||
what:
|
||||
- sahithig + itony mentorships; spead asks whats wrong with onboarding? what onboarding!
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- scalability
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- monorepo and parallelizing and caching packages = Jenkins from 10m to 2m
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- autopatching for vuln remediation via scheduled builds for team w/ stable, quiet cicd
|
||||
- scalability
|
||||
grade: d
|
||||
quantity:
|
||||
- our team does N images per month vs DPORCS
|
||||
- N of last N weeks fedramp high compliant
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- The REMS Data Loss Incident
|
||||
- mongo bug around leaked oplog lock = no disk persistence = total loss
|
||||
- upstream replayed jobs or shared their mongodb oplog so i could rebuild
|
||||
- forward-facing communication; instead of sorry, this is our root cause and future prevention
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity:
|
||||
- N% jobs restored
|
||||
- N of N parties fully recovered
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- miss; jfe needs faster virus scanning so I give em 10%. They want 10x because they retry all N files of their batch of M every time. Losers.
|
||||
why:
|
||||
- scalability
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- every aws migration solo or nearly
|
||||
why:
|
||||
- scalability
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- became team lead and promoted to l5
|
||||
why:
|
||||
- role-model-dad
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- coda doc for planning splits owners from contributors w/ weights
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- hit N% of team commitments up from N
|
||||
rednered: null
|
||||
rendered2: "Revised bottom-up quarterly planning to consider variable development time costs, averaging in N% more team committments hit. // this is pretty fuckin vauge..."
|
||||
- when: 2022
|
||||
what:
|
||||
- miss; davidc exported to orcs despite wishes to stay
|
||||
why:
|
||||
- pride-in-craft
|
||||
- role-model-dad
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- swimlanes of rems; byte write/read rate limits, terminator specific pool
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- tested REMS no-ops when carter ignored me asking him to
|
||||
- please write 1 test before i get back from vacation
|
||||
- 0 forever
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- generic nomad cost analysis grafana
|
||||
why:
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- generic cost analysis found $N over provisioned hardware transformation+rems
|
||||
rendered: "Built a cost analysis Grafana dashboard that revealed $Nk in over allocated elastic compute hardware annually."
|
||||
- when: 2023
|
||||
what:
|
||||
- learning the performance feedback game; my perception is no one elses reality; make a rubric and define specific examples against it
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- role-model-dad
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- miss; horizons doc review wasn’t generalized/brief enough
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- customer-obsesssion
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- 2nd highest contributor to runbook blitz
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- when overloaded with ops, told team and offloaded + handed off threads
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- fairness for rems; if attempt to use N threads per box, defer to low prio queue
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
grade: c
|
||||
quantity:
|
||||
- sandboxed about N minor incidents per month
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- interactive cicd tutorial with dpie so they could execute side-by-side
|
||||
- not my fault they didnt
|
||||
why:
|
||||
- pride-for-others
|
||||
- scalability
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- chaos test gameday to train new teammate oncall
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- N chaos tests
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- Couchbase-aggedon
|
||||
- i told em how to patch that shit motherfuckers are usual
|
||||
- i go to office because that team insists
|
||||
- i stop em from terminating early many times
|
||||
- '* a hash means we dont need to check, right?'
|
||||
- '* ive got a script its good enough i wrote it'
|
||||
- '* ive got v2 of my script its good enough i wrote it'
|
||||
- '* this is a lotta pain, we should give up'
|
||||
- taught 8 teammates how to sed/grep/script/Bash
|
||||
- delegating threads; spiking accesslogs, spiking redis dumps, spiking couchbase backup/restore
|
||||
- discovered bugs that meant some threads were not viable
|
||||
- reduced problem to safest state for round 1, next safest for round 2, ...
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: a
|
||||
quantity:
|
||||
- N% data restored
|
||||
- 2 fault remediations blocked
|
||||
- N% data jeopardized
|
||||
- N% data identified free and delegated to N engineers
|
||||
rendered: "Enforced <a high quality bar> in a data loss incident, delegating identifying the N% of data lost, 3 distinct restoration efforts, and developing automated validation to block 2 incorrect remediation attempts."
|
||||
- when: 2023
|
||||
what:
|
||||
- BoQ final
|
||||
why:
|
||||
- scalability
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- generic datastore customers could opt into us doing stateramp for them in GENI if they set jwts
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- N teams had a zero or near zero onboarding lift
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- REMS /partitions, /entrypoints for TS to parallel data load via index scan+hash live vs. keithc INSISTED on not live :eye_roll:
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- N% dev work for N% gains
|
||||
- system more flexible to add/remove/update configuration vs baked index
|
||||
- |
|
||||
performance of native
|
||||
for each key in index:
|
||||
yield key from index
|
||||
so N index keys yielded from mongo*
|
||||
performance of live
|
||||
for each key in index_a:
|
||||
if partition(key) in range:
|
||||
yield key from index
|
||||
dont store a second index, so halve index use
|
||||
inverse linear scaling with partition count network bytes
|
||||
1 partition == native
|
||||
2 partitions == 2*native
|
||||
3 partitions == 3*native
|
||||
BUT internally, mongo was doing 2*, 3*, so now we are doing as much complexity but client side so adding network cost
|
||||
so what is cost of doing N on local vs remote?
|
||||
well, what is cost of 1 network hop vs cpu filtering? should be that ratio
|
||||
.4ms vs COST_OF_(HASHING_15_CHARS+GC+MOD)
|
||||
but all of this still would be done, just async and 99% unused
|
||||
.4ms vs .1ms
|
||||
4:1
|
||||
https://qualtrics.slack.com/archives/DGS4G1J87/p1678121083319669
|
||||
rendered: Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index.
|
||||
- when: 2023
|
||||
what:
|
||||
- proposed AtlasQMP as bugfixed singleton, parallelized nomad, or lambda cost and speed and devcost and deliverytime
|
||||
- high availability; 2 instances of singleton with distributed lock as cheap and good enough path forward
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
grade: b
|
||||
quantity:
|
||||
- spike into 3 alternative
|
||||
- review by team
|
||||
- final option cost $N% of pre-spike expectations, N% dev work, N% risk
|
||||
- https://docs.google.com/document/d/10lpn6c8hHRs2dGAm37sP0wKR5vbzJ4zbtY9zBDopTMU/edit
|
||||
- was 40k items per second, now 175k
|
||||
- would require qmp proxy to scale about as much as we would drop nomad BUT we gain lambda cost assuming never replay
|
||||
- so $600 per mo worldwide to $1200 per mo worldwide
|
||||
- 7k per year isnt very much with cheating
|
||||
- 2 dev weeks to revamp and clean up
|
||||
- lets say 4 dev weeks to get qmp team to scale up proxy, the incidents that wouldve caused, and assume kinesis to rest wouldve been trivial
|
||||
rendered: Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.
|
||||
- when: 2023
|
||||
what:
|
||||
- response-files split from library-files so we can move to our own database without sideaffect
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- N% of our requests were for a different team's operations
|
||||
- N% of our features were for a different team's features
|
||||
- first wait for them, then fork and pass
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- challenge; q2/q3 planning without knowing what medical leave teammate would do
|
||||
- 1. offboard what mattered that he was doing
|
||||
- 2. ask him repeatedly to offboard early and ask for updates how its going
|
||||
- 3. guess things he really wants and assume he wont be here for forseeable future even if he does return
|
||||
- coordinate with mathis on expectations upon his return
|
||||
why:
|
||||
- pride-for-others
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- REMS vs Translations
|
||||
- Translatsions gets 500 rows from AE without translations and translates those
|
||||
- '* prone to eventual consistency, blocks, brand deprioritizing, random bugs'
|
||||
- REMS got a backlog so we told them first
|
||||
- '* and we bumped over and over for them to look'
|
||||
- ' * and it escalated to a snafu'
|
||||
- '* root cause was squishing taking 90% of our cpu on this backlog of repeat work so sync squishing expedited to full release'
|
||||
- REMS emit a bug to TS that missed edits, so Translatsions kept re-translating what REMS perceived to be no-ops
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- insist on oncall covers during stressful weeks, high effort windows, and okr release time
|
||||
why:
|
||||
- role-model-dad
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- still SME on mongo backups and use-case-specific performance optimization
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- more E2E tests on previously E2E test free repos because old mentee sahithig didnt feel comfortable joining the team fearing shes break stuff
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- pride-for-others
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- navigated a teammate getting exported to a team he didnt want to join AND later getting exported from that team and almost someone else getting exported too
|
||||
why:
|
||||
- pride-in-craft
|
||||
- role-model-dad
|
||||
grade: d
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- CSchmalzle
|
||||
- '* burnt out in q1 from too many projects in-flight'
|
||||
- ' * bi-weekly are you closing stuff?'
|
||||
- ' * daily yaknow that 2 day thing? is it done? when will it be done? what do we need to do to ship it? for 2 months'
|
||||
- ' * insisted he pick things to handoff and we got 2 from him'
|
||||
- '* released a lotta stuff untested and broken and i doubled back to fix it'
|
||||
- ' * entire team adds quality as key result'
|
||||
- '* terrible mr of copy-pasting + 2k lines of code'
|
||||
- ' * learn2git'
|
||||
- ' * multi-mr'
|
||||
- ' * refactors separate'
|
||||
- '* wants to release his mass changes that include customer-facing system behavior changes because well be more correct'
|
||||
- ' * and lots of support to remediate kanban'
|
||||
- ' * and i say NO u fok'
|
||||
why:
|
||||
- pride-for-others
|
||||
- scalability
|
||||
grade: c
|
||||
quantity:
|
||||
- weekly checkins for burnout causes
|
||||
rendered: null
|
||||
- when: 2023
|
||||
what:
|
||||
- i get team approval on a design to stop not-deleting customer data, they say we should fix at system level, so I spike and prove system level, just for other team to nope.avi out (REMS MoM delete)
|
||||
- designed rems mom deleting parallel with atlas, proposed drs team fixes it and impacted team volume, got deferred indefinitely and solved the same problem yet again but for rems mom
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: b
|
||||
quantity:
|
||||
- demonstrated N system race conditions and touch points
|
||||
rendered: "Mapped N unhandled inter-system race conditions to their single point of failure."
|
||||
- when: 2023
|
||||
what:
|
||||
- XMD Contact Consolidation Consumer
|
||||
- read our kafka topic like this and call your apis with it
|
||||
- ezpz BUT i dont wanna own your business logic by proxy
|
||||
- but our manager said you would, and something about throttling
|
||||
- handle our 429s and youll be k
|
||||
- but our manager...
|
||||
- ...3 weeks later...
|
||||
- listen here m8, u guys own your own 1 write per second shit, ya hear?
|
||||
- we didnt even want that, yall just took 2 years to get back to us >:(
|
||||
- o
|
||||
why:
|
||||
- pride-in-craft
|
||||
grade: c
|
||||
quantity:
|
||||
- sample size 1 week revealed new team was scared of N ops per second but N was 1
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- feedback; told sean implying we should spend QED time on ops work is against the spirit of QED time but he is an authority figure and makes it uncomfortable not to
|
||||
grade: b
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
- when: 2022
|
||||
what:
|
||||
- feedback; when i needed to ask michaelp for a remote exception, i had to share i was hesistant because he made possibly leaving engineers sound ostracized and ejected immediately
|
||||
grade: c
|
||||
quantity: [""]
|
||||
rendered: null
|
||||
|
|
@ -0,0 +1,529 @@
|
|||
- when: 2020
|
||||
what: edits healthcheck as a modular stack monorepo before it was cool that does visibility+remediation
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2020
|
||||
what: BoQ hosting 2020..2023
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2020
|
||||
what: GOBS from p2p to stateless (via redis, killing leveldb)
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: nexpose-remediations and blackduck sme
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: scale test rems vs re
|
||||
how: []
|
||||
why:
|
||||
- failfast
|
||||
- when: 2020
|
||||
what: mongo sme designed and released rems-mongo
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: re, terminator to nomad
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: design GOBS off of Couchbase
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: REMS migration implementation
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2020
|
||||
what: DRS for REMS
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: isolation for REMS
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: FSDef,FSIndex to GOBS from Couchbase
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: GOBS on Mongo with Xongo w/ Ryan intern
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2020
|
||||
what: Mongo on TLS SME/pilot
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2020
|
||||
what: Mongosback V2 for cron > rundeck
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2020
|
||||
what: REMS+DSCat Mongo SME
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: systems review planning
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2021
|
||||
what: mentored new hire until he left the team for his starter project (S3)
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2021
|
||||
what: mentored sr engineer on bash, rundeck, in-house metrics and alerting, ssh...
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: on-call training with chaos testing, hands-on log perusing
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2021
|
||||
what: s2se; scripted Galera with safety for multi-team
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: dr backup check to monitor s3 compliance w/ 19 teams onboarded and eventually handed to dbteam
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2021
|
||||
what: Mongosback V2.1 autorelease after bake time, indexes
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: REMS on SSDs analysis, budget proposal, approval, deploy, mock traffic
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2021
|
||||
what: Took REMS migration implementaion back from handoff and reduced ETA from inf to 3w at max speed w/ visibility and parallelism
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: found Go likes lots of small > few big RAM nodes
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: |
|
||||
REMS quality of life
|
||||
* idempotency test
|
||||
* brand/user/issuer/byte limiting
|
||||
* squishing
|
||||
* lazy JSON parsing
|
||||
* resumable jobs
|
||||
* heartbeating jobs
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2021
|
||||
what: DSCat mongo query analysis and optimization
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: cross-team Mongo incident remediation, support, guidance, SME
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: couchsback to v2 as rclone
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2021
|
||||
what: pushed against proposed optimizations (rems cleaning of old edit fields on stale edits) and proved gains (.3% data saved on wire to TS) wouldnt pay off but complied when commanded
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2021
|
||||
what: Mongo multi-phase, multi-timezone interactive training with offline reading and video + online chaos testing + forum for anonymous feedback
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2021
|
||||
what: LegacyPublicAPI; they wanted to hand to us, so I executed what it'd take to shift ownership to us and documented the gotchas, and it was so bad that they reverted my complete code and revisited so this handoff wouldnt repeat with other teams
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2021
|
||||
what: healthcheck platform design approved but implementaion priority rejected
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2022
|
||||
what: champion of quality: suspected and saw symptoms of data incorrectness in REMS snapshots, insisted and provided more and more evidence despite willful holiday ignorance, eventually recognized as p1
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2022
|
||||
what: became team lead
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: cost-benefit of geni on ddb: 10x the cost but reduces hardlyAnyOperationalBurdenQuantified
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2022
|
||||
what: geni iops -> i insist and tune docker when team wants to ignore call to action
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2022
|
||||
what: response-files OOMs image resizing sidecar proposed + open source used
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
- when: 2022
|
||||
what: generic aws migration scripts w/ mentee leveraged by tens of teams for s3, ddb, lambda, sns, sqs
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: cicd for team; onboarding + converting + creating continuous testing framework
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: sahithig + itony mentorships; spead asks what's wrong with onboarding? what onboarding!
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: monorepo and parallelizing and caching packages = Jenkins from 10m to 2m
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: autopatching for vuln remediation via scheduled builds for team w/ stable, quiet cicd
|
||||
how: []
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: |
|
||||
The REMS Data Loss Incident
|
||||
* mongo bug around leaked oplog lock = no disk persistence = total loss
|
||||
* upstream replayed jobs or shared their mongodb oplog so i could rebuild
|
||||
* forward-facing communication; instead of sorry, this is our root cause and future prevention
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2022
|
||||
what: miss; jfe needs faster virus scanning so I give 'em 10%. They want 10x because they retry all N files of their batch of M every time. Losers.
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: every aws migration solo or nearly
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: ajw initial release from 25% e2e test to 75%
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2022
|
||||
what: became team lead :sparkles: and promoted to l5
|
||||
how: []
|
||||
why:
|
||||
- role-model-dad
|
||||
- when: 2022
|
||||
what: coda doc for planning splits owners from contributors w/ weights
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: miss; davidc exported to orcs despite wishes to stay
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- role-model-dad
|
||||
- when: 2022
|
||||
what: swimlanes of rems; byte write/read rate limits, terminator specific pool
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
- when: 2022
|
||||
what: |
|
||||
tested REMS no-ops when carter ignored me asking him to
|
||||
* "please write 1 test before i get back from vacation"
|
||||
* 0 forever
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2022
|
||||
what: generic nomad cost analysis grafana
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: learning the performance feedback game; my perception is no one else's reality; make a rubric and define specific examples against it
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- role-model-dad
|
||||
- when: 2023
|
||||
what: miss; horizons doc review wasn’t generalized/brief enough
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- customer-obsesssion
|
||||
- when: 2023
|
||||
what: 2nd highest contributor to runbook blitz
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- pride-for-others
|
||||
- when: 2023
|
||||
what: when overloaded with ops, told team and offloaded + handed off threads
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: fairness for rems; if attempt to use N threads per box, defer to low prio queue
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: |
|
||||
interactive cicd tutorial with dpie so they could execute side-by-side
|
||||
* not my fault they didnt
|
||||
how: []
|
||||
why:
|
||||
- pride-for-others
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: chaos test gameday to train new teammate oncall
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: |
|
||||
Couchbase-aggedon
|
||||
* i told 'em how to patch that shit motherfuckers are usual
|
||||
* i go to office because that team insists
|
||||
* i stop 'em from terminating early many times
|
||||
* a hash means we dont need to check, right?
|
||||
* ive got a script it's good enough i wrote it
|
||||
* ive got v2 of my script it's good enough i wrote it
|
||||
* this is a lotta pain, we should give up
|
||||
* taught 8 teammates how to sed/grep/script/bash
|
||||
* delegating threads; spiking accesslogs, spiking redis dumps, spiking couchbase backup/restore
|
||||
* discovered bugs that meant some threads were not viable
|
||||
* reduced problem to safest state for round 1, next safest for round 2, ...
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: BoQ final
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: generic datastore customers could opt into us doing stateramp for them in GENI if they set jwts
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: REMS /partitions, /entrypoints for TS to parallel data load via index scan+hash live vs. keithc INSISTED on not live :eye_roll:
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: proposed AtlasQMP as bugfixed singleton, parallelized nomad, or lambda cost and speed and devcost and deliverytime
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: response-files split from library-files so we can move to our own database without sideaffect
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: |
|
||||
challenge; q2/q3 planning without knowing what medical leave teammate would do
|
||||
* 1. offboard what mattered that he was doing
|
||||
* 2. ask him repeatedly to offboard early and ask for updates how it's going
|
||||
* 3. guess things he really wants and assume he won't be here for forseeable future even if he does return
|
||||
* coordinate with mathis on expectations upon his return
|
||||
how: []
|
||||
why:
|
||||
- pride-for-others
|
||||
- when: 2023
|
||||
what: |
|
||||
REMS vs Translations
|
||||
* Translatsions gets 500 rows from AE without translations and translates those
|
||||
* prone to eventual consistency, blocks, brand deprioritizing, random bugs
|
||||
* REMS got a backlog so we told them first
|
||||
* and we bumped over and over for them to look
|
||||
* and it escalated to a snafu
|
||||
* root cause was squishing taking 90% of our cpu on this backlog of repeat work so sync squishing expedited to full release
|
||||
* REMS emit a bug to TS that missed edits, so Translatsions kept re-translating what REMS perceived to be no-ops
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: insist on oncall covers during stressful weeks, high effort windows, and okr release time
|
||||
how: []
|
||||
why:
|
||||
- role-model-dad
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: still SME on mongo backups and use-case-specific performance optimization
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: more E2E tests on previously E2E test free repos because old mentee sahithig didn't feel comfortable joining the team fearing she's break stuff
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- pride-for-others
|
||||
- when: 2023
|
||||
what: navigated a teammate getting exported to a team he didnt want to join AND later getting exported from that team and almost someone else getting exported too
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- role-model-dad
|
||||
- when: 2023
|
||||
what: |
|
||||
CSchmalzle
|
||||
* burnt out in q1 from too many projects in-flight
|
||||
* bi-weekly "are you closing stuff?"
|
||||
* daily "yaknow that 2 day thing? is it done? when will it be done? what do we need to do to ship it?" for 2 months
|
||||
* insisted he pick things to handoff and we got 2 from him
|
||||
* released a lotta stuff untested and broken and i doubled back to fix it
|
||||
* entire team adds quality as key result
|
||||
* terrible mr of copy-pasting + 2k lines of code
|
||||
* "learn2git"
|
||||
* multi-mr
|
||||
* refactors separate
|
||||
* wants to release his mass changes that include customer-facing system behavior changes because "we'll be more correct"
|
||||
* and lots of support to remediate kanban
|
||||
* and i say NO u fok
|
||||
how: []
|
||||
why:
|
||||
- pride-for-others
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: i get team approval on a design to stop not-deleting customer data, they say we should fix at system level, so I spike and prove system level, just for other team to nope.avi out (REMS MoM delete)
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: |
|
||||
XMD Contact Consolidation Consumer
|
||||
* "read our kafka topic like this and call your apis with it"
|
||||
* ezpz BUT i dont wanna own your business logic by proxy
|
||||
* "but our manager said you would, and something about throttling"
|
||||
* handle our 429s and you'll be k
|
||||
* "but our manager..."
|
||||
* ...3 weeks later...
|
||||
* listen here m8, u guys own your own 1 write per second shit, ya hear?
|
||||
* "we didnt even want that, y'all just took 2 years to get back to us >:("
|
||||
* o
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: test everything; atlas qmp canary from ignored to release blocking via librdkafka configs, sleep deletions
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: test everything; atlas data loader first e2e test
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: test everything; block dev if merging release isn't noop
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: test everything; legacy responses first e2e test
|
||||
how: []
|
||||
why:
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: test everything; except don't; response-files keepalives cross-dc would expire and break response-files allocs permanently, so tests couldn't pass to release fix
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: test everything; our tests found FSCS outages and then FSCS team found they had no visibility
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- when: 2023
|
||||
what: test everything; janus cruddy e2e tests
|
||||
how: []
|
||||
why:
|
||||
- pride-for-others
|
||||
- when: 2023
|
||||
what: high availability; 2 instances of singleton with distributed lock as cheap and good enough path forward
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2023
|
||||
what: designed rems mom deleting parallel with atlas, proposed drs team fixes it and impacted team volume, got deferred indefinitely and solved the same problem yet again but for rems mom
|
||||
how: []
|
||||
why:
|
||||
- pride-in-craft
|
||||
- scalability
|
||||
- when: 2022
|
||||
what: feedback; told sean implying we should spend QED time on ops work is against the spirit of QED time but he is an authority figure and makes it uncomfortable not to
|
||||
- when: 2022
|
||||
what: feedback; when i needed to ask michaelp for a remote exception, i had to share i was hesistant because he made possibly leaving engineers sound ostracized and ejected immediately
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
- what: ''
|
||||
priority: low
|
||||
who: []
|
||||
- what: 'why are you hiring?'
|
||||
priority: high
|
||||
who: ['recruiter', 'manager']
|
||||
- what: 'why have you stayed?'
|
||||
priority: high
|
||||
who: ['recruiter', 'dev', 'manager']
|
||||
- what: 'what type of people are successful here?'
|
||||
priority: high
|
||||
who: ['recruiter', 'dev', 'manager']
|
||||
- what: 'what is 401k?'
|
||||
priority: high
|
||||
who: ['recruiter']
|
||||
- what: 'how is on-call?'
|
||||
priority: high
|
||||
who: ['dev']
|
||||
- what: 'tell me about incidents: remediation and reflection'
|
||||
priority: high
|
||||
who: ['dev', 'manager']
|
||||
- what: 'what does feedback look like?'
|
||||
priority: high
|
||||
who: ['dev', 'manager']
|
||||
- what: '6 month plan? 2 year plan?'
|
||||
priority: high
|
||||
who: ['dev', 'manager']
|
||||
- what: 'how is tech debt handled?'
|
||||
priority: high
|
||||
who: ['dev', 'manager']
|
||||
- what: 'how is a deadline failure handled?'
|
||||
priority: high
|
||||
who: ['dev', 'manager']
|
||||
- what: 'open source stance'
|
||||
priority: high
|
||||
who: ['dev', 'manager']
|
||||
- what: 'what has the team worked on recently?'
|
||||
priority: med
|
||||
who: ['dev']
|
||||
- what: 'what is the decision making process, like for a project?'
|
||||
priority: med
|
||||
who: ['dev']
|
||||
- what: 'what does testing look like'
|
||||
priority: med
|
||||
who: ['dev']
|
||||
- what: 'what is the role of r&d?'
|
||||
priority: med
|
||||
who: ['recruiter', 'dev', 'manager']
|
||||
- what: 'tell me the release process'
|
||||
priority: med
|
||||
who: ['dev']
|
||||
- what: 'how is burnout handled?'
|
||||
priority: med
|
||||
who: ['dev', 'manager']
|
||||
- what: 'what career paths are there? IC vs manager?'
|
||||
priority: low
|
||||
who: ['recruiter', 'manager']
|
||||
- what: 'what does taking time off look like? what does taking sick days look like?'
|
||||
priority: low
|
||||
who: ['recruiter', 'dev', 'manager']
|
||||
- what: 'opinion on employees learning?'
|
||||
priority: low
|
||||
who: ['recruiter', 'dev']
|
||||
- what: 'you all ever do hackathons?'
|
||||
priority: low
|
||||
who: ['dev', 'manager']
|
||||
- what: 'if there is a staging environment, then how does it differ from prod?'
|
||||
priority: low
|
||||
who: ['dev', 'manager']
|
||||
- what: 'is the company profitable? projected to be?'
|
||||
priority: low
|
||||
who: ['manager']
|
||||
- what: 'how will the company culture scale? what do you want to retain vs grow?'
|
||||
priority: low
|
||||
who: ['recruiter', 'manager']
|
||||
- what: 'is there unpaid time off?'
|
||||
priority: low
|
||||
who: ['recruiter']
|
||||
- what: 'what separates you from competitor?'
|
||||
priority: low
|
||||
who: ['recruiter', 'manager']
|
||||
- what: 'when an employee suffers burn out, what do you want their experience to be?'
|
||||
priority: low
|
||||
who: ['manager']
|
||||
- what: 'what is your WHY?'
|
||||
priority: low
|
||||
who: ['manager']
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
#! /bin/bash
|
||||
cd "$(dirname "$(realpath "$BASH_SOURCE")")"
|
||||
cat ./20* \
|
||||
| gojq -c --yaml-input '.[] | [.grade, (.quantity | length), .]' \
|
||||
| sort \
|
||||
| head -n ${1:-${N:-15}} \
|
||||
| $(which jq) -c
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
- topic: resume wording
|
||||
src: https://www.linkedin.com/posts/thedanielbotero_use-these-chatgpt-prompts-if-you-want-to-activity-7119669945298284546-q1DA/?utm_source=share&utm_medium=member_desktop
|
||||
prompt: |
|
||||
Review my current resume and suggest improvements to ensure it is error-free, precise, and effectively communicates my skill, expertise, and experience. Provide feedback on the structure, including formatting and layout, and avoid any kind of personal opinions or preferences or biases.
|
||||
- topic: LinkedIn profile headline
|
||||
src: https://www.linkedin.com/posts/thedanielbotero_use-these-chatgpt-prompts-if-you-want-to-activity-7119669945298284546-q1DA/?utm_source=share&utm_medium=member_desktop
|
||||
prompt: |
|
||||
I work in Software Development as a Senior Software Engineer. Can you help me in creating a headline that will catch the interest of recruiters and possible employers?
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#! /bin/bash
|
||||
cd "$(dirname "$(realpath "$BASH_SOURCE")")"
|
||||
cat 2* \
|
||||
| gojq -c --yaml-input '.[] | {when: .when, s: .rendered}' \
|
||||
| grep -v null \
|
||||
| grep -v '""' \
|
||||
| $(which jq) -r -c . \
|
||||
| sort \
|
||||
| $(which jq) -s 'group_by(.when) | map({key: (.[0].when | tostring), value: [.[] | .s]}) | from_entries' \
|
||||
| gojq --yaml-output
|
||||
|
|
@ -1,24 +1,96 @@
|
|||
#! /bin/bash
|
||||
#! /bin/sh
|
||||
|
||||
set -o pipefail
|
||||
set -e
|
||||
set -u
|
||||
|
||||
if ! which firebase; then
|
||||
echo curl -sL https://firebase.tools | upgrade=true bash
|
||||
cd src
|
||||
|
||||
if which vale; then
|
||||
f=$(mktemp)
|
||||
cp homebrew/homebrew.yaml $f
|
||||
vale sync
|
||||
vale $f || true
|
||||
fi
|
||||
|
||||
outdir=./deploy
|
||||
outdir=$(mktemp -d)
|
||||
cleanup() {
|
||||
rm -rf "$outdir"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
rm -rf $outdir
|
||||
mkdir -p $outdir/public
|
||||
cp ./resume.md-main/resume.html $outdir/public/index.html
|
||||
cp ./resume.md-main/resume.css $outdir/public/
|
||||
cp ./resume.md-main/resume.pdf $outdir/public/
|
||||
cp homebrew/homebrew.html $outdir/public/index.html
|
||||
cp -r ./homebrew/fonts $outdir/public/
|
||||
cp homebrew/homebrew.pdf $outdir/public/BreeLaPointeResume.pdf
|
||||
ls $outdir/public/BreeLaPointeResume.pdf
|
||||
|
||||
firebase login
|
||||
echo firebase init
|
||||
firebase deploy || (
|
||||
firebase logout
|
||||
firebase login
|
||||
firebase deploy
|
||||
(
|
||||
if ! which woff2_compress; then
|
||||
sudo apt -y install woff2
|
||||
fi
|
||||
set -ueo pipefail
|
||||
for f in "$outdir"/public/fonts/*.ttf; do
|
||||
echo ttf to woff2 for "$f"
|
||||
if [ -f "$f" ]; then
|
||||
woff2_compress "$f"
|
||||
rm "$f"
|
||||
fi
|
||||
basename_f="${f##*/}"
|
||||
find "$outdir/public" -type f | grep -v public.fonts | while read -r f2; do
|
||||
sed -i "s#$basename_f#${basename_f%.ttf}.woff2#g" "$f2"
|
||||
done
|
||||
echo asserting no $basename_f
|
||||
! grep -R "$basename_f" "$outdir/public"
|
||||
echo asserting ${basename_f%.ttf}.woff2
|
||||
grep -R "${basename_f%.ttf}.woff2" "$outdir/public"
|
||||
done
|
||||
find "$outdir/public" -type f | grep -v public.fonts | while read -r f; do
|
||||
sed -i 's#type="font/ttf"#type="font/woff2"#g' "$f"
|
||||
done
|
||||
du -sh "$outdir/public/fonts/"*
|
||||
)
|
||||
|
||||
if tty && ! which firebase; then
|
||||
f="$(mktemp)"
|
||||
wget https://firebase.tools -O - > "$f"
|
||||
export upgrade=true
|
||||
sudo bash "$f"
|
||||
fi
|
||||
which firebase
|
||||
cp -r ../firebase.json ../.firebaserc ../.firebase $outdir/
|
||||
sed -i "s#deploy/public#public#" $outdir/firebase.json
|
||||
cd $outdir
|
||||
|
||||
(
|
||||
set -ueo pipefail
|
||||
if [ -n "$GITLAB_PAT" ]; then
|
||||
export HOME="$(mktemp -d)"
|
||||
git clone https://gitlab%40breel.dev:"$GITLAB_PAT"@gitlab.com/breel/resume.git gitlab-resume.d
|
||||
git config --global user.name "gitlab@breel.dev"
|
||||
git config --global user.email "gitlab@breel.dev"
|
||||
rm -rf ./gitlab-resume.d/*
|
||||
cp -r ./public/* ./gitlab-resume.d/
|
||||
cd ./gitlab-resume.d/
|
||||
git add -A :/
|
||||
git commit -m "$(date -u +%Y-%m-%dT%H:%M:%S)"
|
||||
git push origin main
|
||||
fi
|
||||
)
|
||||
|
||||
(
|
||||
set -ueo pipefail
|
||||
echo firebase uses squeaky2x3@gmail.com
|
||||
! tty || firebase login
|
||||
echo firebase init
|
||||
args=()
|
||||
log_args=()
|
||||
if ! tty; then
|
||||
args+=("--token" "$FIREBASE_CI_TOKEN")
|
||||
log_args+=("--token" "${FIREBASE_CI_TOKEN:0:1}")
|
||||
test "${FIREBASE_CI_TOKEN:0:1}" != "$"
|
||||
fi
|
||||
echo firebase deploy "${log_args[@]}"
|
||||
firebase deploy "${args[@]}"
|
||||
) || true
|
||||
|
|
|
|||
29
deploy.sh
29
deploy.sh
|
|
@ -1,29 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -o pipefail
|
||||
set -e
|
||||
|
||||
outdir=./deploy
|
||||
|
||||
rm -rf $outdir
|
||||
mkdir -p $outdir/public
|
||||
cp ./resume.md-main/resume.html $outdir/public/index.html
|
||||
cp ./resume.md-main/resume.css $outdir/public/
|
||||
cp ./resume.md-main/resume.pdf $outdir/public/
|
||||
(
|
||||
printf "runtime: go114\n"
|
||||
true || go version \
|
||||
| grep -Eo '[0-9]+\.[0-9]+' \
|
||||
| sed 's/[^0-9]//'
|
||||
) > $outdir/app.yaml
|
||||
cp ./main.go $outdir/
|
||||
pushd $outdir
|
||||
GOOS=linux CGO_ENABLED=0 go build -ldflags "-s -w" -a -installsuffix cgo -trimpath
|
||||
rm main.go
|
||||
popd
|
||||
tar -czf ./deploy.tar $outdir
|
||||
rm -rf $outdir
|
||||
scp -i $HOME/.ssh/gcp.blapointe.com ./deploy.tar gcp.blapointe.com:./
|
||||
ssh -i $HOME/.ssh/gcp.blapointe.com gcp.blapointe.com bash -c "true; tar -xf deploy.tar; mv $outdir/${outdir##*/} ./services/bin/resume; rm -rf services/lib/resume; mv $outdir/public services/lib/resume; rm -rf deploy.tar $outdir"
|
||||
rm -f ./deploy.tar
|
||||
|
||||
|
|
@ -6,7 +6,8 @@
|
|||
"**/.*",
|
||||
"**/node_modules/**",
|
||||
"firebase*",
|
||||
"resume.md-main/**"
|
||||
"resume.md-main/**",
|
||||
"json-resume/**"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -o pipefail
|
||||
set -e
|
||||
set -u
|
||||
|
||||
cd src
|
||||
|
||||
echo PRINTING PDF
|
||||
echo ...which google
|
||||
bin=google-chrome-stable
|
||||
if ! which $bin; then
|
||||
bin=chromium
|
||||
fi
|
||||
which $bin
|
||||
if ! which miniserve; then
|
||||
wget -O $GOPATH/bin/miniserve https://github.com/svenstaro/miniserve/releases/download/v0.24.0/miniserve-0.24.0-x86_64-unknown-linux-musl
|
||||
chmod +x $GOPATH/bin/miniserve
|
||||
fi
|
||||
which miniserve
|
||||
miniserve -p 58080 ./homebrew/ &
|
||||
pid=${!}
|
||||
until curl localhost:58080; do sleep 5; done
|
||||
$bin \
|
||||
--no-sandbox \
|
||||
--headless \
|
||||
--disable-gpu \
|
||||
--print-to-pdf=./homebrew/homebrew.pdf \
|
||||
--run-all-compositor-stages-before-draw \
|
||||
--no-pdf-header-footer \
|
||||
http://localhost:58080/homebrew.html
|
||||
get_state() {
|
||||
cksum ./homebrew/homebrew.pdf | awk '{print $1}'
|
||||
}
|
||||
state=$(get_state)
|
||||
while true; do
|
||||
sleep 5
|
||||
if [ "$state" == "$(get_state)" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
kill $pid || true
|
||||
echo
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Page Not Found</title>
|
||||
|
||||
<style media="screen">
|
||||
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
|
||||
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px 16px; border-radius: 3px; }
|
||||
#message h3 { color: #888; font-weight: normal; font-size: 16px; margin: 16px 0 12px; }
|
||||
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
|
||||
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
|
||||
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
|
||||
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
|
||||
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
|
||||
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
|
||||
@media (max-width: 600px) {
|
||||
body, #message { margin-top: 0; background: white; box-shadow: none; }
|
||||
body { border-top: 16px solid #ffa100; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="message">
|
||||
<h2>404</h2>
|
||||
<h1>Page Not Found</h1>
|
||||
<p>The specified file was not found on this website. Please check the URL for mistakes and try again.</p>
|
||||
<h3>Why am I seeing this?</h3>
|
||||
<p>This page was generated by the Firebase Command-Line Interface. To modify it, edit the <code>404.html</code> file in your project's configured <code>public</code> directory.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Welcome to Firebase Hosting</title>
|
||||
|
||||
<!-- update the version number as needed -->
|
||||
<script defer src="/__/firebase/7.21.1/firebase-app.js"></script>
|
||||
<!-- include only the Firebase features as you need -->
|
||||
<script defer src="/__/firebase/7.21.1/firebase-auth.js"></script>
|
||||
<script defer src="/__/firebase/7.21.1/firebase-database.js"></script>
|
||||
<script defer src="/__/firebase/7.21.1/firebase-messaging.js"></script>
|
||||
<script defer src="/__/firebase/7.21.1/firebase-storage.js"></script>
|
||||
<script defer src="/__/firebase/7.21.1/firebase-analytics.js"></script>
|
||||
<script defer src="/__/firebase/7.21.1/firebase-remote-config.js"></script>
|
||||
<script defer src="/__/firebase/7.21.1/firebase-performance.js"></script>
|
||||
<!-- initialize the SDK after all desired features are loaded -->
|
||||
<script defer src="/__/firebase/init.js"></script>
|
||||
|
||||
<style media="screen">
|
||||
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
|
||||
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px; border-radius: 3px; }
|
||||
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
|
||||
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
|
||||
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
|
||||
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
|
||||
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
|
||||
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
|
||||
@media (max-width: 600px) {
|
||||
body, #message { margin-top: 0; background: white; box-shadow: none; }
|
||||
body { border-top: 16px solid #ffa100; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="message">
|
||||
<h2>Welcome</h2>
|
||||
<h1>Firebase Hosting Setup Complete</h1>
|
||||
<p>You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!</p>
|
||||
<a target="_blank" href="https://firebase.google.com/docs/hosting/">Open Hosting Documentation</a>
|
||||
</div>
|
||||
<p id="load">Firebase SDK Loading…</p>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const loadEl = document.querySelector('#load');
|
||||
// // 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
|
||||
// // The Firebase SDK is initialized and available here!
|
||||
//
|
||||
// firebase.auth().onAuthStateChanged(user => { });
|
||||
// firebase.database().ref('/path/to/ref').on('value', snapshot => { });
|
||||
// firebase.messaging().requestPermission().then(() => { });
|
||||
// firebase.storage().ref('/path/to/ref').getDownloadURL().then(() => { });
|
||||
// firebase.analytics(); // call to activate
|
||||
// firebase.analytics().logEvent('tutorial_completed');
|
||||
// firebase.performance(); // call to activate
|
||||
//
|
||||
// // 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
|
||||
|
||||
try {
|
||||
let app = firebase.app();
|
||||
let features = [
|
||||
'auth',
|
||||
'database',
|
||||
'messaging',
|
||||
'storage',
|
||||
'analytics',
|
||||
'remoteConfig',
|
||||
'performance',
|
||||
].filter(feature => typeof app[feature] === 'function');
|
||||
loadEl.textContent = `Firebase SDK loaded with ${features.join(', ')}`;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
loadEl.textContent = 'Error loading the Firebase SDK, check the console.';
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2020 Mike Lee Williams
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
.PHONY: resume watch clean
|
||||
|
||||
resume: resume.pdf resume.html
|
||||
|
||||
watch:
|
||||
ls *.md *.css | entr make resume
|
||||
|
||||
name := $(shell grep "^\#" resume.md | head -1 | sed -e 's/^\#[[:space:]]*//' | xargs)
|
||||
|
||||
resume.html: preamble.html resume.md postamble.html
|
||||
cat preamble.html | sed -e 's/___NAME___/$(name)/' > $@
|
||||
python3 -m markdown -x smarty resume.md >> $@
|
||||
cat postamble.html >> $@
|
||||
|
||||
resume.pdf: resume.html resume.css
|
||||
weasyprint resume.html resume.pdf
|
||||
qpdf --empty --pages ./resume.pdf 1-1 -- ./resume.truncate.pdf
|
||||
mv ./resume.truncate.pdf ./resume.pdf
|
||||
|
||||
clean:
|
||||
rm -f resume.html resume.pdf
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
# resume.md
|
||||
|
||||

|
||||
|
||||
|
||||
Write your resume in
|
||||
[Markdown](https://raw.githubusercontent.com/williamsmj/resume.md/main/resume.md),
|
||||
style it with [CSS](resume.css), output to [HTML](resume.html) and
|
||||
[PDF](resume.pdf).
|
||||
|
||||
|
||||
## Instructions
|
||||
|
||||
1. Clone this repository
|
||||
|
||||
2. Install the dependencies:
|
||||
<pre>
|
||||
pip install <a href="https://python-markdown.github.io/">markdown</a> <a href="https://weasyprint.org/">weasyprint</a>
|
||||
</pre>
|
||||
|
||||
3. Edit [resume.md](resume.md) (the placeholder text is taken with thanks from the
|
||||
[JSON Resume Project](https://jsonresume.org/themes/))
|
||||
|
||||
4. Run `make resume` to build resume.html and resume.pdf.
|
||||
|
||||
## Customization
|
||||
|
||||
Edit [resume.css](resume.css) to change the appearance of your resume. The
|
||||
default style is extremely generic, which is perhaps what you want in a resume,
|
||||
but CSS gives you a lot of flexibility. See, e.g. [The Tech Resume
|
||||
Inside-Out](https://www.thetechinterview.com/) for good advice about what a
|
||||
resume should look like (and what it should say).
|
||||
|
||||
Because the source is plain markdown and python-markdown is a very bare bones
|
||||
markdown compiler, elements cannot be tagged with ids or classes in the markdown
|
||||
source. If you need more control over the HTML, take a look at
|
||||
[kramdown](https://kramdown.gettalong.org/syntax.html). I chose not to use it
|
||||
for this project to avoid a non-python dependency.
|
||||
|
||||
Change the appearance of the PDF version (without affecting the HTML version) by
|
||||
adding rules under the `@media print` CSS selector.
|
||||
|
||||
Change the margins and paper size of the PDF version by editing the [`@page` CSS
|
||||
rule](https://developer.mozilla.org/en-US/docs/Web/CSS/%40page/size).
|
||||
|
||||
If you make a resume.css that you like, please submit a pull request. I'd be
|
||||
happy to collect these.
|
||||
|
||||
## Tips
|
||||
|
||||
Run `make watch` while you are working on your resume to rebuild it whenever
|
||||
resume.md or resume.css change (requires
|
||||
[entr](http://eradman.com/entrproject/)).
|
||||
|
||||
The simplest way to maintain multiple versions of your resume is to comment bits
|
||||
of text in or out based on the audience. This can be done with standard HTML
|
||||
comment syntax (e.g. `<!-- Skills: Microsoft Word -->`) but beware that
|
||||
commented out text will be included in the HTML source that you are presumably
|
||||
going to put online or share.
|
||||
|
||||
An alternative is to keep snippets of Markdown (or CSS) in separate files, and
|
||||
collect them into a single file for each version of your resume using a
|
||||
templating tool, makefile or shell script.
|
||||
|
||||
Use, e.g. `git tag` to record which version of the resume you sent to which
|
||||
person.
|
||||
|
||||
Use `git diff --word-diff` to make `git diff` more legible (this applies any
|
||||
time you run git diff on natural language).
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
</div>
|
||||
|
||||
<script src="/__/firebase/7.21.1/firebase-app.js"></script>
|
||||
<script src="/__/firebase/init.js"></script>
|
||||
|
||||
</body>
|
||||
<br>
|
||||
<footer>
|
||||
<div id="social">
|
||||
<a title="PDF" href="./resume.pdf">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16 11h5l-9 10-9-10h5v-11h8v11zm1 11h-10v2h10v-2z"/></svg>
|
||||
</a>
|
||||
<a title="LinkedIn" href="https://linkedin.com/in/lapoba16">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a title="Website" href="https://blapointe.com/">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13.144 8.171c-.035-.066.342-.102.409-.102.074.009-.196.452-.409.102zm-2.152-3.072l.108-.031c.064.055-.072.095-.051.136.086.155.021.248.008.332-.014.085-.104.048-.149.093-.053.066.258.075.262.085.011.033-.375.089-.304.171.096.136.824-.195.708-.176.225-.113.029-.125-.097-.19-.043-.215-.079-.547-.213-.68l.088-.102c-.206-.299-.36.362-.36.362zm13.008 6.901c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12s5.372-12 12-12c6.627 0 12 5.373 12 12zm-8.31-5.371c-.006-.146-.19-.284-.382-.031-.135.174-.111.439-.184.557-.104.175.567.339.567.174.025-.277.732-.063.87-.025.248.069.643-.226.211-.381-.355-.13-.542-.269-.574-.523 0 0 .188-.176.106-.166-.218.027-.614.786-.614.395zm6.296 5.371c0-1.035-.177-2.08-.357-2.632-.058-.174-.189-.312-.359-.378-.256-.1-1.337.597-1.5.254-.107-.229-.324.146-.572.008-.12-.066-.454-.515-.605-.46-.309.111.474.964.688 1.076.201-.152.852-.465.992-.038.268.804-.737 1.685-1.251 2.149-.768.694-.624-.449-1.147-.852-.275-.211-.272-.66-.55-.815-.124-.07-.693-.725-.688-.813l-.017.166c-.094.071-.294-.268-.315-.321 0 .295.48.765.639 1.001.271.405.416.995.748 1.326.178.178.858.914 1.035.898.193-.017.803-.458.911-.433.644.152-1.516 3.205-1.721 3.583-.169.317.138 1.101.113 1.476-.029.433-.37.573-.693.809-.346.253-.265.745-.556.925-.517.318-.889 1.353-1.623 1.348-.216-.001-1.14.36-1.261.007-.094-.256-.22-.45-.353-.703-.13-.248-.015-.505-.173-.724-.109-.152-.475-.497-.508-.677-.002-.155.117-.626.28-.708.229-.117.044-.458.016-.656-.048-.354-.267-.646-.53-.851-.389-.299-.188-.537-.097-.964 0-.204-.124-.472-.398-.392-.564.164-.393-.44-.804-.413-.296.021-.538.209-.813.292-.346.104-.7-.082-1.042-.125-1.407-.178-1.866-1.786-1.499-2.946.037-.19-.114-.542-.048-.689.158-.352.48-.747.762-1.014.158-.15.361-.112.547-.229.287-.181.291-.553.572-.781.4-.325.946-.318 1.468-.388.278-.037 1.336-.266 1.503-.06 0 .038.191.604-.019.572.433.023 1.05.749 1.461.579.211-.088.134-.736.567-.423.262.188 1.436.272 1.68.069.15-.124.234-.93.052-1.021.116.115-.611.124-.679.098-.12-.044-.232.114-.425.025.116.055-.646-.354-.218-.667-.179.131-.346-.037-.539.107-.133.108.062.18-.128.274-.302.153-.53-.525-.644-.602-.116-.076-1.014-.706-.77-.295l.789.785c-.039.025-.207-.286-.207-.059.053-.135.02.579-.104.347-.055-.089.09-.139.006-.268 0-.085-.228-.168-.272-.226-.125-.155-.457-.497-.637-.579-.05-.023-.764.087-.824.11-.07.098-.13.201-.179.311-.148.055-.287.126-.419.214l-.157.353c-.068.061-.765.291-.769.3.029-.075-.487-.171-.453-.321.038-.165.213-.68.168-.868-.048-.197 1.074.284 1.146-.235.029-.225.046-.487-.313-.525.068.008.695-.246.799-.36.146-.168.481-.442.724-.442.284 0 .223-.413.354-.615.131.053-.07.376.087.507-.01-.103.445.057.489.033.104-.054.684-.022.594-.294-.1-.277.051-.195.181-.253-.022.009.34-.619.402-.413-.043-.212-.421.074-.553.063-.305-.024-.176-.52-.061-.665.089-.115-.243-.256-.247-.036-.006.329-.312.627-.241 1.064.108.659-.735-.159-.809-.114-.28.17-.509-.214-.364-.444.148-.235.505-.224.652-.476.104-.178.225-.385.385-.52.535-.449.683-.09 1.216-.041.521.048.176.124.104.324-.069.19.286.258.409.099.07-.092.229-.323.298-.494.089-.222.901-.197.334-.536-.374-.223-2.004-.672-3.096-.672-.236 0-.401.263-.581.412-.356.295-1.268.874-1.775.698-.519-.179-1.63.66-1.808.666-.065.004.004-.634.358-.681-.153.023 1.247-.707 1.209-.859-.046-.18-2.799.822-2.676 1.023.059.092.299.092-.016.294-.18.109-.372.801-.541.801-.505.221-.537-.435-1.099.409l-.894.36c-1.328 1.411-2.247 3.198-2.58 5.183-.013.079.334.226.379.28.112.134.112.712.167.901.138.478.479.744.74 1.179.154.259.41.914.329 1.186.108-.178 1.07.815 1.246 1.022.414.487.733 1.077.061 1.559-.217.156.33 1.129.048 1.368l-.361.093c-.356.219-.195.756.021.982 1.818 1.901 4.38 3.087 7.22 3.087 5.517 0 9.989-4.472 9.989-9.989zm-11.507-6.357c.125-.055.293-.053.311-.22.015-.148.044-.046.08-.1.035-.053-.067-.138-.11-.146-.064-.014-.108.069-.149.104l-.072.019-.068.087.008.048-.087.106c-.085.084.002.139.087.102z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a title="Email" href="mailto:contact@blapointe.com">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M0 3v18h24v-18h-24zm6.623 7.929l-4.623 5.712v-9.458l4.623 3.746zm-4.141-5.929h19.035l-9.517 7.713-9.518-7.713zm5.694 7.188l3.824 3.099 3.83-3.104 5.612 6.817h-18.779l5.513-6.812zm9.208-1.264l4.616-3.741v9.348l-4.616-5.607z"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
<div id="thanks">
|
||||
<div>
|
||||
Thanks to <a href="https://github.com/williamsmj/resume.md/">resume.md</a> and <a href="https://iconmonstr.com/">iconmonstr</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</html>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>___NAME___</title>
|
||||
<link rel="stylesheet" type="text/css" href="resume.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="resume">
|
||||
|
|
@ -1,178 +0,0 @@
|
|||
body {
|
||||
color: #000000;
|
||||
background: #EEEEEE;
|
||||
font: 1.1em "Times New Roman";
|
||||
line-height: 1.2;
|
||||
margin: 40px 0;
|
||||
}
|
||||
#resume, footer {
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #CCCCCC;
|
||||
box-shadow: 2px 2px 4px #AAAAAA;
|
||||
-webkit-box-shadow: 2px 2px 4px #AAAAAA;
|
||||
}
|
||||
#social > a {
|
||||
display: block;
|
||||
max-width: 2em;
|
||||
width: 2em;
|
||||
}
|
||||
#social {
|
||||
padding: 20px 30px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
#social a, #social a:link, #social a:visited {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#social a {
|
||||
margin: 0 1em 0 0;
|
||||
}
|
||||
#social a:hover {
|
||||
color: #444;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#resume {
|
||||
max-width: 800px;
|
||||
padding: 40px 60px;
|
||||
}
|
||||
footer {
|
||||
max-width: 925px;
|
||||
}
|
||||
#resume, footer {
|
||||
margin: 0 auto;
|
||||
}
|
||||
h1 {
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
font-size: 150%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
h2 {
|
||||
border-bottom: 1px solid #000000;
|
||||
text-transform: uppercase;
|
||||
font-size: 130%;
|
||||
margin: 1.0em 0 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
h3 {
|
||||
font-size: 100%;
|
||||
margin: 0.8em 0 0.3em 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
h3 > div:nth-child(1) {
|
||||
flex: 1;
|
||||
padding: 0 2em 0 0;
|
||||
}
|
||||
h3 > div:nth-child(2) {
|
||||
flex: none;
|
||||
}
|
||||
p {
|
||||
margin: 0 0 0.5em 0;
|
||||
padding: 0;
|
||||
}
|
||||
ul {
|
||||
padding: 0;
|
||||
margin: 0 1.5em;
|
||||
}
|
||||
/* ul immediately after h1 = contact list */
|
||||
h1 + ul {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
margin: .5em 0 0 0;
|
||||
}
|
||||
h1 + ul > li {
|
||||
margin: initial;
|
||||
display: inline;
|
||||
white-space: pre;
|
||||
list-style-type: none;
|
||||
}
|
||||
h1 + ul > li:after {
|
||||
content: " \2022 ";
|
||||
}
|
||||
h1 + ul > li:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
/* p immediately after contact list = summary */
|
||||
h1 + ul + p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
footer {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
footer > div {
|
||||
flex: 2;
|
||||
min-width: 20em;
|
||||
}
|
||||
#thanks {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
opacity: 75%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
@media print {
|
||||
body {
|
||||
font-size: 12pt;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
}
|
||||
#resume {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0px;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
}
|
||||
/* Make links black in PDF */
|
||||
/* Move this outside the print block to apply this in HTML too */
|
||||
a, a:link, a:visited, a:hover {
|
||||
color: #000000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
/*
|
||||
ul:not(:nth-child(2)) > li:nth-child(1),
|
||||
ul:not(:nth-child(2)) > li:nth-child(2) {
|
||||
display: list-item;
|
||||
}
|
||||
ul:not(:nth-child(2)) > li,
|
||||
*/
|
||||
footer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@page {
|
||||
/* Change margins and paper size of PDF */
|
||||
/* https://developer.mozilla.org/en-US/docs/Web/CSS/@page */
|
||||
size: letter;
|
||||
margin: 0.5in 0.8in;
|
||||
}
|
||||
@media screen and (max-width: 800px) {
|
||||
body {
|
||||
font-size: 16pt;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #FFFFFF !important;
|
||||
}
|
||||
#resume {
|
||||
margin: 0;
|
||||
padding: 1em;
|
||||
border: 0px;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Bree LaPointe</title>
|
||||
<link rel="stylesheet" type="text/css" href="resume.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="resume">
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
<!-- Accomplished [X] by measure of [Y] by doing [Z] -->
|
||||
# Bree LaPointe
|
||||
|
||||
- <contact@blapointe.com>
|
||||
- 336-701-6159
|
||||
- [blapointe.com](https://blapointe.com)
|
||||
- Provo, UT
|
||||
|
||||
## Experience
|
||||
|
||||
### <div><div>Senior Software Engineer, <i>Qualtrics</i></div></div> <div>May 2022 -- Present</div>
|
||||
|
||||
<!-- tmp -->
|
||||
|
||||
### <div><div>Software Engineer II, <i>Qualtrics</i></div></div> <div>Oct 2019 -- May 2022</div>
|
||||
|
||||
- Developed and owned highly available and reliable data storage and operational tooling.
|
||||
- Mentored 2 interns, 2 new hires, and 3 mid-level cross team engineers on operational tools, maintainable software, and career development.
|
||||
- Led genericized AWS asset management tooling ahead of company-wide mass migration initiative.
|
||||
|
||||
### <div><div>Software Engineer I, <i>Qualtrics</i></div></div> <div>Feb 2018 -- Oct 2019</div>
|
||||
|
||||
- Automated no-downtime system patching for 30 services and 25 database clusters by creating a modular and testable scripting framework.
|
||||
- Increased availability of a service from 98% to 99.99% and reduced hardware costs by 40% by selecting, training team on, and migrating without service interruption to a different database.
|
||||
|
||||
## Projects
|
||||
|
||||
### <div>Disaster Recovery Champion</div> <div>Dec 2020 -- Present</div>
|
||||
|
||||
- Supported training runs with documentation, tools, and live support for all teams.
|
||||
- Enforced continuous compliance for 17 database clusters with monitoring and alerting.
|
||||
|
||||
### <div>Software Engineering Book Club and White Paper Club Lead</div> <div>Jan 2019 -- Present</div>
|
||||
|
||||
### <div>MongoDB Virtual Team Member</div> <div>Jul 2018 -- Present</div>
|
||||
|
||||
- Encouraged performant and reliable deployments by advising on configuration and data models.
|
||||
- Genericized disaster recovery for 21 teams by building backup, restore, and monitoring tools.
|
||||
|
||||
### <div>Publication: Arabidopsis thaliana computationally-generated next-state gene interaction models</div> <div>Jan 2017 -- Dec 2017</div>
|
||||
|
||||
- Improved research implementation efficiency by orders of magnitude by refactoring.
|
||||
|
||||
## Education
|
||||
|
||||
### <div><div>Master of Science, Computer Science, <i>Wake Forest University</i></div></div> <div>Jan 2016 -- Dec 2017</div>
|
||||
|
||||
- 3.88/4.00 GPA
|
||||
|
||||
### <div><div>Bachelor of Arts, Computer Science, <i>High Point University</i></div></div> <div>Aug 2013 -- Dec 2015</div>
|
||||
|
||||
- 3.91/4.00 GPA
|
||||
|
||||
## Skills
|
||||
|
||||
- **Languages**: Golang, Python3, bash
|
||||
- **Platforms**: MongoDB, Redis, Linux, AWS, Docker, Rundeck, Jenkins, Hashicorp stack
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 118 KiB |
|
|
@ -1,5 +0,0 @@
|
|||
pip3 install weasyprint markdown
|
||||
sudo apt-get install libcairo2-dev
|
||||
sudo apt-get install -y libsdl-pango-dev
|
||||
sudo apt-get install -y qpdf
|
||||
echo 'while true; do make resume; sleep 3; done &> /dev/null & disown'
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
module gogs.inhome.blapointe.com/local/resume
|
||||
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
gogs.inhome.blapointe.com/local/args v0.0.0-20230410154220-44370f257b34
|
||||
golang.org/x/time v0.3.0
|
||||
)
|
||||
|
||||
require gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
gogs.inhome.blapointe.com/local/args v0.0.0-20230410154220-44370f257b34 h1:0tuX5dfOksiOQD1vbJjVNVTVxTTIng7UrUdSLF5T+Ao=
|
||||
gogs.inhome.blapointe.com/local/args v0.0.0-20230410154220-44370f257b34/go.mod h1:YG9n3Clg7683ohkVnJK2hdX8bBS9EojIsd1qPZumX0Y=
|
||||
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
||||
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,301 @@
|
|||
<html>
|
||||
<head>
|
||||
<link rel="preload" as="font" href="./fonts/Lato-Regular.ttf" type="font/ttf" crossorigin="anonymous">
|
||||
</link>
|
||||
<link rel="preload" as="font" href="./fonts/Lato-Bold.ttf" type="font/ttf" crossorigin="anonymous">
|
||||
</link>
|
||||
<style>
|
||||
@media print { .no-print, .no-print * { visibility: hidden !important; } }
|
||||
@font-face {font-family: "Roboto"; src: url("./fonts/Roboto-Regular.ttf");}
|
||||
@font-face {font-family: "Roboto"; src: url("./fonts/Roboto-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Lato"; src: url("./fonts/Lato-Regular.ttf");}
|
||||
@font-face {font-family: "Lato"; src: url("./fonts/Lato-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Montserrat"; src: url("./fonts/Montserrat-Regular.ttf");}
|
||||
@font-face {font-family: "Montserrat"; src: url("./fonts/Montserrat-Bold.ttf"); font-weight: bold;}@font-face {font-family: "OpenSans"; src: url("./fonts/OpenSans-Regular.ttf");}
|
||||
@font-face {font-family: "OpenSans"; src: url("./fonts/OpenSans-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Raleway"; src: url("./fonts/Raleway-Regular.ttf");}
|
||||
@font-face {font-family: "Raleway"; src: url("./fonts/Raleway-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Caladea"; src: url("./fonts/Caladea-Regular.ttf");}
|
||||
@font-face {font-family: "Caladea"; src: url("./fonts/Caladea-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Lora"; src: url("./fonts/Lora-Regular.ttf");}
|
||||
@font-face {font-family: "Lora"; src: url("./fonts/Lora-Bold.ttf"); font-weight: bold;}@font-face {font-family: "RobotoSlab"; src: url("./fonts/RobotoSlab-Regular.ttf");}
|
||||
@font-face {font-family: "RobotoSlab"; src: url("./fonts/RobotoSlab-Bold.ttf"); font-weight: bold;}@font-face {font-family: "PlayfairDisplay"; src: url("./fonts/PlayfairDisplay-Regular.ttf");}
|
||||
@font-face {font-family: "PlayfairDisplay"; src: url("./fonts/PlayfairDisplay-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Merriweather"; src: url("./fonts/Merriweather-Regular.ttf");}
|
||||
@font-face {font-family: "Merriweather"; src: url("./fonts/Merriweather-Bold.ttf"); font-weight: bold;}
|
||||
</style>
|
||||
</head>
|
||||
<body style="margin: auto !important; padding-bottom: .0em !important; max-width: 512pt; margin: 0; padding: 0; -webkit-text-size-adjust:none;">
|
||||
<div>
|
||||
<div class="frame-content">
|
||||
<document title="Bree LaPointe Resume" author="Bree LaPointe " producer="OpenResume">
|
||||
<page style="display: flex; flex-direction: column; color: rgb(23, 23, 23); font-family: Lato; font-size: 11.5pt;">
|
||||
<view style="width: 100%; height: 10.5pt; background-color: rgb(129, 140, 248);">
|
||||
</view>
|
||||
<view style="display: flex; flex-direction: column; padding: 0px 18pt;">
|
||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||
<text>
|
||||
<text style="color: rgb(129, 140, 248); font-weight: bold; font-size: 20pt;">Bree LaPointe
|
||||
</text>
|
||||
</text>
|
||||
|
||||
<a href="./BreeLaPointeResume.pdf" download class="no-print">
|
||||
<text style="color: rgb(99, 99, 99); font-weight: normal; text-decoration: none;"><u>Download as PDF</u>
|
||||
</text>
|
||||
</a>
|
||||
|
||||
</view>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Senior Software Engineer
|
||||
</text>
|
||||
<view style="display: flex; flex-flow: row wrap; justify-content: space-between; margin-top: 1.5pt;">
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row; align-items: center; gap: 3pt;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M64 112c-8.8 0-16 7.2-16 16v22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16H64zM48 212.2V384c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z"></path></svg>
|
||||
|
||||
<a href="mailto:hello@breel.dev" style="text-decoration: none;" target="_blank" rel="noreferrer">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">hello@breel.dev</text>
|
||||
</a>
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; align-items: center; gap: 3pt;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><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"></path></svg>
|
||||
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Provo, UT</text>
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; align-items: center; gap: 3pt;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>
|
||||
|
||||
<a href="https://linkedin.com/in/breeldev" style="text-decoration: none;" target="_blank" rel="noreferrer">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">linkedin.com/in/breeldev</text>
|
||||
</a>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||
</view>
|
||||
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Work Experience</text>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
|
||||
<view>
|
||||
|
||||
<span style="font-size: 14pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">Render</text>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Senior Software Engineer</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">May 2025 - Present
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Stabilized automated management, performance tuning, and point-in-time-recovery infrastructure of tens of thousands of PostgreSQL databases.</text>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Dec 2023 - May 2025
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Crafted PostgreSQL low-downtime migrations and in-place major version upgrades.</text>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view>
|
||||
|
||||
<span style="font-size: 14pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">Qualtrics</text>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Senior Software Engineer, Team Lead</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">May 2022 - Dec 2023
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.</text>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer II</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Oct 2019 - May 2022
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.</text>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer I</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Feb 2018 - Oct 2019
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded Python tookit for full and incremental MongoDB backups, supporting partitioned deployments. The in-house standard for 21 teams.</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Decreased internal service's annual outages by 91% and hardware costs by 40% via database migration. Scoped alternatives, projected costs, and designed cutover.</text>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||
</view>
|
||||
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Education</text>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
|
||||
<view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-wo-headings">Wake Forest University</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;"><no value>
|
||||
</text>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Master of Science in Computer Science - 3.88/4.00 GPA
|
||||
</text>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||
</view>
|
||||
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Skills</text>
|
||||
</view>
|
||||
|
||||
|
||||
<view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Languages: Go (Golang), Bash, Python3</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Platforms: Kubernetes, Temporal, Hashicorp, Linux/Unix, AWS, REST, Microservices</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">Datastores: PostgreSQL, MongoDB, Redis, S3, Couchbase, DynamoDB</text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</page>
|
||||
</document>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Binary file not shown.
|
|
@ -0,0 +1,29 @@
|
|||
#! /bin/bash
|
||||
|
||||
if ! which tpl; then
|
||||
go install github.com/bluebrown/go-template-cli/cmd/tpl@latest
|
||||
fi &> /dev/null
|
||||
if ! which gojq; then
|
||||
go install github.com/itchyny/gojq@latest
|
||||
fi &> /dev/null
|
||||
|
||||
html_escape_str() {
|
||||
local str="$1"
|
||||
for i in $(seq 0 $(("${#str}"-1))); do
|
||||
LC_CTYPE=C printf '&#%d;' "'"${1:i:1}
|
||||
done
|
||||
}
|
||||
html_escape_str contact@blapointe.com
|
||||
|
||||
while sleep 1; do
|
||||
cat ./homebrew.yaml \
|
||||
| sed "s/@/$(html_escape_str @ | sed 's/\&/\\\&/g')/g" \
|
||||
| sed "s/mailto:/$(html_escape_str mailto: | sed 's/\&/\\\&/g')/g" \
|
||||
| sed "s/tel:/$(html_escape_str tel: | sed 's/\&/\\\&/g')/g" \
|
||||
| gojq --yaml-input . \
|
||||
| tpl --file homebrew.tmpl \
|
||||
> ./homebrew.html.2
|
||||
mv ./homebrew.html.2 ./homebrew.html
|
||||
date
|
||||
done
|
||||
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
<html>
|
||||
<head>
|
||||
<link rel="preload" as="font" href="./fonts/Lato-Regular.ttf" type="font/ttf" crossorigin="anonymous">
|
||||
</link>
|
||||
<link rel="preload" as="font" href="./fonts/Lato-Bold.ttf" type="font/ttf" crossorigin="anonymous">
|
||||
</link>
|
||||
<style>
|
||||
@media print { .no-print, .no-print * { visibility: hidden !important; } }
|
||||
@font-face {font-family: "Roboto"; src: url("./fonts/Roboto-Regular.ttf");}
|
||||
@font-face {font-family: "Roboto"; src: url("./fonts/Roboto-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Lato"; src: url("./fonts/Lato-Regular.ttf");}
|
||||
@font-face {font-family: "Lato"; src: url("./fonts/Lato-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Montserrat"; src: url("./fonts/Montserrat-Regular.ttf");}
|
||||
@font-face {font-family: "Montserrat"; src: url("./fonts/Montserrat-Bold.ttf"); font-weight: bold;}@font-face {font-family: "OpenSans"; src: url("./fonts/OpenSans-Regular.ttf");}
|
||||
@font-face {font-family: "OpenSans"; src: url("./fonts/OpenSans-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Raleway"; src: url("./fonts/Raleway-Regular.ttf");}
|
||||
@font-face {font-family: "Raleway"; src: url("./fonts/Raleway-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Caladea"; src: url("./fonts/Caladea-Regular.ttf");}
|
||||
@font-face {font-family: "Caladea"; src: url("./fonts/Caladea-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Lora"; src: url("./fonts/Lora-Regular.ttf");}
|
||||
@font-face {font-family: "Lora"; src: url("./fonts/Lora-Bold.ttf"); font-weight: bold;}@font-face {font-family: "RobotoSlab"; src: url("./fonts/RobotoSlab-Regular.ttf");}
|
||||
@font-face {font-family: "RobotoSlab"; src: url("./fonts/RobotoSlab-Bold.ttf"); font-weight: bold;}@font-face {font-family: "PlayfairDisplay"; src: url("./fonts/PlayfairDisplay-Regular.ttf");}
|
||||
@font-face {font-family: "PlayfairDisplay"; src: url("./fonts/PlayfairDisplay-Bold.ttf"); font-weight: bold;}@font-face {font-family: "Merriweather"; src: url("./fonts/Merriweather-Regular.ttf");}
|
||||
@font-face {font-family: "Merriweather"; src: url("./fonts/Merriweather-Bold.ttf"); font-weight: bold;}
|
||||
</style>
|
||||
</head>
|
||||
<body style="margin: auto !important; padding-bottom: .0em !important; max-width: 512pt; margin: 0; padding: 0; -webkit-text-size-adjust:none;">
|
||||
<div>
|
||||
<div class="frame-content">
|
||||
<document title="{{ range .resume.name }}{{ . }} {{ end }}Resume" author="{{ range .resume.name }}{{ . }} {{ end }}" producer="OpenResume">
|
||||
<page style="display: flex; flex-direction: column; color: rgb(23, 23, 23); font-family: Lato; font-size: 11.5pt;">
|
||||
<view style="width: 100%; height: 10.5pt; background-color: rgb(129, 140, 248);">
|
||||
</view>
|
||||
<view style="display: flex; flex-direction: column; padding: 0px 18pt;">
|
||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||
<text>
|
||||
<text style="color: rgb(129, 140, 248); font-weight: bold; font-size: 20pt;">{{ range .resume.name }}{{ . }} {{ end }}
|
||||
</text>
|
||||
</text>
|
||||
{{ if .resume.pdf_file_name }}
|
||||
<a href="./{{ .resume.pdf_file_name }}" download class="no-print">
|
||||
<text style="color: rgb(99, 99, 99); font-weight: normal; text-decoration: none;"><u>Download as PDF</u>
|
||||
</text>
|
||||
</a>
|
||||
{{ end }}
|
||||
</view>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .resume.title }}
|
||||
</text>
|
||||
<view style="display: flex; flex-flow: row wrap; justify-content: space-between; margin-top: 1.5pt;">
|
||||
|
||||
{{ range .resume.contact.links }}
|
||||
<view style="display: flex; flex-direction: row; align-items: center; gap: 3pt;">
|
||||
{{ .svg }}
|
||||
{{ if .link }}
|
||||
<a href="{{ .link }}" style="text-decoration: none;" target="_blank" rel="noreferrer">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .text }}</text>
|
||||
</a>
|
||||
{{ else }}
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .text }}</text>
|
||||
{{ end }}
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
</view>
|
||||
</view>
|
||||
|
||||
{{ range .resume.headings }}
|
||||
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
|
||||
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
|
||||
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
|
||||
</view>
|
||||
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">{{ .title }}</text>
|
||||
</view>
|
||||
|
||||
{{ if .what }}
|
||||
<view>
|
||||
{{ range .what }}
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}</text>
|
||||
</view>
|
||||
{{ end }}
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
{{ range .headings }}
|
||||
<view>
|
||||
{{ if .headings }}
|
||||
<span style="font-size: 14pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">{{ .title }}</text>
|
||||
</span>
|
||||
{{ else }}
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-wo-headings">{{ .title }}</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .when }}
|
||||
</text>
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
{{ range .what }}
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}
|
||||
</text>
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
{{ range .headings }}
|
||||
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">{{ .title }}</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">{{ .when }}
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
|
||||
|
||||
{{ range .what }}
|
||||
<view style="display: flex; flex-direction: row;">
|
||||
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">•</text>
|
||||
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">{{ . }}</text>
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
</view>
|
||||
{{ end }}
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</page>
|
||||
</document>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
resume:
|
||||
pdf_file_name: BreeLaPointeResume.pdf
|
||||
name:
|
||||
- Bree
|
||||
- LaPointe
|
||||
title: 'Senior Software Engineer'
|
||||
contact:
|
||||
links:
|
||||
- text: 'hello@breel.dev'
|
||||
link: 'mailto:hello@breel.dev'
|
||||
svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M64 112c-8.8 0-16 7.2-16 16v22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16H64zM48 212.2V384c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z"></path></svg>'
|
||||
#- text: (336) 701-6159
|
||||
# link: 'tel:3367016159'
|
||||
# svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><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"></path></svg>'
|
||||
- text: Provo, UT
|
||||
svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><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"></path></svg>'
|
||||
- text: linkedin.com/in/breeldev
|
||||
link: https://linkedin.com/in/breeldev
|
||||
svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>'
|
||||
headings:
|
||||
- title: Work Experience
|
||||
headings:
|
||||
- title: Render
|
||||
headings:
|
||||
- title: Senior Software Engineer
|
||||
when: May 2025 - Present
|
||||
what:
|
||||
- Stabilized automated management, performance tuning, and point-in-time-recovery infrastructure of tens of thousands of PostgreSQL databases.
|
||||
# 40k paid, 30k free in 2025-12
|
||||
# performance tuning -> PGExport queries
|
||||
# pitr -> pitr holes, synchronous success tracking
|
||||
- title: Software Engineer
|
||||
when: Dec 2023 - May 2025
|
||||
what:
|
||||
- Crafted PostgreSQL low-downtime migrations and in-place major version upgrades.
|
||||
# PGUpgrades
|
||||
# continuous canary testing matrix
|
||||
# 3 major version targets
|
||||
# FCR
|
||||
# all-in-one solution for cross-region, cross-account, cross-provider migrations
|
||||
# via physical replication
|
||||
# customer-triggered promotion
|
||||
# coupled to power HIPAA migration
|
||||
- title: Qualtrics
|
||||
headings:
|
||||
- title: Senior Software Engineer, Team Lead
|
||||
when: May 2022 - Dec 2023
|
||||
what:
|
||||
- Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.
|
||||
# Atlas QMP Consumer
|
||||
# optimized garbage collection of many small objects
|
||||
# from maps and allocs to pointers and slices
|
||||
#- Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index.
|
||||
- Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.
|
||||
# Scanned AWS assets -> interactive script replicated configs to new AWS region
|
||||
# cloned S3, SQS, SNS, DynamoDB assets
|
||||
- Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.
|
||||
- Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.
|
||||
# Mongosback backup-check lists S3 for last backup timestamp
|
||||
- Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.
|
||||
# CRUDdy
|
||||
# tied to Nomad spec
|
||||
# on boot, healthchecks fail for new instance until e2e tests pass per-instance
|
||||
# blocked releases to staging
|
||||
- title: Software Engineer II
|
||||
when: Oct 2019 - May 2022
|
||||
what:
|
||||
#- "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances."
|
||||
- Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.
|
||||
# Nexpose-Remediations
|
||||
# Couchbase, Mongo, GaleraDB covered
|
||||
# spindown, isSpindownComplete, patch, reboot, pollRebooted, spinup, isSpinupComplete
|
||||
# used cross-team for all Mongo instances
|
||||
# bash tested via `source unit_test_setup.sh; test my_method`
|
||||
#- Administered on-call training, including 6 chaos tests gamedays across 5 systems.
|
||||
- title: Software Engineer I
|
||||
when: Feb 2018 - Oct 2019
|
||||
what:
|
||||
- Founded Python tookit for full and incremental MongoDB backups, supporting partitioned deployments. The in-house standard for 21 teams.
|
||||
# Mongosback
|
||||
# Python3 script
|
||||
# Handles sharded AND replica sets
|
||||
# watches for any shard in progress AND replica set healthy enough to continue
|
||||
- Decreased internal service's annual outages by 91% and hardware costs by 40% via database migration. Scoped alternatives, projected costs, and designed cutover.
|
||||
# Couchbase for GENI (MaraudersMap) was a mess
|
||||
# indexes just kinda disappeared, meaning table scans often
|
||||
# evaluated Mongo, Galera, CockroachDB
|
||||
# Mongo ran with little RAM on laptop + fast startup + lowest latency
|
||||
- title: Education
|
||||
headings:
|
||||
- title: Wake Forest University
|
||||
not-when: Dec 2017
|
||||
what:
|
||||
- Master of Science in Computer Science - 3.88/4.00 GPA
|
||||
#- title: High Point University
|
||||
# not-when: Dec 2015
|
||||
# what:
|
||||
# - Bachelor of Arts in Computer Science - 3.91/4.00 GPA
|
||||
#- title: PUBLICATIONS
|
||||
# headings:
|
||||
# - title: Arabidopsis thaliana computationally-generated next-state gene interaction models
|
||||
# when: Jun 2018
|
||||
# what:
|
||||
# - Refactored to correct bugs and improve efficiency by orders of magnitude
|
||||
- title: Skills
|
||||
what:
|
||||
- 'Languages: Go (Golang), Bash, Python3'
|
||||
- 'Platforms: Kubernetes, Temporal, Hashicorp, Linux/Unix, AWS, REST, Microservices'
|
||||
- 'Datastores: PostgreSQL, MongoDB, Redis, S3, Couchbase, DynamoDB'
|
||||
|
||||
|
|
@ -2,7 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"local/args"
|
||||
"gogs.inhome.blapointe.com/local/args"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
Loading…
Reference in New Issue