The ElixirTalk Podcast
Taking questions from around the Elixir community about application design principles and the state of the ecosystem. Ask us a question!
Episode 153 feat. Dave Lucia- The Dream Stack with Rust & Elixir
Episode 153 – The Dream stack with Rust & Elixir feat. Dave Lucia
We kick things off by hearing about the newly launched Elixir Training :tada: which y’all should check out if you’re looking to learn the language, or have friends who might. In todays episode we’re joined by Dave Lucia, VP of Engineering at SimpleBet where we hear about the use of the “Dream Stack” (you heard it here first folks!), which is Elixir using Rust NIFs for performance reasons (in their case calculating real-time betting odds). We spend a lot of time in the episode digging into what NIFs are, why Rust is a good fit for writing Elixir NIFs and what the pitfalls are. We get real technical with dirty schedulers, resource arcs in Rust, and all of the reasons for why you should and probably should not use NIFs unless you really need it. Also in an Elixir Talk first Dave turns around and asks us a question at the end. And in maybe a podcast first we place an on-air bet on who can donate the most to the Erlang Ecosystem Foundation. Links
- Elixir Training North American Tour 2019 – https://elixirtraining.io
- Elixir Conf – https://elixirconf.com
- SimpleBet – https://simplebet.io
- The Outline – https://theoutline.com
- Two Years of Elixir at The Outline – https://blog.usejournal.com/two-years-of-elixir-at-the-outline-ad671a56c9ce
- ConCache – https://github.com/sasa1977/con_cache
- IO Lists and Phoenix - https://www.bignerdranch.com/blog/elixir-and-io-lists-part-2-io-lists-in-phoenix/
- Using Rust to Scale Elixir at Discord – https://blog.discordapp.com/using-rust-to-scale-elixir-for-11-million-concurrent-users-c6f19fc029d3
- Rustler – https://github.com/rusterlium/rustler
- Rust ResourceArcs in Rustler – https://docs.rs/rustler/0.15.1/rustler/resource/struct.ResourceArc.html
- Erlang Dirty Scheduler Overhead – https://medium.com/@jlouis666/erlang-dirty-scheduler-overhead-6e1219dcc7
- Erlef – https://erlef.org
- Dave’s talk at CodeBeam SF 2019 – https://www.youtube.com/watch?v=wvfhrvAFOoQ
- Dave on Twitter – https://twitter.com/davydog187
- Dave on Github – https://github.com/davydog187
Episode 152 - Hire an Elixir Developer! and Chris's Ecto Adventures
Episode 152 - The joys of Ecto
This week it’s a Chris & Desmond episode! We kick things off by hearing all about Desmond’s latest project – Hire an Elixir Developer – a job board to help companies attract Elixir talent that’s launching soon. We dig into how Desmond has been writing his latest project, hear a bit about how he’s using LiveView and how he’s chasing boring technology to get this project done (Phoenix & Elixir). Chris has also been writing lots of code this week (and has kept Elixirin’) – he talks a bit about how Elixir has mostly just been getting out of his way. We then dig into one of our favorite subjects … Ecto! We describe the joy of named binds, how we split up Ecto queries, and think about composing queries. We then go onto talk about lateral joins and the limits of Ecto preloads.
- Hire an Elixir Developer – https://www.hireanelixirdeveloper.com/
- Absinthe GraphQL – http://absinthe-graphql.org
- Ecto Named Binds – https://hexdocs.pm/ecto/Ecto.Query.html#module-named-bindings
- Ecto Preloads – https://hexdocs.pm/ecto/Ecto.Query.html?#preload/3
- Ecto update with an atomic increment – https://hexdocs.pm/ecto/Ecto.Query.html#update/3
- Ecto lateral joins – https://hexdocs.pm/ecto/Ecto.Query.html#join/5-joining-with-fragments
- Dataloader – https://hexdocs.pm/dataloader/Dataloader.html
- Lateral joins in Ecto – https://github.com/elixir-ecto/ecto/issues/1425
- Relay Connections – https://facebook.github.io/relay/graphql/connections.htm
- Absinthe Relay – https://github.com/absinthe-graphql/absinthe_relay
- Batch loading in Absinthe Relay while support first N – https://elixirforum.com/t/how-to-batch-load-with-absinthe-relay-while-supporting-first-x-and-after-cursor/14918
- CSS Grids – https://gridbyexample.com/examples/
- Brutalist Web Design – https://brutalist-web.design/
- ElixirConf – https://elixirconf.com/2019
Episode 151 feat. Dave Thomas and Brian Mitchell - The Future of Elixir
Episode 151 – Dave Thomas & Brian Mitchell
In this special episode of ElixirTalk we are joined by Dave Thomas and Brian Mitchell where we continue a discussion that we had at EMPEX NYC this year as a fishbowl style format. If you haven’t yet seen the talk, you can do so here: https://youtu.be/pcbNT1iKebc –– probably best if you watch before listening, but you can also listen to this as a standalone episode. This episode is long, but is packed with some great tidbits about Elixir and Erlang and we go into considerable depth about how applications work today as well as outlining a vision for the future.
Key moments in the episode
- Dave lays out some of the key tenants of his argument about augmenting OTP to work better for a world that we’re in today
- Brian describes what OTP is and gives his thoughts on Dave’s initial thesis, questioning some of the static nature that Dave argues about OTP
- Dave lays out that what we’re doing in Elixir and Phoenix land is the OTP way (for better or for worse) and questions whether this is the best way to do things?
- We talk at length about configuration and how things work today in Elixir / Erlang. Brian does a great job of explaining the different tenants of configuration in OTP that exist and we dig into what a dynamic model might look like.
- We then talk about supervisors as they work in OTP and describe the concept of dynamic lifecycle management and a future vision of supervision that goes beyond just processes and extends into system observability.
- We discuss challenging conceived wisdom and why that helps move communities forward, looking at the interesting case of how Elixir inherits decisions from the Erlang community and how we might revisit some of those assumptions.
Links for this show
- Dave and Brian’s discussion at EMPEX NYC: https://youtu.be/pcbNT1iKebc
- Dave Thomas on Twitter: https://twitter.com/pragdave
- Brian Mitchell on Twitter: https://twitter.com/strmpnk
- Partisan: https://github.com/lasp-lang/partisan
- Chris Meiklejohn’s talk on Partisan: https://www.youtube.com/watch?v=KrwhOkiifQ8
- ERLEF: https://erlef.org
Episode 150 feat. Juan Facorro - Clojerl!
Episode 150 - Clojerl with Juan Facorro
This week on the show we’re joined by Juan Facorro, an avid Erlang-er and creator of Clojerl, a Clojure port written in Erlang.
We give you an update about Elixir Training, and tell you a bit more about a potential bar / meetup we at EMPEX will be hosting during ElixirConf this year in Denver (if we can find a bar).
We then get Juan to give us a run through of Clojerl, diving into the project, his motivations for creating it and going in-depth to some of the challenges Juan had along the way. We understand why you’d even want Clojure on the BEAM in the first place and where the Erlang concurrency model is advantageous here.
- Implementing Clojure on a new VM, clojureD: https://www.youtube.com/watch?v=NkHdMbI_08I
- Clojure on the BEAM: https://www.youtube.com/watch?v=Ow8o9Mm_N7M
Episode 149 - It's just Chris and Desmond. And Elixir Training!
This week we don’t have a guest, so it’s just Chris & Desmond. We kick things off discussing our opening music and how weird it is listening to yourself on a podcast.
Desmond tells us about his exploration into webflow and his love (hate) for CSS. We dig into bits in the language that still trip us up, even now with our experience in the language. We dig into some Ecto: query syntax that trips us up, materialized views, application logic vs database logic and lots of other database goodies.
Desmond tells us how Phoenix contexts trip him up and we go into some depth about how both of us structure contexts and code in our Phoenix applications.
We tell you about ElixirTraining, which is our new venture to help teach more engineers the beauty of Elixir, as well as engineering leaders about why Elixir is a great fit for your organization.
Oh, and sorry we said we’d answer some community questions and then never did.
- Webflow: https://webflow.io
- Database tables explained: https://twitter.com/joygao/status/1141125981748383745?s=20
- Materialized views in Ecto: https://medium.com/@kaisersly/materialized-views-in-ecto-8887bc89efa5
- Ecto Postgres: https://github.com/bryanjos/geo_postgis
- Rules for Phoenix contexts: http://devonestes.herokuapp.com/a-proposal-for-context-rules
- Phoenix contexts in context: https://michal.muskala.eu/2017/05/16/putting-contexts-in-context.html
- Andrew Hao’s talk on contexts: https://www.youtube.com/watch?v=l3VgbSgo71E
Episode 148 feat. Maxim Fedorov - Erlang at Scale in WhatsApp
Elixir Talk 148 - Feat Maxim Federov
Desmond gives us an update on his truck and the work he’s been doing there. Chris tells us about how he’s been getting back into coding and how he’s been writing Absinthe and GraphQL.
We announce a special new announcement: the launch of Elixir Training, our new business where we’re going out and looking to train more folks on Elixir across the US.
We also have a special guest on the show this week: Maxim Federov a Software Engineer at WhatsApp. We dive into some of the joys of using Erlang at bonkers scale (~1.5 billion+ users), using 10k servers and attempt to ask some moderately interesting questions, that Maxim answers like a champ.
- Maxim’s talk about the architecture of WhatsApp: https://codesync.global/media/maxim-fedorov-scaling-erlang-cluster-to-10-000-nodes/
- Live upgrade talk: https://codesync.global/media/the-art-live-upgrade-richard-carlsson/
- Hot upgrades in Elixir: https://medium.com/blackode/how-to-perform-hot-code-swapping-in-elixir-afc824860012\
- Mnesia at WhatsApp: http://highscalability.com/blog/2014/3/31/how-whatsapp-grew-to-nearly-500-million-users-11000-cores-an.html
- erlperf: https://github.com/max-au/erlperf
Episode 147 - Elixir 1.9, Chris's new job, Desmond's new truck, and ElixirTalk Trainings!
Episode 146 feat. Ben Marx - Adopting Elixir, Distributed Elixir, and more!
Episode 145 feat Fred Hebert - Erlang in Infrastructure, Property-Based Testing, and more!
- Fred Hebert: https://twitter.com/mononcqc
- The Zen of Erlang: https://ferd.ca/the-zen-of-erlang.html
- Erlang Ecosystem Foundation: https://erlef.org
- Property-Based Testing Blog Post: https://ferd.ca/property-based-testing-with-proper-erlang-and-elixir.html
- Property-Based Testing Book: https://pragprog.com/book/fhproper/property-based-testing-with-proper-erlang-and-elixir
- Operable Software: https://ferd.ca/operable-software.html
- EMPEX NYC: https://empex.co/nyc
Episode 144 feat. Martin Sumner - Riak and Erlang at the NHS
- Martin Sumner: https://twitter.com/masleeds
- Riak: https://github.com/basho/riak
- Spine: https://digital.nhs.uk/services/spine
- Bet365 buys Basho assets: https://www.theregister.co.uk/2017/08/25/bet365_to_buy_basho_release_code/
- Martin’s talk on Anti-Entropy: https://www.youtube.com/watch?v=TCiHqF_XTmE
Episode 143 - Community Questions + GraphQL
- Joe Armstrong: https://twitter.com/FrancescoC/status/1119596234166218754
- Joe’s Thesis: http://erlang.org/download/armstrong_thesis_2003.pdf
- Erlang the Movie (OMG!): https://www.youtube.com/watch?v=uKfKtXYLG78
- Erlang the Musical (really?): https://www.youtube.com/watch?v=upiNIQOS4WE
- EMPEX: https://empex.co/nyc
- Contexts, pt 1: https://michal.muskala.eu/2017/05/16/putting-contexts-in-context.html
- Our episode about app design: https://soundcloud.com/elixirtalk/episode-122-event-driven-architecture-microservices-and-evolving-application-architecture
- Eli’s Talk on Building Event Buses: https://www.youtube.com/watch?v=ffhCUKI2_ho
- Off the Shelf Event Bus: https://github.com/otobus/event_bus
- Example GenEvent: https://github.com/elixir-lang/gen_stage/blob/master/examples/gen_event.exs
- Absinthe: https://github.com/absinthe-graphql/absinthe
- Apollo: https://www.apollographql.com/docs/react/
- A deep dive into GraphQL: https://schneider.dev/blog/elixir-phoenix-absinthe-graphql-react-apollo-absurdly-deep-dive/
Episode 142 feat. Sophie DeBenedetto - Elixir at the Flatiron School, Learning Functional Languages
- Sophie DeBenedetto: @sm_debenedetto
- ElixirSchool: https://elixirschool.com/en/
- The Flatiron School: https://flatironschool.com/
- Great Code Adventure: http://thegreatcodeadventure.com/
- Troy’s Cocktails Podcast: https://www.briefs.fm/cocktailing
- Erlang Ecosystem Foundation: https://erlef.org/
- EMPEX NYC: https://empex.co/nyc
Episode 141 - More LiveView Stuff and Desmond Wants to Work With You
Episode 140 feat. Chris McCord - Phoenix LiveView!
- LiveView Repo: https://github.com/phoenixframework/phoenix_live_view
- LiveView Examples: https://github.com/chrismccord/phoenix_live_view_example
Episode 139 feat. Zach Smith - EMPEX LA, ErlEF, Macros, and Functors, oh my!
- Zach Smith (https://blog.zdsmith.com/index.html)
- Erlang Ecosystem Foundation (https://erlef.org)
- EMPEX YouTube Channel (https://youtube.com/empexconference)
- Brooklyn Zelenka’s EMPEX talk (https://www.youtube.com/watch?v=DZEs8_QiC8Q&list=PLyO-58-sOapw81dCfjDrX5TuYxS5S8qMq)
- Witchcraft (https://github.com/expede/witchcraft)
- Bryan Weber/Code Generation in Elixir (https://www.youtube.com/watch?v=-mgwW3RVI50&index=2&list=PLyO-58-sOapw984fSPNyzCyX7SADFn0w0)
- EMPEX NYC (http://empex.co/nyc)
- Zach’s blog post (https://blog.zdsmith.com/posts/sketches-of-elixir.html)
- Cameron Price discussing Leex and Yecc (https://cameronp.svbtle.com/how-to-use-leex-and-yecc)
Episode 138 - EMPEX LA recap, Training Newbies, and Why You Shouldn't Store State in GenServers
Episode 137 feat. Devon Estes - Benchee, Assertions, and Opera, who knew?
Episode 136 - Our Github Flows, New Years Code Goals, and Realtime Thoughts
SHOW NOTES come to EMPEX LA! http://empex.co
Episode 135 feat. Chris Hildebrand - Migrating an Elixir App Off Kubernetes
- you can find Chris online at https://chrishildebrand.net/ and under the handle @ckhrysze
Episode 134 - Flow, Serving Static Sites with Phoenix, EMPEX LA!
Episode 133 - Keyword Lists vs Maps, Boolean Operators, the Match keyword
Episode 132 - Hello! and Macros. Lots of macros.
SHOW NOTES • https://empex.co/la • https://elixirschool.com/en/lessons/advanced/metaprogramming/ • https://hackernoon.com/understanding-elixir-macros-3464e141434c • https://pragprog.com/book/cmelixir/metaprogramming-elixir
also Desmond is on the Elixir slack as @desmond, not desmondmonster.
Episode 131 - The Big Elixir preview and EMPEX LA
Episode 130 - Desmond's (lost) Mustache, Ecto3, Database Views & Windows
SHOW NOTES One year of ElixirTalk! Thanks everyone for listening!
Episode 129 - Param Validation, Libcluster, and Elixir After 3 Years
Episode 128 - Phoenix LiveView, the Next Five Years of Elixir
SHOW NOTES • https://elixirconf.com • https://www.youtube.com/watch?v=Z2DU0qLfPIY&feature=youtu.be • https://github.com/phoenixframework/phoenix/blob/master/CHANGELOG.md • https://kinsta.com/learn/what-is-http2/ • https://www.youtube.com/watch?v=suOzNeMJXl0 • https://www.youtube.com/watch?v=1QNxLNMq3Uw
Episode 127 - Scaling Desmond's App, Kubernetes, Property-Based Testing, and more!
Episode 127 - Scaling Desmond’s App, Kubernetes, Property-Based Testing, and more! by Elixir Talk
Episode 126 - Distillery 2, ElixirConf, and Your Communities
Episode 125 - Open Source Contributions, Phoenix Bugs, and GraphQL
Episode 124 - Application monitoring, instrumentation, and error reporting.
We discuss application monitoring, instrumentation, and error reporting.
SHOW NOTES • https://github.com/ferd/vmstats • https://timber.io • https://sentry.io/ • https://www.datadoghq.com/ • https://hackernoon.com/a-tour-of-elixir-performance-monitoring-tools-aac2df726e8c • https://github.com/lexmag/statix • https://github.com/ferd/recon • https://appsignal.com/elixir • https://scoutapp.com/elixir-monitoring • http://elastic.co/ • https://aws.amazon.com/elasticsearch-service/ • https://www.elastic.co/products/kibana • https://github.com/pinterest/elixometer • https://github.com/Feuerlabs/exometer • https://pulse.crevalle.io
Episode 123 - Ecto!
Ecto, Ecto, and more Ecto! We discuss the different ways we use this versatile tool for much more than just database queries.
SHOW NOTES • medium.com/frame-io-engineerin…-sagas-583d1cd2b149 • github.com/Nebo15/sage • github.com/elixir-ecto/ecto • blog.drewolson.org/composable-queries-ecto/ • www.youtube.com/watch?v=fFqsMWmONN4
Episode 122 - Event-Driven Architecture, Microservices, and evolving Application Architecture
How does Chris use an Event Bus in his app? Is it cool or is it lame? Also, how does your app grow, and what are the design rules you use to respond to that?
SHOW NOTES no notes this time!
Episode 121 - Editors & Workflow, Module Design, Imports & Aliases, and Function Typing
What editors do we use when writing Elixir? What’s our testing workflow? We also discuss why and when we use imports and aliases in our modules, and the pros and cons of typing our function calls. And Desmond has a new job!
show notes https://www.versussystems.com/ https://twitter.com/_asummers/status/1011716230598807552 https://github.com/JakeBecker/elixir-ls http://www.alchemist-elixir.org/ https://github.com/JakeBecker/vscode-elixir-ls https://github.com/elixir-editors/vim-elixir
Episode 120 feat. Mat Trudel - Timers in the VM, SchedEx, and Factory Automation
We chat with EMPEX NYC 2018 speaker Mat Trudel to discuss his SchedEx library, timers in the Erlang VM, factory automation, and more!
Episode 119 - Using Plug to Chain Functions, Decorators, and Sage
A follow up to a previous episode about consolidating code, we discuss the option of using Plug to handle chained event logic. Plus the benefits of decorators and the Sage library for transactions.
Episode 118 feat. Paul @bitwalker Schoenfelder - Deployment, Configuration, and more!
Our chat with the famous Paul Schoenfelder aka bitwalker, creator of Distillery, Swarm, and more! We discuss deployment strategies, the integration of Distillery into Mix, how the configuration discussion affects advances in deployment, and more.
Episode 117 feat. Andrew Summers - Dialyzer and its new Pretty Printer
Episode 116 - Injecting GenServer state, the Freedom Formatter, and Behaviours
We discuss injecting state into a new GenServer, Pete Gamache’s Freedom Code Formatter, and a question about whether using a Behaviour is invoking the pains of OOP inheritance.
SHOW NOTES https://github.com/gamache/freedom_formatter
Episode 115 - Our EMPEX Recap and Open Source Initiatives!
Our EMPEX Recap! We discuss our favorite talks, an Open Source proposal, and Dave Thomas’ controversial opinions about higher-level abstractions in Elixir.
Episode 114 - Training up Teams on Elixir
What are strategies for onboarding a team in Elixir?
Episode 113 - Typespecs, Tests, Hot Code Upgrades, and EMPEX!
Episode 112 - Caching and Process in Production, Elixir Segment Libraries, Ready Player One review!
Episode 110 - When to Use/Not Use GenServers or Umbrella Apps
Lots of developers coming to Elixir misuse GenServers and Umbrella applications, thinking that just because they have these tools, they should use them. But that’s not always so!
Have a listen for our perspective on when to reach for GenServers and when not to.
Episode 109 - Authorization/Authentication in Phoenix apps, Higher-Level App Patterns
EMPEX LA talks: https://www.youtube.com/watch?v=KmM9nt7kg68&list=PLyO-58-sOapy9Fs4Sd-HOeQIFwrSCQ3z1 EMPEX NYC CFP: http://empex.co/nyc Crevalle: http://crevalle.io Frame: https://frame.io
Episode 108 - Multiple Elixir Versions, How Much Erlang Should You Know, & Thinking Functionally
EMPEX LA is this weekend! Get your ticket to meet ElixirTalk hosts Desmond and Chris!
Episode 107 - Multiple Databases & Mocking External Tests
Episode 106 - Chat with José Valim
We hang out with José Valim, creator of Elixir, and discuss new features in Elixir 1.6, tips to build better applications, and (of course) Star Trek.
Episode 105 - Drop-in Libraries & Supervisors
Crevalle (http://crevalle.io) Is the Elixir ecosystem “mature” enough for production apps? (https://medium.com/@cameronp/is-the-elixir-ecosystem-mature-enough-for-production-apps-79fbf9f2df31) Supervisor Documentation (https://hexdocs.pm/elixir/Supervisor.html) The Zen of Erlang (https://ferd.ca/the-zen-of-erlang.html) Visualization of Elixir Supervision Tree Strategies (https://medium.com/elixirlabs/visualisation-of-elixir-supervision-tree-strategies-4d4cb8123138) KLEO (https://kleo.crevalle.io)
Episode 104 - Storing State in Elixir Apps
How should you think about storing state in your Elixir apps? Should you use a traditional external datastore? Or one of the built-in constructs: GenServers, ETS, DETS, or mnesia?
Episode 103 - Umbrella Apps
When should you use Umbrella Apps?
== Show Notes ==
- EMPEX (http://empex.co/)
- Crevalle (http://crevalle.io/)
- Frame.io (https://frame.io)
- Distillery (https://github.com/bitwalker/distillery)
- Bottling Elixir with Docker (https://paullamb.exposed/blog/2017/1/11/bottling-elixir-with-docker-part-1)
- CircleCI (https://circleci.com/)
- edeliver (https://github.com/edeliver/edeliver)
- Runtime Configuration (https://github.com/bitwalker/distillery/blob/master/docs/Runtime%20Configuration.md)
- Mix Docker (https://github.com/Recruitee/mix_docker)
- Desmond’s Deploy Script (https://gist.github.com/desmondmonster/2384ac4464e9a857f8b9d44d0d906df9)
- Real World Elixir Deployment - (https://www.youtube.com/watch?v=H686MDn4Lo8)
- The Future of Deployment (https://www.youtube.com/watch?v=0fuUtQFinZk)
- Gigalixir (https://www.gigalixir.com/)
- Deploying Phoenix on Heroku (https://hexdocs.pm/phoenix/heroku.html)
- LibCluster (https://github.com/bitwalker/libcluster)
- Desmond on Twitter (http://twitter.com/desmondmonster)
- Chris on Twitter (http://twitter.com/cjbell_)
Ask us a Question at https://github.com/elixirtalk/elixirtalk Follow us on Twitter! @elixirtalk