Benjamin R. Bray

Welcome! This page organizes my experiences by skill, rather than by employer. You can view a more traditional resume by following the link below: Download PDF Resume

Main Interests

  • Building reliable, reusable, and maintainable software that is enjoyable to use.
  • Working on language servers, static analysis, and type inference in order to upgrade the user experience of software engineering workflows.
  • Tools for composing rich text documents. I created the Noteworthy markdown editor, as well as the prosemirror-math and remark-cite packages.
  • Computer graphics, simulation, and numerical methods. I originally learned to code by making Flash games, and fell in love with the unique confluence of art, math, and code involved.

Education

  • Master of Science (M.S.) in Computer Science from Georgia Institute of Technology, 2019
  • Bachelor of Science (B.S.) in Mathematics from University of Michigan, 2017
  • See the second page of my resume for a list of notable coursework.

Publications

Reimann, Jesse; Mansion, Nico; Haydon, James; Bray, Benjamin; Chattopadhyay, Agnishom; Sato, Sota; Waga, Masaki; André, Étienne; Hasuo, Ichiro; Ueda, Naoki; and Yokoyama, Yosuke. Temporal Logic Formalisation of ISO 34502 Critical Scenarios: Modular Construction with the RSS Safety Distance. In CoRR. 2024
McIsaac, Peter; Jamin, Sugih; Ibanez, Ines; Singer, Oskar; and Bray, Benjamin. Die Geowissenschaftliche Analyse von großen Mengen historischer Texte: Die Visualisierung geographischer Verhältnisse in deutschen Familienzeitschriften. In 3. Tagung des Verbands Digital Humanities im deutschsprachigen Raum, DHd 2016, Leipzig, Germany, March 7 - 12, 2016. Edited by Burr, Elisabeth; and Helling, Patrick. 2016

Skills

The skills below are listed in no particular order. Use the links to jump between sections!

Product Development

As a Research & Development Engineer for Hasuo Lab at the National Institute of Informatics,

  • I worked closely with researchers to help translate their academic work into proof-of-concept software tools aimed at improving formal verification workflows in the automotive industry.
  • When planning each project, I considered carefully how best to leverage my team’s core competencies to solve problems brought to us by collaborators from Japanese automotive companies.
  • I contributed to the successful delivery of four prototypes:
    • (ongoing) A model checker for a simple imperative probabilistic programming language.
    • A domain-specific language called tempo-lang which compiles to signal temporal logic expressions, along with a language server and web app for creating, documenting, and exemplifying specifications. (see [Reimann 2024])
    • A web app for demonstrating the behavior of RSS safety conditions (see [Hasuo 2022])
    • (joined midway) A proof checker for Differential Floyd-Hoare Logic (see [Hasuo 2022])
  • I presented our work at the IAA Mobility 2023 trade show in Munich, Germany.
  • You can learn more about our work by reading paper1, paper2, these slides, or this brochure.

Many of my open-source projects are aimed at designing better software for students and researchers, whose needs are often underserved by commercial software:

  • I created Noteworthy to experiment with new ways to support WYSIWYG editing of documents making extensive use of math, diagrams, links, and academic citations.
  • I created prosemirror-math in order to encourage more widespread adoption of user-friendly LaTeX math input on the web. With ~1.8k weekly downloads and adoption by the Zotero reference manager, I like to think that I’ve already had an impact!

I find it immensely satisfying to work on projects tailored to meet the needs of a niche audience who will benefit directly from my improvements. A good user experience is at the forefront of all the work that I do.

Frontend Engineering

I have 7 years of experience writing TypeScript, both at work and for open source projects.

  • I’m proficient with both the React and SolidJS reactive UI frameworks.
  • I have a deep working knowledge of the ProseMirror and CodeMirror editor toolkits.
  • I’ve worked briefly with WebGL and Rust+WebAssembly, and would enjoy diving deeper.

I enjoy designing rich document editors for note-taking, documentation, and academic writing.

  • I created the Noteworthy WYSIWYG desktop markdown editor, tailored for personal research notes making extensive use of math and citations. Built with TypeScript and Electron.
  • I maintain the prosemirror-math and remark-cite packages on NPM.
An open-source Markdown editor with bidirectional links and excellent math support!
Schema and plugins for writing mathematics in prosemirror, using KaTeX.
A collection of plugins for the remark markdown processor adding support for pandoc-style inline citation syntax and bibliography formatting.

Backend Engineering

I worked for one year as a backend engineer at Smartpay KK, a Japanese fintech startup.

  • I led the design, implementation, testing, and release of a programmatic disbursements backend service which integrates with bank APIs to automatically issue merchant payouts and consumer refunds on a fixed schedule.
  • I participated in code review, API design, and sprint planning for a backend API powering the mobile & web apps for a pay-later service.
  • I collaborated with our frontend team to design a GraphQL API to power our mobile app.
  • Tools: Scala (with cats-effect), Docker, GCP, PubSub, Postgres, Terraform Cloud

I also have experience with the following backend tech:

  • Building backend services with node.js, Scala’s http4s, and Haskell’s servant.
  • Containerizing networked applications with Docker.
  • Writing GitHub Actions for continuous integration and other automations.

Functional Programming, Compilers, and Formal Methods

While working as a Research Engineer for Hasuo Lab at NII, Haskell was my daily driver for implementing parsers, interpreters, type inference algorithms, and a language server.

  • I added support for user-defined functions, enum types, and record types to a domain-specific language called tempo-lang, which evaluates to signal temporal logic expressions.
  • We used sbv to support z3 SAT/SMT formulas as a compile target for our tempo-lang DSL.
  • Tools: servant, aeson, mtl, transformers, megaparsec, quickcheck, and a dash of lens.

As a Backend Engineer at Smartpay, I wrote purely-functional Scala in tagless-final style using the cats-effect ecosystem. Compared to Haskell, Scala takes a more pragmatic approach to functional programming, allowing for gradual adoption of functional patterns where they pay off the most.

In my free time, I enjoy experimenting with dependently-typed languages like Coq and Lean. I’d love to work on tools which make dependently-typed programming more user-friendly. I created the toy language yagi-lang to learn more about dependent type theory and language implementation:

Yagi is a toy functional language for understanding dependent type theory.

Here are a few other related personal projects:

A collection of reference implementations of type inference algorithms, with particular emphasis on features which are necessary for practical implementations, such as error reporting.
A command line tool to help organize my own music library, written in Haskell. Helps the user fill in missing music metadata by querying Discogs and MusicBrainz for matching tracks.

Computer Graphics & Numerical Methods

I’m comfortable with the foundations of computer graphics, including:

  • linear algebra, matrix calculus, differential equations
  • OpenGL, WebGL, rendering pipeline, shaders
  • physically-based animation (collision detection, constraint resolution, fluid simulation)
  • classic shading techniques as well as the basics of physically-based rendering
  • the basics of discrete differential geometry for mesh processing

As a Computer Vision Engineer at EmbodyMe, I trained deep learning models for facial expression transfer, and contributed to our graphics pipeline, which applied spherical harmonics lighting and other post-processing effects to enhance the realism of meshes output by the deep learning model.

Stemming from my interest in physical simulation for games, I elected to take several project-based courses (in C++, CUDA and python) on numerical analysis during my undergrad and masters. Topics included:

  • matrix norms, conditioning, stability, error analysis
  • fixed point methods, gradient descent, Newton’s method
  • convex optimization, linear programming, linear complementarity problems, Frank-Wolfe
  • stationary iterative methods; conjugate gradient and Krylov subspaces; Chebychev polynomials
  • nonuniform FFT and butterfly algorithms; Ewald summation; multigrid; fast multipole methods
  • Finite element analysis; molecular simulation with hydrodynamic interactions

Here are a few notable projects I’ve worked on, either through coursework or out of personal interest:

  • (ongoing) A Rust implementation of the sequential impulse algorithm for 2D rigid body physics, based on Erin Catto’s description of the classic Box2D solver.
  • A C++/CUDA simulation of 2D incompressible fluid flow, based on the “Stable Fluids” paper by Jos Stam, using a parallel Jacobi method on the GPU.
  • A TypeScript implementation of 2d collision detection using tests based on both the Separating Axis Theorem the Gilbert-Johnson-Keerthi distance algorithm

As a teenager I worked as an independent game developer, publishing Flash games to the Newgrounds game portal under the username archawn. My games earned a modest amount of money from ad revenue and sponsorships through the Flash Games License marketplace. You can play a collection of my early games at the link below.

Machine Learning

In my role as a Computer Vision Engineer at EmbodyMe,

  • I used PyTorch for training deep learning models to transfer facial expressions from an input video onto a target image in real time. At a high level, our model operated on face blendshapes produced by MediaPipe, and we applied various graphics post-processing techniques to achieve a realistic result. We used a separate model for mouth inpainting.
  • I led a biweekly deep learning & graphics reading group to follow recent developments (GANs, attention, transformers, distillation, NeRF) and distribute knowledge among the team.
  • Tools: Python, PyTorch, ONNX, MediaPipe, PyOpenGL

I spent 3 years as an Undergraduate Research Assistant using statistical topic models to analyze a large corpus of 19th-century German periodicals. During the course of the project:

  • I implemented algorithms for topic modeling (LDA/HDP) from scratch in Python, designed a custom OCR error correction scheme for German blackletter fonts, and trained a logistic regression classifier for place-name detection.
  • I built a web-app allowing humanities researchers to browse our dataset and visualize the results of our topic modeling analysis.

I have also served as a lecturer and teaching assistant for a several courses in Machine Learning at the undergraduate & graduate levels. See the teaching section below for more details.

Open Source

Open Source Packages

I maintain the following npm packages:

Schema and plugins for writing mathematics in prosemirror, using KaTeX.
A collection of plugins for the remark markdown processor adding support for pandoc-style inline citation syntax and bibliography formatting.

Open Source Contributions

I’m quick to git clone open source software that I rely on. Here are a few of my contributions:

Teaching

Georgia Tech

University of Michigan

  • (Instructional Aide) EECS 445, Machine Learning, (Winter 2017)
  • (Instructional Aide) EECS 445, Machine Learning (Fall 2016)
  • (Instructional Aide) EECS 545, Graduate Machine Learning (Winter 2016)
  • (Math Lab Tutor) MATH 425, Introduction Probability, (Fall 2015 - Winter 2016)
Bibliography
[0]
Reimann, Jesse; Mansion, Nico; Haydon, James; Bray, Benjamin; Chattopadhyay, Agnishom; Sato, Sota; Waga, Masaki; André, Étienne; Hasuo, Ichiro; Ueda, Naoki; and Yokoyama, Yosuke. Temporal Logic Formalisation of ISO 34502 Critical Scenarios: Modular Construction with the RSS Safety Distance. In CoRR. 2024
[1]
McIsaac, Peter; Jamin, Sugih; Ibanez, Ines; Singer, Oskar; and Bray, Benjamin. Die Geowissenschaftliche Analyse von großen Mengen historischer Texte: Die Visualisierung geographischer Verhältnisse in deutschen Familienzeitschriften. In 3. Tagung des Verbands Digital Humanities im deutschsprachigen Raum, DHd 2016, Leipzig, Germany, March 7 - 12, 2016. Edited by Burr, Elisabeth; and Helling, Patrick. 2016