~ben/web

5ca188cfdf8f5db33fdb16f84cd08f9169e3f7ac — Ben Sima 11 months ago fa8b752
rewrite most of site to org-publish
10 files changed, 835 insertions(+), 237 deletions(-)

M assets/css/main.css
M assets/css/print.css
A assets/css/resume.css
A assets/css/typography.css
D index.md
A index.org
D now.md
A now.org
D resume.md
A resume.org
M assets/css/main.css => assets/css/main.css +0 -1
@@ 571,7 571,6 @@ div.table-wrapper
; font-family: "Trebuchet MS", "Gill Sans", "Gill Sans MT", Calibri, sans-serif
}


table thead,
table p,
table caption

M assets/css/print.css => assets/css/print.css +5 -6
@@ 50,11 50,12 @@
; font-style: normal
}

body 
html,body
{ width:100% !important
; margin:0 !important
; padding:0 !important
; line-height: 1.4;
; font-size: 10px !important
; font-family: "Times New Roman"
    , et-book
    , Palatino


@@ 68,10 69,10 @@ body
}

nav
{ display: none 
{ display: none
}

blockquote 
blockquote
{ margin: 1.3em
; padding: 1em
; font-size: 10pt


@@ 130,11 131,9 @@ thead
{display: table-header-group;}

tr
{page-break-inside: avoid;} 
{page-break-inside: avoid;}

/*hide various parts from the site*/
#nav { display: none; }
img#square { display: none; }
div#banner { display: none; }



A assets/css/resume.css => assets/css/resume.css +22 -0
@@ 0,0 1,22 @@
ul { columns: 2 }

#skills
{ display: flex
; flex-direction: row
}

#skills > section
{ width: 100%
}

#skills h3
{ font-size: 1.3rem }

#skills li
{ font-size: 1rem
; line-height: 1rem
; padding: 0.2rem 0
}

#postamble
{ visibility: hidden }

A assets/css/typography.css => assets/css/typography.css +510 -0
@@ 0,0 1,510 @@
:root
{ --base03: #002b36
; --base02: #073642
; --base01: #586e75
; --base00: #657b83
; --base0: #839496
; --base1: #93a1a1
; --base2: #eee8d5
; --base3: #fdf6e3
; --yellow: #b58900
; --orange: #cb4b16
; --red: #dc322f
; --magenta: #d33682
; --violet: #6c71c4
; --blue: #268bd2
; --cyan: #2aa198
; --green: #859900
}

@charset "UTF-8";

@font-face
{ font-family: "et-book"
; src: url("../fonts/et-book-roman-line-figures/et-book-roman-line-figures.eot")
; src:
    url("../fonts/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix") format("embedded-opentype")
  , url("../fonts/et-book-roman-line-figures/et-book-roman-line-figures.woff") format("woff")
  , url("../fonts/et-book-roman-line-figures/et-book-roman-line-figures.ttf") format("truetype")
  , url("../fonts/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbookromanosf") format("svg")
; font-weight: normal
; font-style: normal
}

@font-face
{ font-family: "et-book"
; src: url("../fonts/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot")
; src:
    url("../fonts/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix") format("embedded-opentype")
  , url("../fonts/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff")
  , url("../fonts/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype")
  , url("../fonts/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbookromanosf") format("svg")
; font-weight: normal
; font-style: italic
}

@font-face
{ font-family: "et-book"
; src: url("../fonts/et-book-bold-line-figures/et-book-bold-line-figures.eot")
; src:
    url("../fonts/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix") format("embedded-opentype")
  , url("../fonts/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff")
  , url("../fonts/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype")
  , url("../fonts/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbookromanosf") format("svg")
; font-weight: bold
; font-style: normal
}

@font-face
{ font-family: "et-book-roman-old-style"
; src: url("../fonts/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot")
; src:
    url("../fonts/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix") format("embedded-opentype")
  , url("../fonts/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff")
  , url("../fonts/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype")
  , url("../fonts/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbookromanosf") format("svg")
; font-weight: normal
; font-style: normal
}

html, body
{ margin: 0
; padding: 0
; background-color: var(--base3)
; font-size: 15px
; color: var(--base00)
; min-height: 100vh
; display: flex
; flex-direction: column
}

::selection
{ background-color: var(--base2)
}

::-moz-selection
{ background-color: var(--base2)
}

body
{ border-top: 2px solid var(--violet)
}

footer
{ margin: 2rem
}

#content
{ max-width: 600px
; margin: 1rem 2rem
; flex: 1
}

#postamble
{ display: flex
; justify-content: space-around
; color: var(--base1)
}

.sans-serif
{ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif
}

header nav
{ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif
; font-size: 1.1rem
; letter-spacing: 0
; font-weight: 400
; font-style: normal
; text-transform: lowercase
; margin: 0
; padding: 0
; line-height: 2rem
}

.scroll
{ white-space: nowrap
; overflow-x: auto
; -webkit-overflow-scrolling: touch
; -ms-overflow-style: -ms-autohiding-scrollbar
}

header nav a:link
{ display: inline-block
; padding-right: 2rem
; text-align: center
; background: none
; color: var(--green)
; border: none
; text-shadow: none
}

header nav a:hover
{ color: var(--cyan)
}

#content
{ color: var(--base00);
}

#content,
h1, h2, h3, h4, h5, h6
{ font-family: et-book
    , Palatino
    , "Palatino Linotype"
    , "Palatino LT STD"
    , "Book Antiqua"
    , Georgia
    , serif
; background-color: transparent
; counter-reset: sidenote-counter
}

h1, h2, h3, h4, h5, h6
{ color: var(--base01)
}

h1
{ font-weight: 400
; margin-top: 4rem
; margin-bottom: 1.5rem
; font-size: 3.2rem
; line-height: 1
}

h2
{ font-weight: 400
; margin-top: 2.1rem
; margin-bottom: 0
; font-size: 2.2rem
; line-height: 1
}

h3
{ font-weight: 400
; font-size: 1.7rem
; margin-top: 2rem
; margin-bottom: 0
; line-height: 1
}

hr
{ display: block
; height: 1px
; width: 55%
; border: 0
; border-top: 1px solid #ccc
; margin: 1em 0
; padding: 0
}

.subtitle
{ font-style: italic
; margin-top: 1rem
; margin-bottom: 1rem
; font-size: 1.8rem
; display: block
; line-height: 1
; font-weight: 400
}

.numeral
{ font-family: et-book-roman-old-style
}

article
{ position: relative
; padding: 5rem 0rem
}

section
{ padding-top: 1rem
; padding-bottom: 1rem
}

p, ol, ul, dt, dd
{ font-size: 1.4rem
}

dt
{ margin-top: 1em
}

p, span.subtitle
{ line-height: 2rem
; margin-top: 1.4rem
; margin-bottom: 1.4rem
; padding-right: 0
; vertical-align: baseline
}

blockquote
{ font-size: 1.4rem
}


blockquote p
{ width: 55%
; margin-right: 40px
}


blockquote footer
{ width: 55%
; font-size: 1.1rem
; text-align: right
}


section > ol,
section > ul
{ width: 45%
; -webkit-padding-start: 5%
; -webkit-padding-end: 5%
}


li
{ padding: 0.5rem 0
}


figure
{ padding: 0
; border: 0
; font-size: 100%
; font: inherit
; vertical-align: baseline
; max-width: 55%
; -webkit-margin-start: 0
; -webkit-margin-end: 0
; margin: 0 0 3em 0
}


figcaption
{ float: right
; clear: right
; margin-top: 0
; margin-bottom: 0
; font-size: 1.1rem
; line-height: 1.6
; vertical-align: baseline
; position: relative
; max-width: 40%
}


figure.fullwidth figcaption
{ margin-right: 24%
}


/* Links: replicate underline that clears descenders */

a:link,
a:visited
{ color: inherit
}

a:hover
{ color: var(--violet)
}

a.naked
{ background: none !important
; text-shadow: none
}

a:link
{ text-decoration: none;
; background: -webkit-linear-gradient(var(--base3), var(--base3))
    , -webkit-linear-gradient(var(--base3), var(--base3))
    , -webkit-linear-gradient(var(--base00), var(--base00))
; background: linear-gradient(var(--base3), var(--base3))
    , linear-gradient(var(--base3), var(--base3))
    , linear-gradient(var(--base00), var(--base00))
; -webkit-background-size: 0.05em 1px, 0.05em 1px, 1px 1px
; -moz-background-size: 0.05em 1px, 0.05em 1px, 1px 1px
; background-size: 0.05em 1px, 0.05em 1px, 1px 1px
; background-repeat: no-repeat, no-repeat, repeat-x
; text-shadow: 0.03em 0 var(--base3)
    , -0.03em 0 var(--base3)
    , 0 0.03em var(--base3)
    , 0 -0.03em var(--base3)
    , 0.06em 0 var(--base3)
    , -0.06em 0 var(--base3)
    , 0.09em 0 var(--base3)
    , -0.09em 0 var(--base3)
    , 0.12em 0 var(--base3)
    , -0.12em 0 var(--base3)
    , 0.15em 0 var(--base3)
    , -0.15em 0 var(--base3)
; background-position: 0% 93%, 100% 93%, 0% 93%
}

a:link::selection
{ text-shadow: 0.03em 0 var(--base2)
    , -0.03em 0 var(--base2)
    , 0 0.03em var(--base2)
    , 0 -0.03em var(--base2)
    , 0.06em 0 var(--base2)
    , -0.06em 0 var(--base2)
    , 0.09em 0 var(--base2)
    , -0.09em 0 var(--base2)
    , 0.12em 0 var(--base2)
    , -0.12em 0 var(--base2)
    , 0.15em 0 var(--base2)
    , -0.15em 0 var(--base2)
; background: var(--base2)
}


a:link::-moz-selection
{ text-shadow: 0.03em 0 var(--base2)
    , -0.03em 0 var(--base2)
    , 0 0.03em var(--base2)
    , 0 -0.03em var(--base2)
    , 0.06em 0 var(--base2)
    , -0.06em 0 var(--base2)
    , 0.09em 0 var(--base2)
    , -0.09em 0 var(--base2)
    , 0.12em 0 var(--base2)
    , -0.12em 0 var(--base2)
    , 0.15em 0 var(--base2)
    , -0.15em 0 var(--base2)
; background: var(--base2)
}

table thead,
table p,
table caption
{ line-height: 2rem
; font-size: 1.2rem
; margin: 0
; padding: 0
}


/* table p
{ width: 100% }
*/


tr.odd
{ background: var(--base2)
; border-color: var(--base02)
; border-right: 1px solid
}


tr:hover
{ color: var(--magenta)
}

.sans
{ font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif
; letter-spacing: .03em
}


/* make equations line up */
span.math.display
{ display: flex
; justify-content: center
}

code
{ font-family: mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace
; font-size: 1.0rem
; line-height: 1.42
}


/* give source code a bit of styling */
pre.sourceCode
{ color: #444
}

/* code syntax highlighting */
span.co
{ color: #888
; font-style: italic
}

span.bu, span.fu, span.at, span.kw
{ color: #333
; font-weight: bold
}

.sans > code {
    font-size: 1.2rem;
}

h1 > code,
h2 > code,
h3 > code
{ font-size: 0.80em
}

@media (max-width: 760px) {
    .wrapper {
        width: 84%;
        padding-left: 8%;
        padding-right: 8%;
    }
    p,
    footer {
        width: 100%;
    }
    pre.sourceCode {
        width: 97%;
    }
    ul {
        width: 85%;
    }
    figure {
        max-width: 90%;
    }
    figcaption,
    figure.fullwidth figcaption {
        margin-right: 0%;
        max-width: none;
    }
    blockquote {
        margin-left: 1.5em;
        margin-right: 0em;
    }
    blockquote p,
    blockquote footer {
        width: 100%;
    }
    label.margin-toggle:not(.sidenote-number) {
        display: inline;
    }
    .sidenote,
    .marginnote {
        display: none;
    }
    .margin-toggle:checked+.sidenote,
    .margin-toggle:checked+.marginnote {
        display: block;
        float: left;
        left: 1rem;
        clear: both;
        width: 95%;
        margin: 1rem 2.5%;
        vertical-align: baseline;
        position: relative;
    }
    label {
        cursor: pointer;
    }
    div.table-wrapper,
    table {
        width: 85%;
    }
    img {
        width: 100%;
    }
}

D index.md => index.md +0 -14
@@ 1,14 0,0 @@
---
title: Ben Sima
---

Hi, my name is Ben Sima. I'm a student of philosophy, biology, and mathematics.

- email: `ben@bsima.me`
- PGP public key: [bsima.asc](/bsima.asc)
- [github/bsima](https://github.com/bsima) and [git.sr.ht/~ben](https://git.sr.ht/~ben)
- [goodreads](https://www.goodreads.com/user/show/2127724-ben)
- [resume](/resume)

Professionally, I write software. Take a look at some of my recent work
below...

A index.org => index.org +18 -0
@@ 0,0 1,18 @@
#+title: Ben Sima
#+author: Ben Sima
#+email: ben@bsima.me
#+options: author:nil toc:nil num:nil
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/normalize.css"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/typography.css"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/print.css" media="print"/>

Hi, my name is Ben Sima. I'm a student of philosophy, biology, and mathematics.

- email: ben@bsima.me
- PGP public key: [[file:bsima.asc][bsima.asc]]
- [[https://github.com/bsima][github/bsima]] and [[https://git.sr.ht/~ben][git.sr.ht/~ben]]
- [[https://www.goodreads.com/user/show/2127724-ben][goodreads]]
- [[file:resume.org][resume]]

# Professionally, I write software. Take a look at some of my recent work
# below...

D now.md => now.md +0 -18
@@ 1,18 0,0 @@
---
title: Now
date: 2019-03-01
---

I'm currently living in San Diego.

In my professional life, I’m working part-time at
[Hero](https://xn--her-2na.com/) on their next-gen MVP. I'm also looking for
full-time or contract work. [Click here if you're hiring.](/work)

In my free time I’m developing a webapp in Haskell called "[pprjam][]"
which helps you organize your academic references (contact me for beta access).

I'm looking for reading recommendations - email me at ben@bsima.me with your
favorite books :)

[pprjam]: https://www.pprjam.com

A now.org => now.org +17 -0
@@ 0,0 1,17 @@
#+title: Now
#+date: 2019-03-01
#+author: Ben Sima
#+email: ben@bsima.me
#+options: toc:nil email:t num:nil
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/normalize.css"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/typography.css"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/print.css" media="print"/>

I'm currently living in San Diego, but in the process of moving to Palo Alto.

In my professional life, I’m working part-time at
[[https://xn--her-2na.com/][Hero]] on their next-gen MVP. I'm also looking for
full-time or contract work. [[file:resume.org][Contact me here if you're hiring.]]

In my free time I’m developing a webapp in Haskell called "pprjam" which helps
you organize your academic references (contact me for beta access).

D resume.md => resume.md +0 -198
@@ 1,198 0,0 @@
---
title: Ben Sima
subtitle: I create technical solutions to complex business problems.
author: Ben Sima
mail: ben@bsima.me
tel: 330.316.2173
web: https://www.bsima.me
date: 2018-07-09
---

Hi! I'm a software engineer currently located in San Diego (moving to the Bay
Area soon).

By trade, I work on applications that deal with a lot of data; by vocation I
study mathematics and philosophy. My studies have specifically trained my mind
for:

- critical thinking,
- abstract ideation,
- fast learning,
- robust decision making,
- communication, and
- reading comprehension.

I have experience in application architecture, databases, and other data-heavy
systems. If your business can appreciate any of the above, then email
[`ben@bsima.me`](mailto:ben@bsima.me).

You probably also want to check out my [projects][] page.

[projects]: /projects

## Employment

### Hero Projects

2018 - present

Hero is a media company in L.A. On a part-time basis, I'm developing their
mobile and web apps, which is like Netflix for comic books. Instead of movies
there is a comic book player, which overlays music according to the page of the
comic you're on and guides you through the story. This is alpha stage currently,
but will go live later in 2019. Written in all Haskell using
[Miso](https://haskell-miso.org/) (which is an awesome front-end framework, in
my experience).

Technology used:

- Haskell frontend and backend, JavaScript frontend
- CDN administration for comic assets
- Private and secured REST API
- PostgreSQL database

### UE Authority

2018 - 2019

UE.co provides car- and home-insurance sales leads to a country-wide network of
salespeople. I was responsible for developing a few data pipelines for use in
their next-gen platform. The service would fetch leads from external providers
or accept a CSV upload of lead data, scrub the data through half-a-dozen
internal services, and deliver the end result to a front-end application which
allowed the salesperson to save the list of leads for later. My services were
written in Haskell and designed to be highly concurrent, handling something like
60k-70k leads per minute. The bottlenecks ended up being the insert operation
into Amazon Redshift, and the third-party APIs.

Technology used:

- AWS infrastructure
- Haskell data pipeline backend
- MySQL and AWS Redshift
- RESTful API with Swagger docs

### Software Engineer, Liaison Technologies

2015 - 2018

I co-designed and implemented a distributed, streaming, immutable, event-sourced
cloud database for semi-structured enterprise data, plus a few AI-based
microservices for extracting structured intel out of the semi-structured streams
of data in our database. The business goal is to flexibly extract intelligible
data from customers' data banks. Everything was done in Clojure, on a private
cloud infrastructure with Docker containers as deployable microservices.

Technology used:

- Clojure and Java
- PostgreSQL, ElasticSearch, ArangoDB
- Apache Kafka, Apache HBase
- REST API with Swagger integration
- event sourcing, command query responsibility segregation (CQRS)
- schema matching

### Software Engineer, Thermo Fisher

2017

I wrote services and UIs for creating and running hardware tests on all of
Thermo Fisher's equipment. The application allowed field technicians to
collaborate on custom diagnostic tests for each instrument, connect to any
instrument on the network, run tests remotely or on-site, etc. The end product
is deployed as a Docker container onto mostly Windows machines used by Thermo
Fisher technicians.

Technology used:

- Typescript & AngularJS UI
- Python backend
- CouchDB datastore

### Software Engineer, WholeLatteLove.com

2015

As a full-stack developer, I was responsible for the DevOps workflow on AWS and
legacy servers, setting up and doing deployments, diagnosing and fixing bugs,
managing a git workflow between in-office and remote developers, and coding new
features on both the frontend and backend.

- Designed/implemented app-wide notification system.
- Moved a legacy Ruby on Rails app from a small, unreliable data center to AWS,
  with continuous integration, testing, & deployment.
- Updated a large Rails ecommerce engine we depend on (Spree) which required
  implementing a dozen custom extensions.
- Developed a data generator to easily replicate our production environment in
  staging.
- Created a suite of simulation tests for our legacy order processing systems
  using the Clojure framework Simulant.
- [Read more here.](/projects/wholelattelove.html)


### Lead Developer, Nebula Bio

2014 - 2016

With a biomedical engineer partner, I developed an open source, low cost,
portable blood analysis platform. Our goal was to be the “Arduino of biotech”.
All development was done on [GitHub](https://github.com/nebulabio).
Unfortunately the project was cut short because protein reagents are expensive
and I was a college student.

- Designed a POSIX-compatible driver for a custom potentiostat.
- Created a custom crowdfunding webapp with a REST API in Clojure,
  deployed on Heroku.
- Created a GUI in Python for the driver, and beginning beta testing
  with crowdfunders/customers.
- Lead and handle all project management and financial aspects of the
  project.

### Instructor, Thinkful

2014 - 2015

Taught data science and full-stack web development with Python to new and
intermediate students. I also helped develop their curriculum by writing
tutorials and exercises for each of the courses I taught.

### Nebula Sports

2012 - 2013

An [RIT sponsored][summerstart] startup project that lasted for about a year, in
which we developed novel headgear padding for athletes. My main role was in
guiding the scientific research, while solely managing the fundraising (grants
and private investment). In a 4-person team, we developed an algorithm for
optimizing our custom padding to a specific position within a specific sport.
Patent concerns made us shut down this part of the project. We then prototyped
and programmed an accelerometer to be housed inside a helmet and signal to the
athlete the severity of an impact. Reebok released their CheckLight product
before we finished developing, and so scooped the market. All algorithm
programming was done in Matlab.

[summerstart]: https://www.rit.edu/research/simonecenter/saunders-summer-start-program

### Freelance Developer

2012 - 2014

As a freelance developer, I created two ecommerce systems in PHP, a
ClojureScript front-end website to be used as a landing page, and worked on an
e-magazine site for a local Rochester magazine.

## Talks

- *A Categorical Theory of Patches*
  - May 3, 2018, Papers We Love San Diego
- *Getting Started with Yesod*
  - April 10, 2018, Haskell Hangout
- *Intro to Easy Deployments with NixOps*
  - March 21, 2018, San Diego DevOps Group

## Education

- *A.B.*, Philosophy, Rochester Institute of Technology, 2014
  - Thesis: [Wonder and Desire in Romantic Love: Levinas and Irigaray][e]

[e]: /essays/love.html

A resume.org => resume.org +263 -0
@@ 0,0 1,263 @@
#+title: Ben Sima's Resume
#+author: Ben Sima
#+email: ben@bsima.me
#+options: toc:nil email:t num:nil
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/normalize.css"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/typography.css"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/print.css" media="print"/>
#+html_head: <link rel="stylesheet" type="text/css" href="/~ben/assets/css/resume.css"/>

Hi! I'm a software engineer currently located in San Diego (moving to the Bay
Area soon).

By trade, I work on applications that deal with a lot of data; by vocation I
study mathematics and philosophy. I have experience in application architecture,
databases, and other data-heavy systems.

Email: ben@bsima.me

* Skills
:PROPERTIES:
:ID:       6ea9abee-3cb3-4286-a630-485fe5844f5f
:END:
#+begin_export html
<div id="skills">
<section>
<h3>Languages</h3>
<ul>
  <li>Clojure</li>
  <li>Common Lisp</li>
  <li>Haskell</li>
  <li>Java</li>
  <li>JavaScript</li>
  <li>Python</li>
  <li>Ruby</li>
  <li>Scheme</li>
  <li>TypeScript</li>
</ul>
</section>
<section>
<h3>Technologies</h3>
<ul>
  <li>Angular</li>
  <li>Apache HBase</li>
  <li>Apache Kafka</li>
  <li>CQRS</li>
  <li>Debian</li>
  <li>Docker</li>
  <li>Git</li>
  <li>Jenkins CI</li>
  <li>MacOS</li>
  <li>MySQL</li>
  <li>NixOS</li>
  <li>Numpy</li>
  <li>Pandas</li>
  <li>PostgreSQL</li>
  <li>REST</li>
  <li>Rails</li>
  <li>Tensorflow</li>
  <li>Ubuntu</li>
  <li>Yesod</li>
</ul>
</section>
</div>
#+end_export
* Employment
:PROPERTIES:
:ID:       67be7ee8-62ec-40c6-9ed2-8a1c9399c34a
:END:
** Hero Projects, Lead Project Engineer
:PROPERTIES:
:ID:       0a968027-cd4c-42b5-ad74-1e3f4f401b0e
:END:

2018 - present

Hero is a media company in L.A. On a part-time basis, I'm developing their
mobile and web apps, which is like Netflix for comic books. Instead of movies
there is a comic book player, which overlays music according to the page of the
comic you're on and guides you through the story. This is alpha stage currently,
but will go live later in 2019. Written in all Haskell using [[https://haskell-miso.org/][Miso]].

Technology used:

- Haskell (frontend and backend)
- CDN
- REST API
- PostgreSQL database
- NixOS

** UE Authority, Senior Software Engineer
:PROPERTIES:
:ID:       512fd222-f8d0-4dcf-8b72-1de828e623b4
:END:

2018 - 2019

UE.co provides car- and home-insurance sales leads to a country-wide network of
salespeople. I was responsible for developing a few data pipelines for use in
their next-gen platform. The service would fetch leads from external providers
or accept a CSV upload of lead data, scrub the data through half-a-dozen
internal services, and deliver the end result to a front-end application which
allowed the salesperson to save the list of leads for later. My services were
written in Haskell and designed to be highly concurrent, handling something like
60k-70k leads per minute. The bottlenecks ended up being the insert operation
into Amazon Redshift, and the third-party APIs.

Technology used:

- AWS infrastructure
- Haskell data pipeline backend
- MySQL and AWS Redshift
- RESTful API with Swagger docs

** Software Engineer, Liaison Technologies
:PROPERTIES:
:ID:       7bd433ea-05dd-4547-a1c8-41be73bd32bf
:END:

2015 - 2018

I co-designed and implemented a distributed, streaming, immutable, event-sourced
cloud database for semi-structured enterprise data, plus a few AI-based
microservices for extracting structured intel out of the semi-structured streams
of data in our database. The business goal is to flexibly extract intelligible
data from customers' data banks. Everything was done in Clojure, on a private
cloud infrastructure with Docker containers as deployable microservices.

Technology used:

- Clojure and Java
- PostgreSQL, ElasticSearch, ArangoDB
- Apache Kafka, Apache HBase
- REST API with Swagger integration
- event sourcing, command query responsibility segregation (CQRS)
- schema matching

** Software Engineer, Thermo Fisher
:PROPERTIES:
:ID:       5cda1cad-4ff8-41eb-a980-b7c89645eaff
:END:

2017

I wrote services and UIs for creating and running hardware tests on all of
Thermo Fisher's equipment. The application allowed field technicians to
collaborate on custom diagnostic tests for each instrument, connect to any
instrument on the network, run tests remotely or on-site, etc. The end product
is deployed as a Docker container onto mostly Windows machines used by Thermo
Fisher technicians.

Technology used:

- Typescript & AngularJS UI
- Python backend
- CouchDB datastore

** Software Engineer, WholeLatteLove.com
:PROPERTIES:
:ID:       2efc98b5-4892-41be-9c48-391462095292
:END:

2015

As a full-stack developer, I was responsible for the DevOps workflow on AWS and
legacy servers, setting up and doing deployments, diagnosing and fixing bugs,
managing a git workflow between in-office and remote developers, and coding new
features on both the frontend and backend.

- Designed/implemented app-wide notification system.
- Moved a legacy Ruby on Rails app from a small, unreliable data center to AWS,
  with continuous integration, testing, & deployment.
- Updated a large Rails ecommerce engine we depend on (Spree) which required
  implementing a dozen custom extensions.
- Developed a data generator to easily replicate our production environment in
  staging.
- Created a suite of simulation tests for our legacy order processing systems
  using the Clojure framework Simulant.
- [Read more here.](/projects/wholelattelove.html)

** Lead Developer, Nebula Bio
:PROPERTIES:
:ID:       47f3a530-aeee-47f1-91a2-9143470e3ee3
:END:

2014 - 2016

With a biomedical engineer partner, I developed an open source, low cost,
portable blood analysis platform. Our goal was to be the “Arduino of biotech”.
All development was done on [GitHub](https://github.com/nebulabio).
Unfortunately the project was cut short because protein reagents are expensive
and I was a college student.

- Designed a POSIX-compatible driver for a custom potentiostat.
- Created a custom crowdfunding webapp with a REST API in Clojure,
  deployed on Heroku.
- Created a GUI in Python for the driver, and beginning beta testing
  with crowdfunders/customers.
- Lead and handle all project management and financial aspects of the
  project.

** Instructor, Thinkful
:PROPERTIES:
:ID:       a7d5ec5c-3ac2-4580-afbd-5cfca5726708
:END:

2014 - 2015

Taught data science and full-stack web development with Python to new and
intermediate students. I also helped develop their curriculum by writing
tutorials and exercises for each of the courses I taught.

** Nebula Sports
:PROPERTIES:
:ID:       7d7313d7-d3fa-4d2e-a1c6-ed3292efc1ee
:END:

2012 - 2013

An [RIT sponsored][summerstart] startup project that lasted for about a year, in
which we developed novel headgear padding for athletes. My main role was in
guiding the scientific research, while solely managing the fundraising (grants
and private investment). In a 4-person team, we developed an algorithm for
optimizing our custom padding to a specific position within a specific sport.
Patent concerns made us shut down this part of the project. We then prototyped
and programmed an accelerometer to be housed inside a helmet and signal to the
athlete the severity of an impact. Reebok released their CheckLight product
before we finished developing, and so scooped the market. All algorithm
programming was done in Matlab.

[summerstart]: https://www.rit.edu/research/simonecenter/saunders-summer-start-program

** Freelance Developer
:PROPERTIES:
:ID:       0b6036d6-b222-4e2b-af0d-a3597c40597b
:END:

2012 - 2014

As a freelance developer, I created two ecommerce systems in PHP, a
ClojureScript front-end website to be used as a landing page, and worked on an
e-magazine site for a local Rochester magazine.
* Involvement
:PROPERTIES:
:ID:       f96d7710-136e-4d12-9608-ea81df1c22c5
:END:
** Meetup presentations
:PROPERTIES:
:ID:       ea117f72-0b93-4788-b8f3-15e65c5d2142
:END:
- /A Categorical Theory of Patches/. May 3, 2018, Papers We Love San Diego
- /Getting Started with Yesod/. April 10, 2018, Haskell Hangout
- /Intro to Easy Deployments with NixOps/. March 21, 2018, San Diego DevOps
  Group
** OpenSource contributions                                       :noexport:
:PROPERTIES:
:ID:       ee748520-3055-4636-8812-b7f573e5dab3
:END:
* Education
:PROPERTIES:
:ID:       be889b72-85bd-4d21-a9bc-9e896a23c0bd
:END:
*A.B.*, Philosophy, Rochester Institute of Technology, 2014. Thesis: /Wonder and
  Desire in Romantic Love: Levinas and Irigaray/