noah.is/content/resume.html

339 lines
15 KiB
HTML
Raw Normal View History

2023-09-14 00:35:55 +00:00
---
title: "Resume"
date: 2023-09-13T15:08:12-07:00
draft: false
---
<section class="content">
<h1>Resume</h1>
<ul>
<li>
<a href="#work-experience">Work Experience</a>
</li>
<li>
<a href="#education">Education</a>
</li>
</ul>
<h3 id="work-experience" class="anchor">Work Experience</h3>
</section>
<!-- Meta -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/meta.jpg" width="32" height="32" alt="Meta company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Software Engineer <small class="has-text-grey">@ Meta</small></h4>
<p>
<small>Mar 2023 - Present | Portland, OR (Remote)</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<p>
Supernatural was <a href="https://www.latest.oculus.com/blog/within-to-join-meta/" target="_blank">acquired by Meta</a>
in March 2023 to bring our VR application in-house as a first-party Oculus studio.
</p>
<ul>
<li>
I helped spearhead the data migration effort (along with a few other senior engineers) to adapt Supernatural's
database and API servers into Meta's infrastructure (rewriting back-end services from Python into Hack).
</li>
<li>
<strong>Technologies:</strong>
<i class="fab fa-python"></i> Python (Flask, SQLAlchemy); <i class="fab fa-js"></i> JavaScript (Vue.js);
<i class="fab fa-php"></i> Hack (like PHP); Graph API; GraphQL; several proprietary internal tools for CI/CD,
issue management, code review, etc.
</li>
</ul>
</div>
<!-- Supernatural -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/supernatural.jpg" width="32" height="32" alt="Supernatural company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Principal Software Engineer <small class="has-text-grey">@ Supernatural</small></h4>
<p>
<small>Oct 2018 - Mar 2023 | Los Angeles, CA</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<p>
Within rebranded to Supernatural named after the Oculus VR app of the same title after finding a
market fit with that application.
</p>
<ul>
<li>
I helped build out the back-end Python API server for Supernatural and its deployment pipeline on
AWS Elastic Beanstalk <small>(and later in <abbr title="Amazon Elastic Kubernetes Service">EKS</abbr>)</small>.
</li>
<li>
I extended the Within CMS to support managing content &amp; data for Supernatural before forking
the CMS into a dedicated app for Supernatural.
</li>
<li>
I built an internal Music Curation tool <small>(named Wormhole)</small> to help the content team
identify and manage licensed music to use with the app. It provided a user interface to peruse
the massive volume of music data delivered to us by our partner labels (sent in <abbr title="Digital Data Exchange">DDEX</abbr> feed
format). Behind the web app was a pipeline of Python worker scripts that ingested the DDEX feeds
and handled licensing updates and metadata sync (with Spotify and Music Reports, Inc). Wormhole
was backed by a Mongo DB which was the best fit for the loosely structured music data we were working with.
</li>
<li>
<strong>Technologies:</strong>
<i class="fab fa-python"></i> Python (Flask, SQLAlchemy); <i class="fab fa-golang"></i> Go;
<i class="fab fa-js"></i> JavaScript (Vue.js); <i class="fab fa-github"></i> GitHub;
<i class="fab fa-docker"></i> Docker; MongoDB; PostgreSQL; Redis; AWS
</li>
</ul>
</div>
<!-- Within -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/within.jpg" width="32" height="32" alt="Within company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Senior Software Engineer <small class="has-text-grey">@ Within (Virtual Reality)</small></h4>
<p>
<small>Apr 2017 - Mar 2023 | Los Angeles, CA</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<p>
I joined Within back when their primary product was a <abbr title="Virtual Reality">VR</abbr> 360&deg; video
streaming platform <small>(with multiple web &amp; native apps)</small>, where videos were published via hand-edited JSON
files (unique format per platform) and there were no dynamic web apps within the company. Within had ambitions to create a
"Lobby" app for you &amp; your friends to hang out in VR and join multiplayer "interactive experiences" together.
</p>
<ul>
<li>
I built out a Python microservice architecture that included an Authentication service (centralized
user accounts for the Lobby app) and a Matchmaking service to coordinate multiplayer VR games. I also
created a custom Push Notification service (written in Go) to target our desktop apps and website,
which did not have a native push mechanism like Android or iOS do.
</li>
<li>
I built a Content Management System (CMS) in Python to consolidate and automate the content
publishing pipeline for the 360&deg; VR streaming platform. I studied the various legacy JSON config
formats (for the Android, iOS, PS VR, web player, and Unity stand-alone VR player apps) to determine
the commonalities and data requirements to translate into a relational (PostgreSQL) database and
CMS platform.
<ul>
<li>The video transcoding pipeline was based on <code>ffmpeg</code> via a third party API called Hybrik.</li>
<li>The CMS also managed Unity asset bundles and content publishing for our VR interactive experiences.</li>
</ul>
</li>
<li>
<strong>Technologies:</strong>
<i class="fab fa-python"></i> Python (Flask, SQLAlchemy); <i class="fab fa-golang"></i> Go;
<i class="fab fa-js"></i> JavaScript (Vue.js, Photon); <i class="fab fa-github"></i> GitHub;
<i class="fab fa-docker"></i> Docker; ffmpeg; PostgreSQL; Redis;
<abbr title="Amazon Web Services">AWS</abbr> (Elastic Beanstalk, S3)
</li>
</ul>
</div>
<!-- Media Temple -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/mediatemple.jpg" width="32" height="32" alt="Media Temple company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Software Developer <small class="has-text-grey">@ (mt) Media Temple</small></h4>
<p>
<small>Dec 2015 - Apr 2017 | Culver City, CA</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<ul class="mt-0">
<li>
Built out Python microservices (Tornado framework) to translate between Media Temple and parent company
GoDaddy's systems (for example, a Payments service that ran within a secure server on GoDaddy's infrastructure
and was called out to from legacy Perl apps at Media Temple).
</li>
<li>
Helped maintain and add new features to a legacy Perl codebase (including the Account Center web app).
</li>
<li>
<strong>Technologies:</strong>
<i class="fab fa-python"></i> Python (Tornado);
<img src="/images/perl.png" width="12" height="12"> Perl (Template::Toolkit, Moose);
Puppet; RabbitMQ; cgit; Atlassian FishEye &amp; Crucible.
</li>
</ul>
</div>
<!-- ZEFR -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/zefr.jpg" width="32" height="32" alt="ZEFR company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Software Engineer <small class="has-text-grey">@ ZEFR</small></h4>
<p>
<small>May 2013 - Dec 2015 | Venice, CA</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<ul class="mt-0">
<li>
Built out a Python/Flask web app called <abbr title="Brand ID">BrandID</abbr> that provided search and
notifications for brand managers regarding YouTube. The idea was that if a video was about to go
viral about your brand, you should hear about it from us first. <small>(We had code that would deeply crawl
YouTube daily and make predictions based on view counts and trends detected).</small>
</li>
<li>
Also built out a free-to-use, consumer facing app called BrandID Pulse where users could input topics
they're interested in and get daily digest e-mails of new and trending videos that match their interests.
</li>
<li>
Helped build out an advertising platform that helped match advertisers to specific YouTube videos that
we detected are about to go viral. <small>(On Google's ad platform, you can either target general demographics
or you can target specific Video IDs, but the latter feature is rarely used because it was tedious and unpredictable;
ZEFR's product helped match advertisers to specific videos relevant to their brand that were detected to be going
viral, e.g. the same data that powered BrandID).</small>
</li>
<li>
Upgraded several codebases from Python 2 to 3;
</li>
<li>
<strong>Technologies:</strong>
<i class="fab fa-python"></i> Python (Flash, Celery); <i class="fab fa-js"></i> JavaScript (jQuery, Knockout.js, Angular, MEAN stack);
<i class="fab fa-github"></i> GitHub; MongoDB; PostgreSQL; Redis; Amazon Web Services (EC2, S3, SQS, SES, Elastic Beanstalk, RDS);
HTML/CSS (Bootstrap); <i class="fab fa-docker"></i> Docker; Jenkins
</li>
</ul>
</div>
<!-- DreamHost -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/dreamhost.jpg" width="32" height="32" alt="DreamHost company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Senior Hosting Developer <small class="has-text-grey">@ DreamHost</small></h4>
<p>
<small>Feb 2012 - Apr 2013 | Los Angeles, CA</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<ul class="mt-0">
<li>
I helped maintain and add features to web apps written in Perl (using a custom <abbr title="Object Relational Mapper">ORM</abbr>
and templating system for server-side rendered pages) and HTML/JavaScript (jQuery).
</li>
<li>
Projects included work on the customer Control Panel, report automations for financial &amp; marketing,
and integration for customer sites and <i class="fab fa-cloudflare"></i> Cloudflare.
</li>
<li>
<strong>Technologies:</strong>
<img src="/images/perl.png" width="12" height="12"> Perl;
<i class="fab fa-javascript"></i> JavaScript;
Chef; RabbitMQ; cgit.
</li>
</ul>
</div>
<!-- Fonality -->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/fonality.jpg" width="32" height="32" alt="Fonality company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Software Engineer <small class="has-text-grey">@ Fonality</small></h4>
<p>
<small>Jun 2008 - Feb 2012 | Culver City, CA</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<ul class="mt-0">
<li>
Maintained and contributed features for a customer control panel (written in Perl) for
Asterisk <abbr title="Private Branch Exchange (Business telephone system)">PBX</abbr> servers
(running a custom CentOS-based operating system branded as PBXtra and Trixbox).
</li>
<li>
One project had me port our PBXtra OS to newer Dell server blades after our OEM discontinued
the model we were selling. PBXtra was based on the (already outdated) CentOS 4 which lacked hardware
drivers to support the new blades. I troubleshooted and created new installation ISOs that slipstreamed
an updated Linux kernel and CD-ROM driver to function on these newer servers.
</li>
<li>
Worked on an HTML5 web front-end for Fonality HUD (an in-house softphone and productivity tool that
showed online/call status of your co-workers and managed chat and calls).
</li>
<li>
<strong>Technologies:</strong>
<img src="/images/perl.png" width="12" height="12"> Perl (Template::Toolkit, Moose);
<i class="fab fa-javascript"></i> HTML/JavaScript (jQuery in some places, mostly vanilla JS, AJAX);
<i class="fab fa-asterisk"></i> Asterisk; MySQL; Linux (CentOS)
</li>
</ul>
</div>
<!-- Liquid Web-->
<div class="columns is-mobile mb-0">
<div class="column is-narrow pr-1">
<img src="/img/liquidweb.jpg" width="32" height="32" alt="Liquid Web company logo">
</div>
<div class="column pl-1">
<h4 class="subtitle mb-0">Linux Systems Administrator <small class="has-text-grey">@ Liquid Web</small></h4>
<p>
<small>Jan 2008 - May 2008 | Lansing, MI</small>
</p>
</div>
</div>
<div class="content smaller ml-5">
<p>
The job description was tech support and tech support at a web hosting company is synonymous with
systems administration. A large portion of our customer base ran Linux servers (CentOS). My aim was
to get hired as a software developer but as I had no prior work experience they started me out in
support.
</p>
<ul>
<li>
Helped customers debug issues with their Apache config, managed cPanel installations,
reading exim logs, and wrote custom Perl scripts to help me troubleshoot their e-mail
servers and other such tasks.
</li>
<li>
After a couple months I transitioned to the software dev team and worked on some internal
tools and the customer control panel written in Perl.
</li>
<li>
<strong>Technologies:</strong>
<img src="/images/perl.png" width="12" height="12"> Perl (Template::Toolkit, POE);
<i class="fab fa-javascript"></i> HTML/JavaScript (jQuery); CVS version control;
MySQL; Linux (CentOS)
</li>
</ul>
</div>
<hr>
<section class="content">
<h3 id="education" class="anchor">Education</h3>
<h5 class="mb-0">ITT Technical Institute</h5>
<p class="smaller">
<em>Associates, Computer Network Systems</em><br>
<small>2006 - 2009 | Swartz Creek, MI | Culver City, CA | Torrance, CA</small>
</p>
<h5 class="mb-0">Flushing High School</h5>
<p class="smaller">
<small>2002 - 2006 | Flushing, MI</small>
</p>
</section>