174 Commits

Author SHA1 Message Date
Bel LaPointe
8e119c59e0 whitespace 2023-10-19 10:12:47 -06:00
Bel LaPointe
245a3a739b ensure pdf gen is complete 2023-10-19 10:12:31 -06:00
Bel LaPointe
6cbf36a7cf whitespace 2023-10-19 10:02:08 -06:00
Bel LaPointe
5aa0f0ebab whitespace 2023-10-19 10:01:26 -06:00
Bel LaPointe
e63c4006db ok now 2023-10-19 10:01:12 -06:00
Bel LaPointe
c1370cf6b1 go 2023-10-19 09:53:05 -06:00
Bel LaPointe
9006e9ba22 install miniserve into docker.cicd 2023-10-19 09:50:04 -06:00
Bel LaPointe
b3506dc6aa o 2023-10-19 09:29:25 -06:00
Bel LaPointe
9ac8b7e870 oof 2023-10-19 09:29:16 -06:00
Bel LaPointe
3083378712 whitespace 2023-10-19 09:27:11 -06:00
Bel LaPointe
76def1218c thar we go 2023-10-19 09:27:03 -06:00
Bel LaPointe
12d21ba0f4 try 2023-10-19 09:09:45 -06:00
Bel LaPointe
df81c6b315 no sudo, install wget 2023-10-19 09:02:03 -06:00
Bel LaPointe
3062630e1d install chrome headless and generate BreeLaPointeResume.pdf from homebrew live 2023-10-19 08:55:19 -06:00
bel
52b7176c69 no link nothing 2023-10-18 22:02:37 -06:00
bel
7936c53bdb new pdf 2023-10-18 21:55:44 -06:00
bel
0d36f5b7da basic bitch obfuscation of email, telephone 2023-10-18 21:55:07 -06:00
bel
62885e3b63 pdf 2023-10-18 20:06:23 -06:00
bel
558dcaecc3 typo and yaml-ify 2023-10-18 20:02:05 -06:00
bel
ec1ed7fb88 add Download as PDF button to website but not linked pdf ./BreeLaPointeResume.pdf 2023-10-18 19:57:33 -06:00
bel
820dda9d5d omit education years because ageism bad 2023-10-18 19:11:28 -06:00
Bel LaPointe
fc2ac7ef39 Merge branch 'main' of https://gitness.inhome.blapointe.com/git/portfolio/resume 2023-10-18 11:23:27 -06:00
Bel LaPointe
9fc2142295 one more 2023-10-18 11:22:56 -06:00
bel
8842ccf514 white space 2023-10-17 21:52:04 -06:00
bel
565f9e8c8c more concerns 2023-10-17 21:27:32 -06:00
bel
e861816019 more concerns 2023-10-16 20:58:15 -06:00
bel
4751c09772 more concerns 2023-10-16 20:49:45 -06:00
bel
9ce8ab9722 order 2023-10-16 20:32:11 -06:00
bel
3cbe621dce concerns 2023-10-16 20:31:26 -06:00
bel
65caa9527f new 2023-10-16 20:29:08 -06:00
bel
9a1ce92160 stub questions to ask 2023-10-16 20:25:20 -06:00
bel
c275bf5f4e rename 2023-10-16 19:34:43 -06:00
Bel LaPointe
4223a5767d mv from /src/homebrew/2020.yaml to /diary 2023-10-16 11:02:04 -06:00
Bel LaPointe
422f7205d2 raw form of 2020..2023 oct 2023-10-16 11:00:37 -06:00
bel
de42646ae5 white space 2023-10-15 14:53:19 -06:00
bel
c543a78033 drop open-resume for homebrewed go template of open-resume because yaml file easier 2023-10-15 14:52:37 -06:00
bel
50f5741041 NOW homebrew ready for move it 2023-10-15 14:42:39 -06:00
bel
0c17821874 homebrew done i spose 2023-10-15 14:42:01 -06:00
bel
7079ad4b1d just whitespace vertical away 2023-10-15 14:38:40 -06:00
bel
98c972cc90 start 2023-10-15 14:18:28 -06:00
bel
2b19a1d2f8 start 2023-10-15 14:16:46 -06:00
bel
86e5716d33 only do full deploy.firebase.sh if open-resume.d changed 2023-10-15 14:13:10 -06:00
bel
4a96954c2d it was because fonts lol 2023-10-15 14:11:36 -06:00
bel
9cfaae18d7 almost homebrew.tmpl but lost 4 columns 2023-10-15 10:28:45 -06:00
bel
b128e9d6f5 open-resume to homebrew.tmpl 2023-10-15 09:36:58 -06:00
bel
173cd383e4 split harness into more stages 2023-10-15 09:02:14 -06:00
bel
93643d0881 new resume.pdf who dis 2023-10-15 09:00:25 -06:00
bel
c5bc7e291d move non-firebase to /src/ 2023-10-15 08:58:26 -06:00
bel
f30e3fbe71 drop json-resume 2023-10-15 08:58:18 -06:00
bel
d7c2207eca must be root user to install deps 2023-10-15 08:20:57 -06:00
bel
f62ab35fa8 use variable findings to set build_before/after to varaible for checking if should docker build 2023-10-15 08:16:30 -06:00
bel
a2a6cccd93 whitespace dockerfile 2023-10-15 08:16:11 -06:00
bel
523c4fd9a6 only docker build if push to main 2023-10-15 08:16:02 -06:00
bel
fb68fce267 whitespace to GO 2023-10-15 08:13:45 -06:00
bel
95c4253e26 hm weird syntax parsing i guess 2023-10-15 08:13:21 -06:00
bel
8e246d07be add debug git diff name only 2023-10-15 08:11:52 -06:00
bel
76ea44a124 add echoes to dockerfile.cicd 2023-10-15 08:09:30 -06:00
bel
a3f7753a71 move vale to inside deploy.firebase.sh 2023-10-15 08:09:01 -06:00
bel
e23d61a4f0 un-debug building portfolio/resume/builder 2023-10-15 08:08:49 -06:00
bel
155bba7b5a sleep until docker ready 2023-10-15 08:05:32 -06:00
bel
143ae9ba04 sleep 2023-10-15 08:04:00 -06:00
bel
0512028c40 copy https://docs.gitness.com/pipelines/samples/docker_dind 2023-10-15 08:01:59 -06:00
bel
78e6af29ed mount dockersock for docker in docker 2023-10-15 07:58:58 -06:00
bel
fce00bad38 force build 2023-10-15 07:56:40 -06:00
bel
be5671616f install git for docker change detection 2023-10-15 07:55:42 -06:00
bel
e8bd522a52 rename portfolio/resume:latest to portfolio/resume/builder:latest 2023-10-15 07:54:08 -06:00
bel
30fdbe31f9 self-host registry for one portfolio/resume:latest builder 2023-10-15 07:48:07 -06:00
bel
6c9d11f035 change all ttf fonts to woff2 and replace in public 2023-10-15 07:25:13 -06:00
bel
47c11b8fba rm debug 2023-10-14 20:49:19 -06:00
bel
de9d53f494 readme 2023-10-14 20:44:34 -06:00
bel
712881ad02 Updated pipeline firebase-deploy 2023-10-15 02:39:56 +00:00
bel
41cee6f459 noninteractive and not home killing 2023-10-14 20:30:59 -06:00
bel
e3e14d6ed0 deploy.firebase.sh pushes static files to gitlab.com/breel/resume for render 2023-10-14 20:22:10 -06:00
bel
8ae43a6356 secret w env 2023-10-11 21:18:04 -06:00
bel
9068fa6647 newline 2023-10-11 21:14:57 -06:00
bel
c72098a66c log 2023-10-11 21:13:51 -06:00
bel
3d2c4ef882 log 2023-10-11 21:12:36 -06:00
bel
ddf2af808c log 2023-10-11 21:12:25 -06:00
bel
a66222e143 go 2023-10-11 21:11:11 -06:00
bel
5570e6edbe go 2023-10-11 21:11:09 -06:00
bel
5b3106f981 go 2023-10-11 21:10:13 -06:00
bel
5f51d1564e mk 2023-10-11 21:07:29 -06:00
bel
e295b06efe agro 2023-10-11 21:06:32 -06:00
bel
143dabb7d9 agro 2023-10-11 21:04:50 -06:00
bel
cc81b47e49 agro 2023-10-11 21:03:43 -06:00
bel
e7ed323f2c agro 2023-10-11 21:01:37 -06:00
bel
507f3436c7 agro 2023-10-11 21:00:28 -06:00
bel
077a03c35e agro 2023-10-11 20:59:33 -06:00
bel
a504c357c5 agro 2023-10-11 20:58:34 -06:00
bel
c24ab809a5 gogo 2023-10-11 20:55:46 -06:00
bel
76aa1a20cf hist 2023-10-11 20:54:26 -06:00
bel
d4560d05fd try vale 2023-10-11 20:53:42 -06:00
bel
96af96b22b k 2023-10-11 20:43:40 -06:00
bel
7864a95eb1 cp -r 2023-10-11 20:42:00 -06:00
bel
a8a0cbad96 more firebase files 2023-10-11 20:41:33 -06:00
bel
9a320d1a43 cd 2023-10-11 20:40:02 -06:00
bel
2fcd38ef01 try temp firebase.json 2023-10-11 20:38:39 -06:00
bel
10f199a93d un-ignore resume.pdf 2023-10-11 20:34:50 -06:00
bel
97e5f3150f tempdir instead of ./deploy 2023-10-11 20:33:24 -06:00
bel
0735f99f65 bash for firebase 2023-10-11 20:32:20 -06:00
bel
9c3c235073 use firebase-tools docker image 2023-10-11 20:30:11 -06:00
bel
afa43aafdf gr 2023-10-11 20:28:30 -06:00
bel
6767833e8e wget old version 2023-10-11 20:26:13 -06:00
bel
09608c5938 no curl 2023-10-11 20:25:44 -06:00
bel
8184467dc2 sh 2023-10-11 20:24:43 -06:00
bel
edaf7b7efd cicd on push 2023-10-11 20:23:31 -06:00
bel
16966c4753 go 2023-10-11 20:23:04 -06:00
bel
ab38461d16 Merge remote-tracking branch 'gitness/main' 2023-10-11 20:21:31 -06:00
bel
83a00d5034 go 2023-10-11 20:21:14 -06:00
bel
f238e32e1f Updated pipeline firebase-deploy 2023-10-12 02:20:22 +00:00
bel
dff3bf2179 Updated pipeline firebase-deploy 2023-10-12 02:09:00 +00:00
bel
30baf3ffef Merge remote-tracking branch 'gitness/main' 2023-10-11 20:05:44 -06:00
bel
a925580e89 go 2023-10-11 20:05:07 -06:00
bel
8b2e8e39fd Updated pipeline firebase-deploy 2023-10-12 02:05:04 +00:00
bel
d94ddad195 Updated pipeline firebase-deploy 2023-10-12 02:04:44 +00:00
bel
204aee596d Updated pipeline firebase-deploy 2023-10-12 02:03:52 +00:00
bel
28cf47111f deploy.firebase.sh cicd read 2023-10-11 20:01:19 -06:00
bel
046903a7f5 Updated pipeline firebase-deploy 2023-10-12 01:59:40 +00:00
bel
c1224ff604 Updated pipeline firebase-deploy 2023-10-12 01:59:27 +00:00
bel
4a2e8dc48b Updated pipeline firebase-deploy 2023-10-12 01:55:21 +00:00
bel
949f968245 Created pipeline firebase-deploy 2023-10-12 01:55:11 +00:00
bel
9cc98adfae stub 2023-10-02 22:30:59 -06:00
bel
af2db988fb k 2023-10-02 22:09:56 -06:00
bel
aba83156ee 1:1 from open-resume to homebrew.yaml 2023-10-02 21:33:42 -06:00
bel
ae6ed10323 typo fixes and upload 2023-10-02 19:48:35 -06:00
bel
0c06d17407 basic typos 2023-10-02 19:32:17 -06:00
bel
c6fc22b178 upgrade resume to zoom nice printed 2023-07-06 23:38:57 -06:00
bel
d1278dc5b7 scrrape fonts 2023-07-06 23:25:30 -06:00
bel
e6c1d153b7 readme 2023-07-06 23:16:36 -06:00
bel
88c4caf3a0 no mo 2023-07-06 23:09:18 -06:00
bel
0e640d0219 swap 2023-07-06 23:09:10 -06:00
bel
7ee12afe20 happy 2023-07-06 23:06:12 -06:00
bel
2ef773b4fe cleaner 2023-07-06 22:40:13 -06:00
bel
ded72f67ed an html 2023-07-06 22:34:31 -06:00
bel
d478599217 closer 2023-07-06 22:32:10 -06:00
bel
cd7251ee45 add html instruction 2023-07-06 22:31:29 -06:00
bel
98fd145856 open-resume.com.d/local-storage...json 2023-07-06 22:20:29 -06:00
bel
4adaa14452 open-resume.com.d/local-storage...json 2023-07-06 22:18:25 -06:00
bel
1e5b251590 wip 2023-07-06 22:14:53 -06:00
bel
e97fcc2d8c log 2023-07-06 21:39:55 -06:00
bel
8b1d395f19 helper 2023-04-27 21:48:17 -06:00
bel
c714db922b KK 2023-04-27 21:47:56 -06:00
bel
6e98d349e8 fixing build.sh for new age and nvm 2023-04-27 21:45:08 -06:00
bel
196bcac6dd master to expert, competent to proficient 2023-04-27 21:11:42 -06:00
Bel LaPointe
abd6e369da gomod 2023-04-10 10:36:56 -06:00
bel
eda630dcde gitignore cache 2022-10-18 16:09:30 -06:00
Bel LaPointe
23b6271f36 rm old 2022-10-18 15:54:48 -06:00
Bel LaPointe
f0c9b1c3a4 rm old 2022-10-18 15:54:32 -06:00
Bel LaPointe
dadd94778b update deploy fire 2022-10-18 15:54:28 -06:00
Bel LaPointe
36b285f706 filled 2022-10-18 15:51:56 -06:00
Bel LaPointe
99b97efd80 content 2022-10-18 15:36:42 -06:00
Bel LaPointe
7deca1b9c9 as good as blapointe.com 2022-10-18 15:27:08 -06:00
Bel LaPointe
49314cc0c5 no long url to arabidopsis 2022-10-18 15:23:30 -06:00
Bel LaPointe
d69c76f85b wip 2022-10-18 15:23:19 -06:00
Bel LaPointe
1d258f18ed no yaml 2022-10-18 14:50:59 -06:00
Bel LaPointe
38390a780c back to json for casing 2022-10-18 14:50:44 -06:00
Bel LaPointe
38470725a6 build is clean and nice 2022-10-18 14:48:13 -06:00
Bel LaPointe
aa7795215e there can only be one 2022-10-18 14:46:29 -06:00
Bel LaPointe
057251fecc yay 2022-10-18 14:45:44 -06:00
Bel LaPointe
204670a626 choose favorites 2022-10-18 14:45:24 -06:00
Bel LaPointe
476bc0ea10 favorites: rocketspacer 2022-10-18 14:42:59 -06:00
Bel LaPointe
7538839ade rank1 2022-10-18 14:36:31 -06:00
Bel LaPointe
91d7b82988 gitignore outputs 2022-10-18 14:27:01 -06:00
Bel LaPointe
56d847ea1e update build.sh for yaml 2022-10-18 14:26:02 -06:00
Bel LaPointe
98e1f7c8cb to json-resume yaml 2022-10-18 14:25:50 -06:00
Bel LaPointe
702dea753e stash 2022-10-18 14:25:33 -06:00
Bel LaPointe
98475466e1 moved theme sampling to json-resume/themes 2022-10-18 14:25:05 -06:00
bel
b21e6a3013 ok sampler 2022-10-17 22:50:28 -06:00
bel
63f7a83318 mvp 2022-10-17 22:07:44 -06:00
bel
32e836579f wip 2022-10-17 21:44:48 -06:00
bel
5c0ea418d5 try jsonresume 2022-10-17 21:24:23 -06:00
bel
9393801259 update .sh to make clean 2022-10-17 20:06:21 -06:00
bel
c9be79a3c8 regen 2022-10-17 20:06:06 -06:00
bel
f8d95489bb rm old build 2022-10-17 20:01:14 -06:00
35 changed files with 1437 additions and 562 deletions

7
.firebase/hosting.ZGVwbG95L3B1YmxpYw.cache Normal file → Executable file
View File

@@ -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
.firebaserc Normal file → Executable file
View File

4
.gitignore vendored Normal file → Executable file
View File

@@ -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

View File

@@ -0,0 +1,86 @@
version: 1
kind: pipeline
spec:
stages:
- name: debug
type: ci
spec:
steps:
- name: debug
type: run
spec:
name: debug
container: alpine/git
shell: sh
script: |
export build_event=${{ build.event }}
export build_target=${{ build.target }}
export build_before=${{ build.before }}
export build_after=${{ build.after }}
env | grep ^build_
git --no-pager diff --name-only $build_before..$build_after
- name: dockers
type: ci
spec:
volumes:
- name: dockersock
spec: {}
type: temp
steps:
- name: dind
when: build.event == "push" && build.target == "main"
type: background
spec:
container:
image: registry-app.inhome.blapointe.com:5001/docker:latest
privileged: true
mount:
- name: dockersock
path: /var/run
- name: docker
type: run
when: build.event == "push" && build.target == "main"
spec:
name: docker
container: registry-app.inhome.blapointe.com:5001/docker:latest
mount:
- name: dockersock
path: /var/run
shell: sh
script: |
set -ueo pipefail
export build_before=${{ build.before }}
export build_after=${{ build.after }}
apk add --no-cache git
t=registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
if git diff --name-only $build_before..$build_after | grep Dockerfile.cicd; then
until docker ps; do
sleep 5
done
docker build -t "$t" -f ./Dockerfile.cicd .
docker push "$t"
fi
- name: build
type: ci
spec:
steps:
- name: build
type: run
when: build.event == "push" && build.target == "main"
spec:
name: build
container:
image: registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
user: root
envs:
FIREBASE_CI_TOKEN: ${{ secrets.get("resume-firebase-squeaky2x3-gmail-token") }}
GITLAB_PAT: ${{ secrets.get("resume-gitlab-gitlab-breel-dev-token") }}
shell: sh
script: |
export build_before=${{ build.before }}
export build_after=${{ build.after }}
if git --no-pager diff --name-only $build_before..$build_after | grep src.homebrew; then
bash ./deploy.firebase.sh
fi

9
.vale.ini Normal file
View File

@@ -0,0 +1,9 @@
StylesPath = styles
MinAlertLevel = suggestion
Packages = proselint, write-good, Readability, Joblint
[*]
BasedOnStyles = Vale, proselint, write-good, Readability, Joblint

22
Dockerfile.cicd Normal file
View File

@@ -0,0 +1,22 @@
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.

18
README.md Executable file
View File

@@ -0,0 +1,18 @@
# Resume
1. modify [homebrew.yaml](./src/homebrew/homebrew.yaml)
1. generate `cd ./src/homebrew; bash ./homebrew.sh`
1. `open ./src/homebrew/homebrew.html`
1. `ctrl + p` and save as pdf
1. commit + push
## CICD
1. `gitness.inhome.blapointe.com` has a `./.harness` pipeline
1. the pipeline
1. renders [Resume](#resume) as `$(mktemp -d)/public`
1. clones [gitlab](https://gitlab.com/breel/resume.git)
1. replaces [gitlab](https://gitlab.com/breel/resume.git) with `.../public/`
1. pushes [gitlab](https://gitlab.com/breel/resume.git)
1. [render](https://dashboard.render.com/static/srv-cklkk8o710pc73d7fn7g) detects public repo event and updates its static site hosting for [breel.dev](https://breel.dev)
1. [firebase](https://console.firebase.google.com/u/0/project/blapointe-com/overview) deploys `.../public/` for [blapointe.com](https://blapointe.com)

525
cv/202001-202310.yaml Normal file
View File

@@ -0,0 +1,525 @@
- 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 wasnt 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

87
cv/concerns.yaml Normal file
View File

@@ -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']

122
deploy.firebase.sh Normal file → Executable file
View File

@@ -1,24 +1,120 @@
#! /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/
firebase login
echo firebase init
firebase deploy || (
firebase logout
firebase login
firebase deploy
echo PRINTING PDF
echo ...which google
which google-chrome-stable
echo ...which miniserve
which miniserve
miniserve $outdir/public &
pid=${!}
until curl localhost:8080; do sleep 5; done
google-chrome-stable \
--no-sandbox \
--headless \
--disable-gpu \
--print-to-pdf=$outdir/public/BreeLaPointeResume.pdf \
--run-all-compositor-stages-before-draw \
--no-pdf-header-footer \
http://localhost:8080/index.html
get_state() {
cksum $outdir/public/BreeLaPointeResume.pdf | awk '{print $1}'
}
state=$(get_state)
while true; do
sleep 5
if [ "$state" == "$(get_state)" ]; then
break
fi
done
kill $pid || true
echo; ls $outdir/public/BreeLaPointeResume.pdf
(
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
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
) || true
(
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[@]}"
)

View File

@@ -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

3
firebase.json Normal file → Executable file
View File

@@ -6,7 +6,8 @@
"**/.*",
"**/node_modules/**",
"firebase*",
"resume.md-main/**"
"resume.md-main/**",
"json-resume/**"
]
}
}

View File

@@ -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>

View File

@@ -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&hellip;</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>

View File

@@ -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.

View File

@@ -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

View File

@@ -1,69 +0,0 @@
# resume.md
![Resume](resume.png)
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).

View File

@@ -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>

View File

@@ -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">

View File

@@ -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;
}
}

View File

@@ -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">

View File

@@ -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

View File

@@ -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'

10
src/go.mod Executable file
View File

@@ -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

8
src/go.sum Executable file
View File

@@ -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.

325
src/homebrew/homebrew.html Normal file
View File

@@ -0,0 +1,325 @@
<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; 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: 11pt;">
<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 style="color: rgb(129, 140, 248); font-weight: bold; font-size: 20pt;">Bree LaPointe
</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="&#109;&#97;&#105;&#108;&#116;&#111;&#58;contact&#64;blapointe.com" style="text-decoration: none;" target="_blank" rel="noreferrer">
<text style="color: rgb(23, 23, 23); font-weight: normal;">contact&#64;blapointe.com</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="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>
<a href="&#116;&#101;&#108;&#58;3367016159" style="text-decoration: none;" target="_blank" rel="noreferrer">
<text style="color: rgb(23, 23, 23); font-weight: normal;">(336) 701-6159</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/lapoba16" style="text-decoration: none;" target="_blank" rel="noreferrer">
<text style="color: rgb(23, 23, 23); font-weight: normal;">linkedin.com/in/lapoba16</text>
</a>
</view>
</view>
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<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;">WORK EXPERIENCE</text>
</view>
<view>
<text style="color: rgb(23, 23, 23); font-weight: bold;">Qualtrics</text>
<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;">Senior Software Engineer, Team Lead</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">May 2022 - 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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Mentored entry and mid-level engineers on stability, clean code, and distributed systems.</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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Hosted engineering book and white paper clubs for continuous improvement and cross-team experience sharing for 2 years.</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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Recovered 98% of data lost in critical incident via coordinating cross team efforts and dissecting native database operation logs.</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;">Software Engineer II</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Developed and owned highly available and reliable data storage and operational tooling.</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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Mentored 2 interns, 2 new hires, and 3 mid-level cross team engineers on operational tools, 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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Genericized AWS asset management tooling ahead of company-wide mass migration initiative.</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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">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.</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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Lent expertise owning MongoDB across teams by advising on configuration and data models and genericizing disaster recovery tooling for 21 teams.</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;">Software Engineer I</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Automated no-downtime system patching for 30 services and 25 database clusters by creating a modular and testable scripting framework.</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.3;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">Raised backend service's availability to 99.99% and reduced hardware costs by 40% by selecting, training team on, and live migrating to a different datastore.</text>
</view>
</view>
</view>
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<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;">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;">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: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: bold;">High Point 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;">Bachelor of Arts in Computer Science - 3.91/4.00 GPA
</text>
</view>
</view>
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<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;">PUBLICATIONS</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;">Arabidopsis thaliana computationally-generated next-state gene interaction models</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">Jun 2018
</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;">Refactored to correct bugs and improve efficiency by orders of magnitude
</text>
</view>
</view>
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<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;">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.3;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Languages: 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.3;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Platforms: Docker, Hashicorp, Linux/Unix, AWS, Jenkins, REST, Microservices, Git
</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.3;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB
</text>
</view>
</view>
</view>
</view>
</view>
</page>
</document>
</div>
</div>
</body>
</html>

BIN
src/homebrew/homebrew.pdf Normal file

Binary file not shown.

29
src/homebrew/homebrew.sh Normal file
View File

@@ -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 \
| tee ./homebrew.html \
> /dev/null
date
done

132
src/homebrew/homebrew.tmpl Normal file
View File

@@ -0,0 +1,132 @@
<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; 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: 11pt;">
<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 style="color: rgb(129, 140, 248); font-weight: bold; font-size: 20pt;">{{ range .resume.name }}{{ . }} {{ end }}
</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: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<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;">{{ .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.3;">•
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}
</text>
</view>
{{ end }}
</view>
{{ end }}
{{ range .headings }}
<view>
{{ if .headings }}
<text style="color: rgb(23, 23, 23); font-weight: bold;">{{ .title }}</text>
{{ 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;">{{ .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;">{{ .title }}</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .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.3;">•</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.3; flex-grow: 1; flex-basis: 0px;">{{ . }}</text>
</view>
{{ end }}
</view>
{{ end }}
</view>
{{ end }}
</view>
{{ end }}
</view>
</view>
</page>
</document>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,66 @@
resume:
pdf_file_name: BreeLaPointeResume.pdf
name:
- Bree
- LaPointe
title: 'Senior Software Engineer'
contact:
links:
- text: 'contact@blapointe.com'
link: 'mailto:contact@blapointe.com'
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/lapoba16
link: https://linkedin.com/in/lapoba16
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: Qualtrics
headings:
- title: Senior Software Engineer, Team Lead
when: May 2022 - Present
what:
- Mentored entry and mid-level engineers on stability, clean code, and distributed systems.
- Hosted engineering book and white paper clubs for continuous improvement and cross-team experience sharing for 2 years.
- Recovered 98% of data lost in critical incident via coordinating cross team efforts and dissecting native database operation logs.
- title: Software Engineer II
when: Oct 2019 - May 2022
what:
- 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.
- Genericized AWS asset management tooling ahead of company-wide mass migration initiative.
- 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.
- Lent expertise owning MongoDB across teams by advising on configuration and data models and genericizing disaster recovery tooling for 21 teams.
- title: Software Engineer I
when: Feb 2018 - Oct 2019
what:
- Automated no-downtime system patching for 30 services and 25 database clusters by creating a modular and testable scripting framework.
- Raised backend service's availability to 99.99% and reduced hardware costs by 40% by selecting, training team on, and live migrating to a different datastore.
- 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: Golang, Bash, Python3'
- 'Platforms: Docker, Hashicorp, Linux/Unix, AWS, Jenkins, REST, Microservices, Git'
- 'Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB'

2
main.go → src/main.go Normal file → Executable file
View File

@@ -2,7 +2,7 @@ package main
import (
"fmt"
"local/args"
"gogs.inhome.blapointe.com/local/args"
"log"
"net/http"