EMPEX, the Empire City Elixir Conference, is a sophisticated conference series for the Elixir programming language and ecosystem held in New York City. We present a single track of technical talks in a jazz club. Our goal is to bring a sense of aesthetic and fun to the growing Elixir community. We'd love for you to join us!


EMPEX will be held at Subculture, an initimate jazz club in Soho.

45 Bleecker St, New York City, 10012
Find it on Google Maps


We're excited and proud to announce our keynote speakers for the third annual EMPEX!

Zelenka brooklyn

Brooklyn Zelenka


Brooklyn Zelenka is a polyglot programmer, a founding partner at Robot Overlord Software, and coffee enthusiast. She has been doing production Phoenix work for a few years, mentored teams through their adoption of Elixir, and released several BEAM libraries including Quark, Witchcraft, and Exceptional. She is the founder and organizer of multiple Vancouver meetups and conferences, variously centred around functional programming, culture, and mentorship. Lately she has been thinking a lot about the success and failure modes of different tech disciplines, scaling blockchain VMs, and how dependent types can help save us from ourselves. When not roaming the world as a digital nomad, Brooklyn is based out of Vancouver, Canada.

Thomas dave

Dave Thomas


Dave Thomas has written code just about every day in the last 45 years. One day he’ll get it right.

He’s an author: The Pragmatic Programmer, The Manifesto for Agile Software Development, Programming Ruby, Agile Web Development with Rails, and recently Programming Elixir. He speaks at conferences around the world, and runs training for folks who want to enjoy themselves while learning (kind of like a Comedy Defensive Driving class).

But mostly he writes code; sometimes to solve problems, sometimes to understand problems, and often to create them.

He has strong and controversial views on how Elixir should be written; prepare to be both entertained and annoyed.


We're proud to announce the following presenters for EMPEX!
Bill Peregoy

Bill Peregoy

Higher Level Functions for the Win

One of the key tenets of functional programming is that functions are first-class citizens. Amongst other things, this means that functions can be accepted as parameters to other functions. While this seems like an interesting idea in theory, developers new to functional programming often have a hard time understanding how to apply higher order functions in their day-to-day work. This talk will give an overview of what higher order functions are, and how we may already be using them in our daily programming life using Elixir library functions like map, filter and reduce. With this background, we will show how to create and use our own higher order functions to increase readability, decrease repetition and simplify the testing process.

About Bill: Bill Peregoy is a developer at The Gnar Company, a software consultancy in Boston, MA. Bill has worked in a wide range of technical positions, from sub-micron semiconductor design and test, to systems and web programming. Bill is currently exploring the world of functional programming (and chronicling it at: becoming-functional.com) and is currently consulting in Boston MBTA using Elixir to improve local mass transit.

James Lavin

James Lavin

Lessons Learned Building a Medication Service at Teladoc and How Ecto Saved the Day

Learn how Teladoc built a medication history and pharmacy benefits service as an Elixir umbrella project. Hear about tools used and lessons learned during the project. And find out how Ecto saved the day when databases were radically overhauled.

About James: James wasted 14 years at Harvard, LSE, and Stanford studying Not Programming, wrote "Management Secrets of the N.E. Patriots," then became a Ruby dev, the last 5 yrs at Hedgeye & Teladoc. Spoiled by Elixir, he's now enjoying learning Elm, Haskell, & FP.

Jeff Smith

Jeff Smith

Neuroevolution in Elixir

Python has become the dominant language for machine learning, and as an Elixir dev, that’s a real bummer. When building machine learning systems, there’s lots of reasons to want to use tools like metaprogramming, concurrency, supervision, distribution, higher-order functions, and all of the other things that Elixir does well. This talk introduces a library that tries to let Elixir and Python each do what they do best, in collaboration.

Galápagos Nǎo is an Elixir library to evolve deep neural networks. Under the hood it uses the Gluon Python API to Apache MXNet, to take advantage of one of the most flexible and performant deep learning libraries around. The goal of this unholy union of technologies is to do something even harder than building deep learning models: build an ecosystem that evolves deep learning model architectures. Just for fun, the framework also includes shiny features like interactive evolution and optimization of architectures for non-functional requirements.

Other exciting highlights:

  • Supervision
  • Cyborg tortoises
  • Language interop
  • Evolutionary theory
  • Bleeding edge deep learning
  • Snake charming

About Speaker: Jeff Smith is an AI developer, author, and manager. He coined the term reactive machine learning and wrote the definitive text on the topic.

Kate Travers

Kate Travers

Pattern Matching: The Gateway to Loving Elixir

What is pattern matching in Elixir? For this developer, it's what won me over to the language. This deceptively powerful paradigm is at the heart of what makes Elixir such a compelling language to program in. It's doing so much more than help you write small, declarative, maintainable functions; it's making you a stronger programmer. This talk covers pattern matching basics, then moves into practical, real world examples for a thorough introduction to Elixir's implementation of this crush-worthy construct.

About Kate: Kate is a NYC-based web developer. A graduate of the Flatiron School, Kate spends her days building Learn.co. Outside work, Kate is an active volunteer and tutor through FIS, as well as backup quarterback for her co-ed touch football team.

Mat Trudel

Mat Trudel

`mix new beats` -- Recreating The "Amen Break" with Elixir

As part of my day job I write and maintain SchedEx, a Swiss Army knife for job scheduling in Elixir. It's an indispensable library that sits at the core of a product used in manufacturing plants worldwide. An after work discussion led me down the path of applying SchedEx to soft real-time scheduling, and before long the beats project was born. Using the production proven SchedEx library as a foundation, beats is an ncurses-based, file-driven, actually-sort-of-useful drum machine that also happens to be a great lab for exploring scheduling. The talk will provide a tour of several real world patterns for job scheduling within Elixir, demonstrate some strengths and limitations of the Erlang runtime, and also build up a few classic beats & breaks along the way.

About Mat: Mat is a polymath tech consultant from Toronto who loves solving the really gnarly problems. A relentless builder whose natural habitat is the basement workbench, he's a fan of honesty, good design, and golden era hip-hop.

Robert Beene

Robert Beene

GenStage: Keeping large amounts of data up-to-date with Pipelines

SMS is the dominant communication channel for how business is done in Africa. The healthcare industry, in particular, has taken advantage of targeted messaging to better patient outcomes. Our team had the opportunity to architect a messaging platform that integrates into any number of partner hospitals to leverage SMS. By filtering patients based on their condition, demographics, or location, healthcare workers can effectively communicate with their patient base. To achieve this, medical records need to be up-to-date. How do we effectively manage updates in a way that is fault-tolerant? How can we ensure that we don't overwhelm a partner's API? What solution gives us the tools to support multiple partners in the same system? In this talk, we'll share how we used GenStage to answer all of these questions and share our road to production.

About Robert: Robert loves bouncing around the globe helping companies. You'll find him developing an indie music app one day, then scaling a giant telemedicine platform the next. He's worked gigs in Boston, NYC and Paris but now runs his remote agency, Echobind.

Shanti Chellaram

Shanti Chellaram

The Best of Both Worlds: High Performance Recommendations with Elixir NIFs

Teachers Pay Teachers needed to build a system to serve our feature-factorization item recommendation model. I go in depth to how we used erlang's process model for managing and sharding the data set, and C's power for fast number crunching to build a system that could serve thousands of users personalized recommendations from over 2 million items.

About Shanti: Shanti is a software engineer at Teachers Pay Teachers, where she helps develop backend systems in Elixir and Erlang.

Sophie DeBenedetto

Sophie DeBenedetto

Phoenix Presence: The Right Way To Track User Involvement in Real-Time Features

You've used Phoenix Channels to build real-time features like collaborative text editors, games and chatting apps. But how can you acheive the common real-time aim of tracking and displaying a user's participation in such features? While we can leverage GenServers to build out features like displaying the users in a chat room and indicating who is typing, that approach leaves us responsible for hand rolling *a lot* of code. Enter Phoenix Presence! The Phoenix Presence module provides an API for you to register information regarding a given topic and expose that information to all of that topic's channels. Phoenix Presence is powerful because it is distributed and resilient––unlike tools like Redis, which rely on a centralized data store, Presence uses a conflict-free replicated data type protocol.

You'll learn how to use Phoenix Presence to track user participation in a real-time feature and you'll gain a deeper understanding of the technology behind the awesome power of Phoenix Presence. We'll look at how to include Phoenix Presence in a Phoenix app that already leverages channels to implement a real-time collaborative text editor. If you have some experience with Phoenix Channels, all the better, but we'll cover some high-level Phoenix Channel concepts and spend most of our time on the incorporation of Phoenix Presence on the back-end, with a brief look at some Phoenix Presence client-side code.

About Sophie: Sophie is a software engineer at TuneCore where she helps artists distribute their music to all the online stores. As a former instructor at the Flatiron School, she's passionate about teaching and learning all things code. Historically she is a cat lover but will admit to owning a dog.

Wojtek Mach

Wojtek Mach

Recurrences & Intervals

This talk is retelling my journey down the rabbit hole of dealing with date & time.

We will start the journey with date/time recurrences. Then, we will look at time intervals and operations around them. Finally, we will look at Eric Evans' talk "Exploring Time" which gives a fresh look at date/time in general and intervals in particular (spoiler alert: there might be some relevant research from the 80s around that too!). We will model both recurrences and intervals as streams and we will try to show that Elixir's extensibility makes it a great language for developing business applications.

About Wojtek: Wojtek is a software developer based in Kraków, Poland. He is member of the Hex team and he works at ClubCollect, a Netherlands-based startup.


Doors open / Registration
Opening Remarks
Keynote: The Language is the Least of It
Everything Beautiful is in Plug
Channels as Controllers (An Exercise in Refactoring)
When Does Concurrency Pay Off?
Seussical Halting, Indeterminate Faulting
Monitoring Production Elixir Applications
Functional Data Structures
Understanding Elixir's (re)compilation
Solid Ground
Closing Keynote
Closing Remarks
After Party!

The afterparty will be held a short walk away at Swift Hibernian Lounge (34 E 4th St New York, NY 10012)


Andrea Leopardi

Andrea Leopardi

Eric Meadows-Jönsson

Eric Meadows-Jönsson

Parallel Computation with Elixir

Elixir provides a few tools to parallelize computation and parallel processing of collections in particular. These tools operate at different levels of abstraction and complexity. On one end, you can manually spawn processes to do work and manually collect results; on the other end, you can use more complex tools like GenStage and Flow. The choice of tool depends on the situation at hand.

In this training, we want to explore the tools available for parallel computation, alongside their use cases and their strength and weaknesses. We will start from the simplest approach of manually spawning processes, move on to tasks and Task.async_stream, and finally work with GenStage and Flow.

This tutorial is aimed for people that are familiar with Elixir syntax and with the "functional" and data-related part of Elixir (data types, modules, functions). Knowledge about processes is welcome, but we are prepared to introduce concurrency in Elixir in case the audience is not strong on the area.

About Andrea: Andrea is a programming enthusiast with a soft spot for functional programming and beautiful code. He loves learning new stuff. He strongly believes in accessible culture and education and in open-source software. He's active in the Elixir community and uses almost exclusively Elixir for work purposes.

About Eric: Eric Meadows-Jönsson is a member of the Elixir team and an active member of the Elixir community being the creator of many libraries, including Ecto and the Hex package manager. Eric works as a Software Engineer at Cabify.

Andy McCown

Andy McCown

Crash Course in Elixir, for (Ruby, Java, JS, etc) Developers

Are you interested in Elixir, but you haven't yet learned the language?

Are you an imperative language programmer who's finding it tricky to get a handle on the functional approach?

Do you find yourself wishing that Elixir had a "for loop"?

We've all been there, and we've developed a one-day workshop to get you past the learning curve. Starting with the absolute fundamentals of Elixir's datatypes, we'll take you through every aspect of the language that tripped us up when we were learning.

By the end of the day, you will be able to confidently solve complex business problems faster and more reliably than you'd have ever believed possible. Learning to build solutions on top of immutable data structures requires a new way of thinking, and we've designed our workshop to get you thinking that way quickly.

We will cover:

  • All the built-in datatypes: numbers, binaries (strings), lists, maps, structures, tuples, and atoms.
  • Functions: anonymous functions, named functions, and higher order functions.
  • Pattern matching: This is a hugely powerful technique, and is probably the one thing most developers miss when they find themselves coding in another language after experiencing it in Elixir.
  • Elixir tooling: How our projects are organized, the build system, the dependency management system, the test framework, and the rich documentation system.
  • How to model problems using functional patterns instead of Object Oriented patterns.

Our aim is to provide a mentally challenging, but enormously rewarding day. Every segment will include hands-on exercises and challenges, and we will have two instructors helping you if you get stuck.

Who should come? The course is not for complete beginners. You should be comfortable programming in some language, but what language is unimportant. People whose proficiency lies outside the functional paradigm will probably get the most out of the course, but functional programmers who are new to Elixir will find the course to be a useful survey of the main features of the Elixir ecosystem.

About Andy: Andy is life-long developer currently managing a development team at TBWA\Worldwide. He came across Elixir a couple years ago and since then it's absorbed much of his "play" time.

Instructor TBA

Intro To Nerves

In this day-long workshop, you'll be introduced to Nerves, the Elixir framework for embedded applications. You'll build and run your code on hardware provided by your trainers, developers with experience using Nerves in a real-world application. More info coming soon!



Antaramian david

David Antaramian

Bell chris

Chris Bell

Denkinger troy

Troy Denkinger

Denkinger lisa

Lisa Denkinger

Helen Hood

Helen Hood

Mccown andy

Andy McCown

Nussbaum lee

Lee Nussbaum

Price cameron

Cameron Price