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 Shining 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
The first talk of the day was “How LiveView Handles File Uploads” presented by Gary Rennie. Gary went into depth about the status of file uploads with LiveView. The bottom line is that file uploads with LiveView are almost on par 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. She said she was totally okay with this, as she bitterly took a sip of water. It 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 attended was Jon Greiman’s talk on CQRS, which stands for Command, Query, Response, Segregation. The best definition he provided 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 the 5 am fire-drill.
Platinum Messages by Pleroma and Erlang Solutions
The pre-keynote “Platinum Messages” by Pleroma and Erlang Solutions was next. According to the Pleroma website, it’s “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 found it most interesting that Pleroma has a notion of themes, which is something to research further.
José Valim Keynote
José Valim’s 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 it’s time to build things!
The last day I was energized and took notes.
Justin Schneck Keynote
Justin Schneck’s keynote was on the state of the Nerves project, including an impressive demo of the game Snake across multiple screens, with live code updated across all devices.
(UN)Learning Elixir
The next talk I attended was Randall Thomas’s “(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 talk were how to learn:
- Study it
- Teach it
- What didn’t you know?
- Fill in the gaps
Furthermore, “Learn how you learn.” However, don’t forget, learn the basics, learn Elixir. He recommends “Programming Elixir” by Dave Thomas. His other book recommendations include:
- Thinking, Fast and Slow
- Functional Programming For The Rest of Us
- Programming Elixir
- Designing Elixir Systems with OTP
Photogenic: Building a Photo Booth with Beginners Using Nerves, LiveView, and Scenic
Bruce Tate, co-author of many books in the Elixir community, presented “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 the (UN)Learning Elixir talk right before, in the same room. The highlight for me was hearing Dave Thomas ask a question. Yes, I am that much of a fanboy. Links from his talk:
Crawling the Web with Elixir
Adam Mokan’s talk “Crawling the Web with Elixir” covered:
Nightmare.jsPuppeteer.js (for Headless crawling)- Floki for parsing
- Use GenServer
- Redis for the job queue
Kubernetes at Small Scale
The next talk I enjoyed was titled “Kubernetes at Small Scale” by Phil Toland. Phil works at a small company called Hippware that is currently building a location messaging mobile app called TinyRobot. His talk focused on building a robust, scalable platform. Highlights of using Kubernetes include:
- VMs in clusters improve resource efficiency
- Scalability
- Ease of maintenance
- Worker VMs are easier to manage than standard VMs
World’s Shortest Kubernetes Tutorial
- Pod: One container per pod. Think of them as a tiny server.
- Deployment
- Service: Exposes pods to the outside world.
- ConfigMap: Key-values to decouple artifacts from image content to keep containers portable.
Lessons Learned
- Outsource as much as possible; use something like AWS or GCP.
- Automate everything! Use Terraform.
- Pods are ephemeral!
- Automatic Clustering: Use Swarm or Peerage.
- Deployment: Use Shopify Kubernetes Deploy to point to YAML manifests and deploy.
- One instance per node.
- It’s worth the effort.
ETS Versus ElasticSearch for Queryable Caching
In David Schainker’s talk from Adobe, “ETS Versus ElasticSearch for Queryable Caching,” he discussed the pros and cons of ElasticSearch versus Erlang Term Storage (ETS). ETS is a key-value table containing tuples. It’s built on top of OTP and has no garbage collection, making data concurrently accessible. David also introduced a tool called ETSO, which enables using Ecto schemas with ETS tables and handles ETS table supervision.
For full-text search, he reviewed:
- elib1: The late Joe Armstrong library
- Lucene: Built in Java
- RediSearch
- Riak
Choosing one depends on your team and needs.
UI Testing is Ruff; Hound Can Help
Vanessa Lee’s talk, “UI Testing is Ruff; Hound Can Help,” introduced Hound, an Elixir library for writing integration tests. Hound offers Helper functions for Navigation, Page, Element, JS execution, and screenshots.
Hound is fast—sometimes too fast. To mitigate this, Hound includes Matchers helpers such as element?
, visible_in_page?
, and visible_in_element?
. Other helpful helpers include:
Vanessa’s talk progressed into property-based testing, using generators and StreamData. She described property-based testing as:
- Describing your system through its most basic properties and testing them
- Fuzzing: Throwing massive quantities of random data at tests
- Finding problems in the system design through failures
She recommended the book Property-Based Testing with Proper Erlang and Elixir by Fred Hebert.
EEF - Miriam Pena & Desmond Bowe
Miriam Pena and Desmond Bowe presented on the Erlang Ecosystem Foundation (EEF). Miriam Pena is a board member and organizer of the San Francisco Elixir Meetup. Desmond Bowe co-hosts the ElixirTalk podcast and organizes the EMPEX conference.
Key EEF updates:
- The website erlef.org has migrated from WordPress to Phoenix.
- They now offer a grant proposal process.
Ways to get involved:
- Find a working group
- Request a grant
- Become a member
- Ask your company to be a sponsor
Chris McCord Keynote
Chris McCord’s keynote focused on LiveView. Chris announced the Phoenix Phrenzy competition, encouraging developers to submit entries to improve LiveView.
Key LiveView v0.1.0 goals:
- LiveEEx
- LiveViewTest
- Live navigation
- Prepend/append updates
- JavaScript hooks:
phx-hook
JavaScript integration - File uploads: Only a few lines of code
- IE11 support
phx-update
options:
replace
(default)append
prepend
ignore
Chris also introduced:
pushEvent()
live_redirect/live_link
(push state, updates the browser URL)link/handle_params
The standout feature was updating the DOM with only the data needed, rather than reloading all items. This feature was released during the conference and caused some disruption during the LiveView training sessions.
Final Thoughts
Chris McCord closed the keynote with a bold claim:
- Better load times than the best-written SPA.
- “Elixir, it feels like cheating.” — Jim Freeze
- Even Chris himself is amazed by what LiveView can achieve.
And with that, the event concluded, leaving attendees inspired and excited for what’s next in the Elixir ecosystem.