Westley Argentum Hennigh-Palermo
I enjoy working on interdisciplinary teams taking on creative and artistic work that demands complex engineering. I've helped create indie games, worked on platforms for visualization and simulation, and supported journalists by building tools and furthering research.
Often I contribute as a software developer but I will jump at opportunities to help with on-the-ground reporting and I'm happy to do the work of deploying and supporting useful hardware and software systems.
Some experience with: Rust, Java, Objective C, Lua, x86 Assembly, GLSL, SQL
Tools: Node.js, React, React Native, D3.js, AWS, Docker, Xen, Qubes, Bash, Git, SVN, iOS SDK, GCC, STL, OpenGL, Visual Studio, Kinect SDK
Research Engineer at The Intercept (2016-Present)
At The Intercept I work with an extraordinary group of librarians, researchers, engineers, and security experts on the Research Team. My primary responsibility is to help design and implement tools and workflows for handling sensitive documents in secure ways. I also sometimes assist with document discovery and story research.
Rififi is a distributed database designed to enable the building of safe, collaborative applications that journalists can use in even the most challenging security environments. Rififi is still a work in progress and hopefully in the future it will be open sourced.
Trial and Terror (2017)
Trial and Terror is a data journalism project that highlights some of the problems with prosecutions for international terrorism charges that have happened in the US since 9/11. Since publication the project has won multiple awards including the Online Journalism Awards (OJAs) award for Investigative Data Journalism (Small/Medium Newsroom).
As part of the project, international terrorism cases are tracked and updated on an ongoing basis using an internal administrative tool. When updates are published the public facing visualizations update accordingly. I was a small part of the engineering team supporting the project.
Fellow at the BuzzFeed Open Lab (2015-2016)
I participated in the inaugural batch of the BuzzFeed Open Lab. As part of the year long fellowship I worked with some amazing artists, hackers, and journalists on hardware and software projects for the newsroom.
BuzzBot is an experiment, designed to help journalists connect with people on the ground at events. It acts as a Facebook Messenger bot plus a dashboard that journalists can use to send messages to groups of users and view aggregated responses.
I built BuzzBot at the Open Lab, and BuzzFeed News deployed it during the 2016 RNC and DNC. You can read more about our initial plans here.
Shit VCs Say (2016)
Shit VCs Say is an iOS quiz game that takes a critical look at some of the weirder propaganda coming out of Silicon Valley. Players try to discern whether anonymized quotes were made by prominent venture capitalists or characters from Sesame Street.
RSS Puppy (2015)
RSS Puppy is a simple but useful tool designed to monitor RSS feeds in bulk and generate machine-friendly notifications when new entries appear. I built it as part of a larger project to help journalists automate some of the tedious parts of watching and processing document dumps.
Attended Recurse Center (2014)
The Recurse Center is a free, self-directed, "retreat for programmers" where participants spend twelve weeks together learning and exploring ideas. I was in the summer 2014 batch.
A prototype of a fantasy football-like game where players build teams out of lobbyists and compete in “seasons“ of Congress. At the Recurse Center I assembled data for the 112th and 113th Congresses, built a model for scoring actions on bills, and developed a simple but playable prototype. More on the data behind the project is published here.
Engineer at Forio Online Simulations (2012 - 2014)
Forio builds educational simulations for groups like MIT, Harvard, and Wharton on a platform that was engineered in house to support data scientists and modelers. I worked there as an engineer helping to integrate a new scientific computing language called Julia into their platform.
Mandelbrot is a distributed computing engine that runs Julia code (and exposes bindings for other languages). I was responsible for the laying out much of the initial architecture and implementing many of the base systems. I then continued to work on in a small team towards making the system better, faster, and more fault tolerant.
GeneticAlgorithms.jl is a lightweight framework that simplifies the process of creating genetic algorithms and running them in parallel. The idea was to break a GA into a set of independent functions. The framework could then use multiple processors to run different pieces of the GA at the same time.
Julia Studio (2012-2014)
Julia Studio is a (long obsolete!) open source IDE for the Julia language. After implementing several rough prototypes and plugins, we decided to fork Qt Creator, strip out everything nonessential, and build in tools to help people iterate quickly while writing Julia.
I was the primary developer on Julia Studio during prototyping and for the first few releases. We then expanded the team and I shifted focus to other projects, but I still helped with OSX support and some community outreach.
Independent Games Developer + Student at DigiPen (2008-2012)
At university I worked in close-knit teams on independent games, built from scratch in C++. I graduated with a BS in Computer Science in Real Time Interactive Simulation and a minor in Math.
Solstice is a music-driven exploration game that uses the Kinect. Players fly around a storybook world that changes as they collect fragments of the sun. A small group of friends and I worked on the game for a couple of years during school, and we were recognized at several events:
- Best Kinect Game - hóPLAY (2012)
- Honorable Mention - indiePub: Independent Propeller Awards (2012)
- Presenter - Tokyo Game Show: Sense of Wonder Night (2011)
- Game of the year, runner up - DigiPen Game Awards (2011)
My contributions included:
- Work on a component based engine used by our team and the developers of Nitronic Rush. Highlights included C++ Expression Templates, a spline interpolation system, and a threaded job manager.
- A 3d physics engine that supported collision detection and resolution of simple shapes like spheres and boxes with height maps and arbitrary mesh objects. It also generated efficient partitioning structures for use in broad and narrow phases of collision detection.
- Many of the game specific subsystems and logic. For instance: Kinect support, entity and object logic, and some of the seasonal effects.
Open Source Contributions
Research + Writing
At the intercept I've contributed research to a number of stories including:
- Everybody Does It: The Messy Truth About Infiltrating Computer Supply Chains
- The NSA Worked to “Track Down” Bitcoin Users, Snowden Documents Reveal
- How Peter Thiel’s Palantir Helped the NSA Spy on the Whole World
- Trial and Terror
During my fellowship at BuzzFeed I authored a handful of posts about computation and automation in journalism.
We should be making bots that collaborate.
Published by OpenSource.com
Talks + Panels
"Who optimizes the optimizers: Can genetic algorithms help us to optimize the layout of LLVM IR passes used to compile Julia code?"JuliaCon 2015:
Bay Area Julia Users: While working at Forio I helped create the Bay Area Julia Users meetup with some co-workers, and it quickly became the biggest Julia meetup in the world. We scheduled presentations once a month or so and had a wide range of speakers present interesting projects done with the language.
I've built a variety of mobiles that you can print and then assemble using yarn and other basic materials. I also sometimes design coasters and other simple objects just for fun.
Interactive Video Bot (2016, BuzzFeed)
A bot for making Facebook live streams interactive. It will watch for comments on a facebook live video and fire events when it sees "trigger" phrases. We used it at BuzzFeed to make a dog treat dispenser that people could trigger while they watched a live stream of shelter puppies.
Unwelcome Bot (2016, BuzzFeed)
A configurable twitter bot that should be used responsibly. Unwelcome Bot will monitor twitter and interject in conversations. It knows how to track words and phrases, it can watch for geolocated tweets, and it has several options for filtering tweets based on things they do or do not contain.
LLVM Pass Optimizer (2015, Independent)
A genetic algorithm designed to optimize the layout of LLVM IR passes used to compile Julia code. It uses an interesting crossover function called Synapsing Variable Length Crossover.
Lumberjack.jl (2014, Forio)
Lumberjack.jl is a logging library for Julia motivated by more than just server-side needs. It's designed to be extremely modular and therefore flexible enough to be used in modeling code as well as in the backend.
GitHub.jl (2014, Independent)
GitHub.jl started as a personal project that wrapped the GitHub API and made it easier to call from Julia. The community around it grew, and eventually it was absorbed into the larger JuliaWeb organization.