ElixirConf 2019 Recap

ElixirConf 2019 Recap

Event Overview

ElixirConf advances the elixir programming language and the communities and companies surrounding it by bringing together the technically minded to establish relationships for work, collaboration, and entrepreneurship. We learned from over 40 speakers, trainers, and keynotes on how top companies and developers are taking advantage of Elixir’s ability to build resilient distributed systems, secure embedded systems, and modern real-time UI with Phoenix LiveView. There were 111 attendees at the conference, according to the Whova app. The crowd was diverse and welcoming with passionate developers from all over North America and the world.

The Gaylord Rockies

The first impression of the Gaylord Rockies resort was The Shinning meets convention center. It’s right next to the airport, so getting there was easy. The long hallway that connects the main lodge to the convention center offered a distant view of the Denver skyline with a Colorado Rockies backdrop. Wednesday night there was a power outage from about 5:30 pm. I took that time to go into Denver and check out 16th street. 16th street is Denver’s pearl necklace, a gentrified street with local boutiques next to Taco Bell expresses. I got back to the resort around midnight; the power was still out. The power came back on around 2 am. Then there was a fire alarm at 5 am for one hour. The rest of my stay was pretty uneventful. I am not used to the Colorado climate, so I took it easy.

Build Performant, Real-Time UIs with Phoenix LiveView

The first day of training, I took the Phoenix LiveView course. It was a little fast-paced for some, but in the end, we got the source code. Later in the conference, there were plenty more talks and keynotes that solidified the LiveView concepts. One of the most notable things added to LiveView is JavaScript interop through hooks and the ability to only load what is needed when sending more data over the wire.

Elixir in the Jungle

The second day of training was the highly anticipated by me, “Elixir in the Jungle.” It started with building a “Rube Goldberg machine” (think The Goonies opening scene) out of stuff like cardboard, twine and pipe cleaners. We all got the analogy of how AWS is complicated and is a house of cards.

The Talks

The next two days were talks. The first day of talks got off to a rough start due to the power outage and fire alarm, and I missed the morning keynote and the first quarter talks.

How LiveView Handles File Uploads

So the first talk of the day was “How LiveView Handles File Uploads” presented by Gary Rennie. Gary went into dept of the status of file uploads with LiveView. The bottom line is that file uploads with LiveView are almost in parody with JavaScript options. You can watch the video here. The source code from his talk is on a branch of the LiveView Github repo, here

Beyond LiveView: Building Real-Time Features with Phoenix LiveView, PubSub and Presence

The next talk I went to was Sophie DeBenedetto’s “Beyond LiveView: Building Real-Time Features with Phoenix LiveView, PubSub and Presence.” It was a tough call choosing between Sophie’s talk and GraphQL Based Microservices, it’s such a great thing to have all the talks available on youTube the next day. Sophie’s talk was a great refresher from the Phoenix LiveView course on the first day of training. Her talk goes over her implementation of live updates using presence and channels, all to find out the day of the conference that what she gallantly did with presence and channels, can now be done with Hooks with much fewer lines of code. Which she says she was totally ok, as she bitterly took a sip of water. Reminded me of the adage that when using bleeding-edge technology, it is the developer that bleeds.

Elixir + CQRS - Architecting for Availability, Operability, and Maintainability At PagerDuty

The next talk I went to was Jon Greiman’s talk on CQRS, which stands for Command, Query, Response, Segregation. The best definition he says is by Martin Fowler: “At its heart is the notion that you can use a different model to update information than the model you use to read information.” Alternatively, as he puts it: “Separate code that changes state from code that evaluates state.” I took a power nap and missed the 3:15 pm to 3:55 pm talks and most of Andrea Leopardi’s “Mint - Disrupting HTTP Clients” talk because you know, sleep deprivation from 5 am fire-drill.

Platinum Messages by Pleroma and Erlang Solutions

The pre keynote “Platform Message” by Pleroma and Erlang solutions was next. According to Pleroma website, its “a free, federated social networking server built on open protocols. It is compatible with GNU Social, Mastodon, and many other ActivityPub and OStatus implementations.” Pleroma looks like a great option to look into for a federated social network. I find most interesting that Pleroma has a notion of themes and something to research further.

José Valim Keynote

Jose’ Valim keynote was most importantly, reassuring in that Elixir has no definitive timeline for 2.0, and there are no new features to be added. The goals of Elixir have been met and now its time to build things! The last day I was energized and took notes.

Justin Schneck Keynote

Justin Schneck keynote was on the state of the Nerves project, and an impressive demo of the game snake across multiple screens, live code updated across all devices.

(UN)Learning Elixir

The next talk I went to was Randall Thomas “(UN) Learning Elixir.” I was pretty excited about this one once I connected that Randall was the person who led an interesting discussion during the Elixir in the Jungle training break. Key takeaways from his (Un)Learn Elixir talk were how to learn:

Photogenic: Building a Photo Booth with Beginners Using Nerves, LiveView and Scenic

Bruce Tate, co-author of many books in the Elixir community, the talk was titled “Photogenic: Building a Photo Booth with Beginners Using Nerves, LiveView and Scenic,” It was more about learning by breaking problems down into functions. It was a good follow-up to (Un)Learn Elixir talk right before, in the same room. The highlight for me was hearing Dave Thomas asking a question. Yes, I am that much of a fanboy. Links from his talk: https://exercism.io/tracks/elixir http://elixirbridge.org/

Crawling The Web With Elixir

Next talk was “Crawling the Web with Elixir” by Adam Mokan. Bullet points were:
  • ~Nightmere.js~ puppeteer.js (for Headless crawling)
  • Floki for parsing
  • Use Genserver
  • Redis for job queue

Kubernetes at Small Scale

The next talk I enjoyed quite a bit, it was titled “Kubernetes at Small Scale” by Phil Toland. Phil does the thing he does at a small company called Hippware that is currently working on a location messaging mobile app called TinyRobot. Being a messaging app; building a robust, scalable platform is a must. His talk is about his journey doing just that. His distro journey stared with Rancher OS and Tectonic (until it got bought by Redhat). He settled on using Amazon EKS. Alternatively, if using Google Cloud Platform, you could use GKE. Highlights of using Kubernetes:
  • VMs in cluster improve resource efficiency
  • Scalability
  • Ease of maintenance
  • Worker VMs are easier to manage than VMs

World shortest Kubernetes tutorial


  • Pod: One container per pod. Think of them as a tiny server
  • Deployment:
  • Service: Exposes pods to the outside world
  • Config Map: key-values to decouples artifacts from image content to keep containers portable

Lessons Learned


  • Outsource as much as possible; Use something like AWS, GCP
  • Automate all the things! Use Terraform
  • Pods are ephemeral!
  • Automatic Clustering: Use Swarm, Peerage
  • Deploying: Use Shopify Kubernetes Deploy, point to YAML manifests and deploy
  • One instance per node
  • It’s worth the work

ETS Versus ElasticSearch for Queryable Caching

In David Schainker from Adobe talk “David Schainker “ETS Versus ElasticSearch for Queryable Caching.” He goes over the pros and cons of Elastic search vs. Elang Term Storage (ETS). ETS is a key-value table containing tuples. ETS is built on top of OTP and has no garbage collection. Data is concurrently accessible. David also went over a tool called ETSO, which enables using Ecto schemas with ETS tables and handles ETS table supervision. Full-text search is the “gorilla in the room”. In his search, he checked elib1, the late Joe Armstrong library that uses what he calls an inverted tree, Lucence which is built in Java, RediSearch or Riak. Choosing one depends on your team.

UI Testing is Ruff; Hound Can Help

Finally made it to the last talk of the day, Vanessa Lee’s “UI Testing is Ruff, Hound Can Help”. Hound is an Elixir library for writing integration tests. Hound offers Helper functions of which Vanessa uses Navigation, Page, Element, JS execution, and screenshot. Hound is fast, sometimes too fast. To remedy, Hound has the Matchers helpers element? , visible_in_page? and visible_in_element? . Other helpful helpers: Ahh, Finally to the final day Platnim Message and Keynote.

EEF - Miriam Pena & Desmond Bowe

First up was Miriam Pena & Desmond Bowe. Miriam Pena is a board member and founder of the Erlang Ecosystem Foundation (EEF) and organizer of the Elixir meetup in San Francisco. Desmond Bowe is also a founding member of the EFF, is cohost of one of my favorite Elixir podcast, ElixirTalk and also hosts another great Elixir Conference, EMPEX. The EFF website, erlef.org/, has been moved from WordPress to Phoenix (I would love to pick their brains on this). The EFF now has a grant proposal process . Other ways to get involved are:
  • find a working group
  • request a grant
  • become a member
  • ask your company to be a sponsor

Chris McCord Keynote

Finally made it to the final talk, Chris McCord’s keynote. If you have read this far, you know who Chris McCord is. Guess what Chris’s keynote was on? No, not his dog, it was on LiveView. Chris’s first announcement was his excitement for Phoenix Phrenzy. With each new entry into Phoenix Phrenzy, Chris receives even more superpowers to put into Phoenix, so keep those entries coming! Deadline for entries is September 30th. So glad I took notes, because I jotted down this gem: https://live-view-collection.herokuapp.com/. Your welcome.

Goals for LiveView v0.1.0

  • LiveEEx
  • LiveViewTest
  • Live navigation
  • prepend/ append updates
  • javascript hooks: phx-hook javascript integration
  • File uploads (soon): its going to be like five lines of code
  • IE11 Support

phx-update

  • replace(default)
  • append
  • prepend
  • ignore
  • pushEvent()
  • live_redirect/live_link (push state, that updates the url in browser bar)
  • link/handle_params
The key feature added to LiveView is updating the dom with just one data item instead of all of them from the server. Single item updating was released the day of the conference and was a causation of havoc of LiveView training classes and talk.

Bold Claim by Chris McCord…

  • better load times than the best-written SPA
  • “Elixir, It feels like cheating.” — Jim Freeze
  • Blows his mind, even though he developed it