314 lines
12 KiB
HTML
314 lines
12 KiB
HTML
<html>
|
||
<head>
|
||
<link rel="stylesheet" type="text/css" href="styles.css" />
|
||
</head>
|
||
<body>
|
||
<section class="header">
|
||
<h2 class="lg bold">Brian Sakal</h2>
|
||
</section>
|
||
<section class="contact-info">
|
||
<section class="address">
|
||
<label class="bold">Address</label>
|
||
<div>
|
||
225 Van Houten Ave.<br />
|
||
Passaic, NJ 07055<br />
|
||
(305) 930-0248<br />
|
||
</div>
|
||
</section>
|
||
<section class="email">
|
||
<label class="bold">Email</label>
|
||
<div>brian@sakal.us</div>
|
||
</section>
|
||
</section>
|
||
<section class="sections">
|
||
<section class="employment">
|
||
<label>
|
||
<div class="fit-content">
|
||
<div class="bold">Employment</div>
|
||
<div class="sm italic right">(Most recent first)</div>
|
||
</div>
|
||
</label>
|
||
<div>
|
||
<ul class="no-bullet">
|
||
<li>
|
||
<div>
|
||
<span class="bold">Senior Full-Stack Developer,</span>
|
||
<span>TorahAnytime.com, Flushing, NY</span>
|
||
</div>
|
||
<div class="italic right">June 2022–Present</div>
|
||
<div>
|
||
<ul>
|
||
<li>
|
||
Fixed/troubleshooted bugs and added features across multiple
|
||
legacy codebases
|
||
</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.
|
||
</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.
|
||
</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.
|
||
</li>
|
||
<li>
|
||
Implemented a revamped phone system using a finite-state
|
||
machine. Content from the site is available and browsable by
|
||
phone, dynamically.
|
||
</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.
|
||
</li>
|
||
<li>
|
||
Worked with (in no particular order): Node.js, Redis, MySQL,
|
||
PostgreSQL, RethinkDB, Elasticsearch, Clickhouse, Docker,
|
||
Nomad, Consul, Kubernetes, Helm, nginx, DigitalOcean
|
||
Droplets, Vercel, S3, Cloudflare, Express.js, React, React
|
||
Native, Next.js, Swagger
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Assistant Manager,</span>
|
||
<span
|
||
>Sureknit Inc. Property Management, East Flatbush, NY</span
|
||
>
|
||
</div>
|
||
<div class="italic right">February 2020–June 2022</div>
|
||
<div>
|
||
<ul>
|
||
<li>Kept accurate records of tenant rent payments.</li>
|
||
<li>
|
||
Balanced bank account statements for all subsidiary
|
||
companies.
|
||
</li>
|
||
<li>
|
||
Monitored bank accounts of subsidiary companies to ensure
|
||
each had appropriate funding.
|
||
</li>
|
||
<li>
|
||
Provided necessary documentation for various real estate
|
||
operations, such as new leases, property sales, etc.
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<!-- <li>
|
||
<div>
|
||
<span class="bold">Architect Intern,</span>
|
||
<span>Sandy Hacohen, Flushing, NY</span>
|
||
</div>
|
||
<div class="italic right">July 2018–November 2018</div>
|
||
<div>
|
||
<ul>
|
||
<li>
|
||
Produced architectural drawings of various points-of-view
|
||
based on given floorplans.
|
||
</li>
|
||
<li>Adjusted existing floorplans to spec.</li>
|
||
</ul>
|
||
</div>
|
||
</li> -->
|
||
<li>
|
||
<div>
|
||
<span class="bold">Operations Manager,</span>
|
||
<span>Tax Opportunities America, Flushing, NY</span>
|
||
</div>
|
||
<div class="italic right">April 2014–May 2015</div>
|
||
<div>
|
||
<ul>
|
||
<li>
|
||
Interfaced with clients to collect necessary information for
|
||
their applications to government programs.
|
||
</li>
|
||
<li>
|
||
Prepared necessary documentation and submitted applications
|
||
to the government on behalf of clients.
|
||
</li>
|
||
<li>
|
||
Monitored and accommodated deadlines, missing client data,
|
||
and when client promised to have the data available
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Representative,</span>
|
||
<span
|
||
>Computer-Aided Engineering Network (CAEN) Hotline, U. of
|
||
Michigan</span
|
||
>
|
||
</div>
|
||
<div class="italic right">2007–2009, 2010–2011</div>
|
||
<div>
|
||
<ul>
|
||
<li>
|
||
Provided first-response assistance to students experiencing
|
||
technical difficulties with the Engineering School's
|
||
computer resources.
|
||
</li>
|
||
<li>
|
||
Collected pertinent information from students to arrange for
|
||
involvement of specialized staff for more serious problems,
|
||
via the CAEN ticketing system.
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
<section class="projects-hobbies">
|
||
<label>
|
||
<div class="fit-content">
|
||
<div class="bold">Projects/Hobbies</div>
|
||
</div>
|
||
</label>
|
||
<div>
|
||
<ul class="no-bullet">
|
||
<li>
|
||
<div>
|
||
<span class="bold"
|
||
>Self-host email for the sakal.us domain</span
|
||
>
|
||
<span
|
||
>Hosted on Vultr, uses Postfix for SMTP and Dovecot for
|
||
IMAP.</span
|
||
>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Self-host a Kubernetes cluster</span>
|
||
<span
|
||
>Uses the k3s implementation. Various services are deployed
|
||
within, including a private Docker image registry. TLS
|
||
certificates for the Ingresses are handled by
|
||
<code>cert-manager</code>. Private coding projects are also
|
||
deployed within.</span
|
||
>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Self-host a Gitea code repository</span>
|
||
<span
|
||
>Deployed within the above Kubernetes cluster. Available at
|
||
<a href="https://git.sakal.us/">https://git.sakal.us</a></span
|
||
>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Calendar Optimizer project</span>
|
||
<span
|
||
>The beginnings of a stock options research platform. Frontend
|
||
uses Preact, backend application layer uses trpc, database is
|
||
Clickhouse. Available at
|
||
<a href="https://calendar-optimizer-frontend.sakal.us"
|
||
>https://calendar-optimizer-frontend.sakal.us</a
|
||
>.</span
|
||
>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Custom Full-Stack eCommerce website</span>
|
||
<span
|
||
>Created custom e-commerce website, both front-end and
|
||
back-end, from scratch; was 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
|
||
<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
|
||
<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
|
||
<a href="https://github.com/gvx/bitser">bitser</a>).</span
|
||
>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
<section class="relevant-skills">
|
||
<label>
|
||
<div class="fit-content">
|
||
<div class="bold">Skills/Technologies</div>
|
||
</div>
|
||
</label>
|
||
<div>
|
||
<ul class="inline">
|
||
<li>Docker</li>
|
||
<li>DevOps (Logging, Monitoring, Grafana, CI/CD)</li>
|
||
<li>Kubernetes</li>
|
||
<li>Node JS</li>
|
||
<li>Javascript/Typescript</li>
|
||
<li>React</li>
|
||
<li>MySQL/PostgreSQL</li>
|
||
<li>Elasticsearch</li>
|
||
<li>Clickhouse</li>
|
||
<li>Linux</li>
|
||
<li>Cloudflare</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
<section class="education">
|
||
<label>
|
||
<span class="bold">Education</span>
|
||
</label>
|
||
<div>
|
||
<ul class="no-bullet">
|
||
<li>
|
||
<div>
|
||
<span class="bold">B.S. in Aerospace Engineering,</span>
|
||
<span>University of Michigan, Ann Arbor, MI</span>
|
||
</div>
|
||
<div class="italic right">
|
||
Sept. 2006–April 2009, Sept. 2010–April 2011
|
||
</div>
|
||
<div class="italic right">GPA 3.185</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<span class="bold">Ph.D. in Rabbinics,</span>
|
||
<span>Rabbinical Seminary of America, Flushing, NY</span>
|
||
</div>
|
||
<div class="italic right">
|
||
April 2009–April 2010, April 2011–January 2020
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
</body>
|
||
</html>
|