# Weedmaps ElixirConf 2021 Recap

NOTE: Originally published back in December 2021 as the first post of the Weedmaps Engineering blog. Reposting here for completeness. I had several other pictures but couldn’t use them without the subject’s permission. I normally write in the first person but used third person here as I was writing on behalf of my employer, Weemdaps.

Weedmaps loves Elixir! We first adopted Elixir back in 2016 when it was still at version 1.3! We have several long-running Elixir apps in production. And we have had a presence and/or been a sponsor of several ElixirConfs. So we were excited to hear that ElixirConf 2021 would be a hybrid virtual and in-person event held in Austin, TX. We had several folks in attendance and others who could only make it virtually. Here are some highlights from the conference and thoughts about the state of the Elixir ecosystem.

It is worth noting that ElixirConf was announced back during those heady days of late Spring when COVID-19 was on the run, the days before the pernicious Delta variant invaded the U.S., prompting a new round of event cancellations. ElixirConf, however, soldiered on. Attendees were asked to complete a questionnaire asking if they had been vaccinated or had a recent negative Covid test. Flights and airports were requiring masks. But then Texas… well, Texas is Texas.

Sign on the door to ElixirConf 2021

The in-person portion of the conference took place in a small conference center tucked away behind a Walmart in a suburban shopping complex north of Austin. It was a much more humble affair than the Gaylord Rockies Resort, the venue in 2019. (2020 was virtual only.) A smaller conference, however, is also more intimate. Including speakers and staff, there were around 400 people at this event and the main ballroom was more gymnasium-size than air-hangar size.

It was a much easier task to interact with a good number of attendees. The “trade show” had the sponsor tables arranged in an arc with the breakfast/snack buffet down the middle. Good way to ensure hungry folks noticed the sponsors!

“But what about the meat?” You may ask, “What amazing new Elixir features and projects were revealed?” Alas, the keynotes from José Valim, Chris McCord, and the two Nerves maintainers - Justin Schneck and Frank Hunleth - did not contain any earth-shattering revelations sending plucky tech reporters scurrying to their Twitter feeds. There was still plenty of interesting information, however, so here is a recap of those talks.

## The Cloud Come to the Ground

Justin Schneck, co-creator of the Nerves project, kicked things off with the first keynote of the conference, a heady responsibility, and he was up to the task. He pulled the audience in with an analogy for the world of IoT: if the web was “the cloud,” then IoT is “the fog.” He explained that IoT is “the cloud come to the ground.” He went on to explain – after a super-cute interlude with a video of him and his adorable kids attempting to perform a science experiment (a cloud chamber; spoiler: the kids get bored and go play outside) – that the fog is a scary place. He talked about famous incidents of cosmic rays flipping bits and causing things like airliner crashes and incorrect vote counts.

This all ultimately led to a major announcement of sorts: his company, Very, will be releasing Perdido: “heterogenous management for modern hardware platforms.” This aims to be a “single source of truth for product software BOMs” and will offer out-of-the box support for Nerves, Embedded Linux, and RTOS support. If you are in the IoT space, this may qualify as an earth-shattering announcement. Of course the caveat is that this is just an announcement that Very is working on this. There was no release date mentioned. Still, it was a fascinating talk with plenty of humor/cute-appeal and a great way to kick off the first in-person Elixir conference in over 18 months.

## LiveView Continues to Grow

Phoenix creator Chris McCord gave the second keynote, which kicked off the second day of the conference. Alas, he was unable to attend in-person and there were some technical difficulties getting the stream going. This led to the in-person attendees missing a little of the talk. Ah, the joys of live streaming! The content of the talk was almost entirely about LiveView, not too surprising since that has been the killer app for Phoenix since it was announced at ElixirConf 2018. McCord gave a recap of the recent changes in LiveView 0.16 and Phoenix 1.6. These included the switch to esbuild, the addition of .heex (HTML-aware) templates, and the addition of two new generators: phx.gen.auth and phx.gen.notifier.

After this recap McCord revealed what’s coming up in version 0.17 of LiveView. This included “slots,” labeled parts of a LiveComponent that can have content passed into them. It will also add several new helper functions in a JS Elixir module. These include things like JS.add_class/remove_class, JS.show/hide, etc. Basically, this module will allow you to do things in Elixir that you might have previously used Alpine.js to accomplish.

McCord wrapped up by discussing all the other languages that have come up with their own versions of LiveView (LiveWire, StimulusReflex, etc.). He proposed calling these server-rendered, dynamic applications “Live Apps.” Time will tell whether both the Elixir and non-Elixir communities will follow along!

The second day was wrapped up with another keynote, this one given by the brilliant Brooklyn Zelenka, deliverer of brain-crushing presentations, and her hour-long talk did not disappoint. The gist is that we’ve been building web applications the same way since the 90s, “essentially LAMP style.” Zelenka argues that we need to start thinking about a new topology: local first (apps on phones), then the tower, the edge, and lastly the cloud. The BEAM is, of course, excellent for distributed computing, but she talked about distributed problems: there is no source of truth. How should we do coordination? OCAP for mutation, distributed data syncing, etc, etc. There is so much in this talk. You should probably just go watch it on YouTube… actually, you’ll probably need to watch it three times.

## More Developer “Quality of Life” Improvements for Elixir

The first day of the virtual portion of the conference was kicked off by the keynote from Elixir creator, José Valim. In much the same vein as Chris McCord’s talk, Valim gave a brief recap of some previous Elixir changes and then went into improvements coming in Elixir 1.13, which should be out soon. (An RC was announced while preparing this article.) He talked about “semantic recompilation,” which means better recognition by the compiler of what files actually need to be recompiled based on the semantics of the code and not just file mtime. This follows improvements in the last two versions to make the compiler smarter.

The core team is also adding support for “code fragments,”which was driven by the desire to have code completion in LiveBook. This will lead to struct and sigil autocompletion in iEX, a very cool feature to be sure. The code formatter is also getting smarter: it will soon be able to format files other than just .ex files through a plug-in system. Valim gave an example of a markdown formatter, something that will also come in handy for LiveBook (which saves it’s files as markdown with Elixir code blocks).

Basically, the theme of the Elixir language updates continues to be “developer quality of life” improvements: faster compilation, better code-completion, more powerful formatting. This has been the same mantra for the last two years since Valim announced at ElixirConf 2019 that the language was “feature complete.” This has to be one of the greatest traits of Elixir: far fewer painful deprecations and nightmare upgrades than other languages. It’s one of the reasons we love working with it!

The final day of the conference featured two more keynotes. Simon de Haan of Turn.io followed up his presentation at ElixirConf 2020 about “building the world’s first WhatsApp-based COVID-19 response for the South African Ministry of Health” with a more general reflection on what Elixir has done for his small team. This included a discussion of how bad releases led his team into the trap of “big bang deploys” with too many features going out at once. He explained how the underpinnings of Elixir and the BEAM mesh with the desire and need to keep a team small and agile. Hey, that’s another reason we love Elixir!

Then Frank Hunleth, the other co-author of the Nerves project, wrapped up the conference (other than goodbyes and the announcement that ElixirConf 2022 will be back at the Gaylord Rockies Resort outside Denver) with a “here’s where we’ve been and where we’re going” sort of talk as Valim and McCord had done. These things included adding Nerves MOTD (message of the day) support - including important firmware information - and moving beyond just C and C++ NIFs by having all official systems share the “target triplet” (ARCH, CPU, OS). This allowed the Zigler library (NIFs in the Zig language) to target Nerves successfully. Another cool improvement is the ability to pare down timezone info by using the zoneinfo library and removing dates that you just don’t care about.

## Nerves Bookends the Conference

Hunleth devoted quite a bit of time to demoing the Livebook support in Nerves. That’s right, your Nerves code flashed to your embedded device can run a Livebook server and allow users to play with the code interactively. His demo showed how he could set up a graph of sensor data in the Livebook and then heat the sensor to show the graph change in real time. Neat! This will be a powerful tool for learning your way around a chip and trying out different commands.

There was a bit more about future plans in Hunleth’s talk, but we’ve spent quite a bit of “ink” talking about these six keynotes when there were dozens of other presentations at the conference. This wouldn’t be much of a conference recap without some discussion of those!

## What Was Covered… and What Wasn’t

The first thing to acknowledge, however, is what wasn’t covered. Arguably, the two biggest developments in the Elixir world in the last year were Nx and Livebook, and no talks were dedicated to either library. Livebook at least received some solid screen time in Hunleth’s keynote, but we don’t recall Nx even being mentioned in a single talk, except in passing by Valim. If you are eager to speak at ElixirConf 2022, take note!

Another notable absence from the conference was Lumen, the Dockyard project that made a huge splash in a 2019 keynote and was also the subject of 2020 talk. The goal was to build a new Elixir/Erlang compiler targeting non-VM use-cases, in particular WebAssembly. This caused quite the stir a couple years ago, but now it seems to have stalled. The latest commit as of this writing was back in March. Hopefully it is just a lull, and there is a future for Elixir compiled to WASM!

So what was covered in this year’s talks? Many of the usual subjects: testing strategies (Mox, Factories, etc), database/Ecto tricks, production debugging, Elixir adoption, and of course LiveView. Everybody loves LiveView! About a dozen talks featured LiveView in some way. So perhaps that’s also something future speaker hopefuls can take into account.

## A Few Other Noteworthy Talks

Here are some talks that we found interesting. Adam Lancaster from Duffel delivered a humorous and snappy talk about pattern matching - clearly one of Elixir’s super-powers - and the problems that can arise when trying to change complex data structures that may be deeply matched against throughout your code. It was a heady journey into an attempt to improve the situation that was ultimately ditched in favor of some basic advice: try to keep your pattern matching internal to your abstract data types.

Another interesting talk was given by Jace Warren, who works for a video streaming company, about using the Riak Core distributed systems framework and Kubernetes to handle multi-node video transcoding and transmuxing. He delved into how they use Riak’s circular key space to track vnodes, erlang processes for data processing. He then pushed the envelope further by talking about how his team also uses Kubernetes and Helm charts for autoscaling and ordered, graceful deployments. Warren packed a ton of info and buzz words into his forty minutes, and yet was able to make it relatively easy to follow.

We could go on about other talks and the interesting information imparted, but we don’t want to keep you here all night/day. The last talk we found fascinating was Dave Lucia’s rundown on Surface, the cool new component library built on top of LiveView. This basically brings the power of a frontend library like React into Elixir, allowing for component reuse, template DSLs, declarative props and data, compile-time HTML validation, a Storybook-like component catalog, and more. For Elixir web-developers this could be the most exciting development ever. Hopefully it will usher in an era of massive web code reuse for Elixir/Phoenix through component sharing communities. This author left the talk excited to try a small test project with the library!

We hope this post, the first for our new Weedmaps tech blog, gives you a solid summary of the important news and interesting topics to come out of this year’s ElixirConf. Hopefully next year’s conference - back at the now not-so-brand-new Gaylord Rockies Resort in Aurora, CO - will be even bigger and better, back to a full in-person complement as well as keeping the virtual live-stream option for those who can’t attend. If you make it to the conference, be sure to stop by the Weedmaps table and say hello.