Gregory Travis
Senior Software Engineer And Functional Programming Enthusiast
Hi!
I'm a developer and functional programming enthusiast living in New York City.
I've worked in games, the web (frontend and backend), graphics, and distributed
cloud infrastructure. On the side, I work on projects in graphics, audio
synthesis, and programming language design.
I've worked at game studios (Looking Glass), web startups (EarthWeb, Dynamic
Logic), and Google.
Fluent in: C++, C, Haskell, Ruby, Java, Python, Javascript.
I've given talks at
ICFP F.A.R.M. 2020,
Haskell eXchange 2020,
and
Audio Programmer Meetup January 2021.
Some projects I'm proud of:
kActor is an interpreted scripting language integration for Unreal Engine. kActor integrates the k interpreted language, letting you write game logic in k. It only contains bindings for Actors, using hand-written boilerplate for calling from C++ to k and vice versa.
Holfenstein is a Wolfenstein-3D-like first-person renderer written in Haskell (and a bit of C). Holfenstein uses SDL for basic window and keyboard interaction, but no graphics primitives. All graphics are rendered directly to a framebuffer from both Haskell and C.
Rhythmr is an interactive loop-based performance and composition tool written in Haskell for creating rhythm loops from randomly-acquired audio files. The user iterates through an unending stream of randomly combined music loops, swiping left or right on each one to indicate whether they like them or not. Rhythmr derives a model of which combinations sounds good, and from that produces a complete song by inserting the chosen combinations into a predefined score. Presented at ICFP F.A.R.M. 2020, Haskell eXchange 2020, and Audio Programmer Meetup January 2021.
TMI is a pure functional, reactive, pervasively persistent programming language implemented in Haskell. In TMI, the entire lifetime of a software system is treated as a single time-series database. The execution of the program is defined as proceeding through the sequence of database states. That means that the development process can be considered to be part of the execution of the program.
Hen is a dynamically typed, pure functional language with pattern-matching and monadic IO. It includes an FFI generator and example OpenGL programs. It uses S-expression syntax, and is implemented as a lazy lambda graph reducer. The sample program is a port of an OpenGL sample FBO program that renders a cube, and then maps the cube rendering onto the faces of another cube.
Loopo is a beat-synchronized loop sampler plugin implemented with JUCE. It's like a sampler, but with a very simple twist: it does not start playing a sample at the start, but in the middle. If your source material rhythmically matches, then everything you play will be in rhythm, no matter how you play. Compatible with all major DAWs.
SDF is a GPU screensaver implemented in Haskell and WebGL. GLSL code is generated from a DSL. SDF uses 2D signed distance functions to define primitive shapes and shape combinators, and renders them anti-aliased. The simple Javascript client downloads new randomly-generated animated shapes from the server every five seconds, seamlessly blending them in the browser, resulting in an animation that never repeats. It's built around a DSL that compiles pixel shaders to GLSL. Its core expression type is not refined by a GLSL type, so some type errors are caught by the DSL's crude typechecker, and the rest by the GLSL compiler.
k is a curly-brace programming language prototype with continuations, coroutines, and a custom parser.
Zound is a fast, patch-oriented dataflow audio synthesis engine written in C. Audio units are written in C with special annotations, and audio patches in a simple line-oriented graph description language.
JBE (Emacs For Def Beats) is a mostly-keyboard loop editor. It's good for trawling through audio looking for loops, and for stretching and arranging them. It uses fast, high-quality sinc-based interpolation for resampling.
Hed is a text editor written in Haskell. Well, not much of a text editor yet, but it can run the Game Of Life.