|
|
|
@ -17,8 +17,8 @@
|
|
|
|
|
<section class="employment">
|
|
|
|
|
<label>
|
|
|
|
|
<div class="fit-content">
|
|
|
|
|
<div class="bold">Employment</div>
|
|
|
|
|
<div class="sm italic right">(Most recent first)</div>
|
|
|
|
|
<span class="bold">Employment</span>
|
|
|
|
|
<span class="sm italic right">(Most recent)</span>
|
|
|
|
|
</div>
|
|
|
|
|
</label>
|
|
|
|
|
<div>
|
|
|
|
@ -33,40 +33,37 @@
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
<!-- <li>
|
|
|
|
|
Fixed/troubleshooted bugs and added features across multiple
|
|
|
|
|
legacy codebases
|
|
|
|
|
</li>
|
|
|
|
|
<li>Consolidated cloud resources by using Kubernetes.</li>
|
|
|
|
|
<li>Consolidated cloud resources by using Kubernetes.</li> -->
|
|
|
|
|
<li>
|
|
|
|
|
Successfully transitioned a top-level domain from a
|
|
|
|
|
self-hosted legacy site frontend by Cloudflare and nginx, to
|
|
|
|
|
one hosted by Vercel, while maintaining custom routes that
|
|
|
|
|
were handled by nginx and keeping the legacy site online
|
|
|
|
|
under a subdomain.
|
|
|
|
|
Transitioned a legacy Cloudflare/nginx TLD site to Vercel,
|
|
|
|
|
while maintaining custom nginx routes plus the entire legacy
|
|
|
|
|
site under a subdomain.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Setup CI/CD pipelines with DroneCI and Gitlab; in addition
|
|
|
|
|
to locally-runnable deploy scripts which reduced
|
|
|
|
|
time-to-deployment from 5 minutes to 15 seconds.
|
|
|
|
|
Reduced time-to-deployment from 5 minutes to 15 seconds with
|
|
|
|
|
locally-runnable deploy scripts; besides setting up
|
|
|
|
|
Drone/Gitlab CI/CD pipelines.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Setup Clickhouse for analytics and as a read-only copy of
|
|
|
|
|
MySQL data. Reduced query times from minutes to fractions of
|
|
|
|
|
a second.
|
|
|
|
|
Architected custom analytics backend w/ Clickhouse. Reduced
|
|
|
|
|
query times from minutes to milliseconds.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Implemented a revamped phone system using a finite-state
|
|
|
|
|
machine. Content from the site is available and browsable by
|
|
|
|
|
phone, dynamically.
|
|
|
|
|
Implemented a custom IVR phone system to dynamically browse
|
|
|
|
|
content.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Setup supporting services in Kubernetes, such as Gitlab,
|
|
|
|
|
OpenTelemetry, a private Docker registry, a private NPM
|
|
|
|
|
registry, Grafana, and others. Transcoder pipeline
|
|
|
|
|
troubleshooting time was halved using OpenTelemetry tracing,
|
|
|
|
|
with spans stored in self-hosted Clickhouse, visualized in
|
|
|
|
|
Grafana.
|
|
|
|
|
Setup various supporting/ancillary services in Kubernetes,
|
|
|
|
|
including Gitlab, OpenTelemetry, private Docker & NPM
|
|
|
|
|
registries, Grafana.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Implemented OpenTelemetry tracing visualized in Grafana,
|
|
|
|
|
decreasing transcoder troubleshooting by 50%.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Worked with (in no particular order): Node.js, Redis, MySQL,
|
|
|
|
@ -140,7 +137,7 @@
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<!-- <li>
|
|
|
|
|
<div class="space-between">
|
|
|
|
|
<div>
|
|
|
|
|
<span class="bold">Representative,</span>
|
|
|
|
@ -160,7 +157,7 @@
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
|
</li> -->
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
@ -221,26 +218,25 @@
|
|
|
|
|
<div>
|
|
|
|
|
<span class="bold">Custom Full-Stack eCommerce website</span>
|
|
|
|
|
<span
|
|
|
|
|
>Created custom e-commerce website, both front-end and
|
|
|
|
|
back-end, from scratch; previously at piazzaoptical.com (code
|
|
|
|
|
at
|
|
|
|
|
>Both front-end and back-end from scratch; previously at
|
|
|
|
|
piazzaoptical.com (code at
|
|
|
|
|
<a href="https://git.sakal.us/avraham/piazzaoptical.com"
|
|
|
|
|
>https://git.sakal.us/avraham/piazzaoptical.com</a
|
|
|
|
|
>). Frontend was implemented in
|
|
|
|
|
<a href="https://mithril.js.org/">mithril.js</a>. For the
|
|
|
|
|
backend, nginx was setup as reverse proxy and TLS termination;
|
|
|
|
|
but the application code was implemented with
|
|
|
|
|
<a href="https://luajit.org/">LuaJIT</a> using
|
|
|
|
|
>). Frontend in
|
|
|
|
|
<a href="https://mithril.js.org/">mithril.js</a>. Backend w/
|
|
|
|
|
nginx as reverse proxy and TLS termination; application code
|
|
|
|
|
in
|
|
|
|
|
<a href="https://daurnimator.github.io/lua-http/0.4/"
|
|
|
|
|
>lua-http</a
|
|
|
|
|
>. The database was an
|
|
|
|
|
<a href="http://www.lmdb.tech/doc/">LMDB</a> KV store library
|
|
|
|
|
running as part of the LuaJIT app server using
|
|
|
|
|
>
|
|
|
|
|
on <a href="https://luajit.org/">LuaJIT</a>. Database was an
|
|
|
|
|
<a href="http://www.lmdb.tech/doc/">LMDB</a> KV store exposed
|
|
|
|
|
with custom wrapper using
|
|
|
|
|
<a href="https://github.com/shmul/lightningmdb"
|
|
|
|
|
>lightningmdb</a
|
|
|
|
|
>
|
|
|
|
|
Lua bindings; rolled-my-own wrapper around this so as to store
|
|
|
|
|
JSON objects (in the form of compressed Lua tables using
|
|
|
|
|
Lua bindings; stored JSON objects w/ references (in the form
|
|
|
|
|
of compressed Lua tables using
|
|
|
|
|
<a href="https://github.com/gvx/bitser">bitser</a>).</span
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|