PragmaticBookshelf

PragmaticBookshelf

Forum Sponsor

Elixir Patterns (PragProg)

Alexander Koutmos @akoutmos

Elixir Patterns aims to surface the powerful and unique characteristics of the Erlang virtual machine and show you how to solve everyday problems in a simple yet scalable way. Not only will you master the tools at your disposal courtesy of Erlang and the BEAM, you will also learn how to better utilize functional programming in order to achieve your goals in a clear and concise way. The idea of having a “go-to” toolbox of patterns you can leverage is an enticing one - that is what design patterns are all about! This book forgoes the abstract and instead provides concrete examples to help you better leverage the unique properties of Elixir, Erlang, and BEAM.

The Erlang programming language was first released in 1986 and to this day continues to have a tremendous impact on the field of computer programming. This impact is apparent when you look at how many other programming languages have actor model frameworks that mirror the semantics of Erlang and how many recent programming languages have emerged that make use of functional programming concepts. In addition, while many other programming languages and their runtimes require external tools in order to deal with application crashes, users of the Erlang virtual machine (or BEAM as it is colloquially called) enjoy fault-tolerant constructs that are built right into the runtime.

While the Erlang syntax may not be for everyone, we can still leverage the benefits of Erlang and the BEAM through the Elixir programming language. Elixir provides us an alternative programming language that can target the same runtime as Erlang while also leaning on the Erlang standard library. You essentially get all of the benefits of Erlang and the BEAM along with all of the tools available to you through the Elixir standard library.

This book guides you through the Erlang standard library and how you can leverage it from Elixir as well as how you can structure applications in order to make the most out of the unique runtime that is the BEAM. By the end of this book you will be comfortable constructing your own supervision trees, using processes, leaning on ETS and persistent term for when performance is a primary concern, and how you can use both the mutable and immutable data structures that are available in the Erlang standard library. In addition, you’ll learn how you can package these language and runtime primitives into reusable patterns in order to solve common problems that you may encounter in your day to day applications.

This work was written and produced entirely by the author. We are proud to be distributing it.


Alexander Koutmos has been professionally writing software for over a decade and has been primarily working with Elixir since 2015. He currently maintains a number of Elixir libraries on Hex, is a host on the BEAM Radio podcast, and wrote a book about Building a Weather Station with Nerves and Elixir.


Full details: Elixir Patterns: The essential BEAM handbook for the busy developer by Alexander Koutmos


Don’t forget you can get 35% off with your Devtalk discount! Just use the coupon code “devtalk.com" at checkout :+1:

Most Liked

AstonJ

AstonJ

Edit: Please note this book is now distributed by PragProg so the original thread (this post, all the way down to this post) has been merged into this thread.



By @akoutmos and @hugobarauna

You already know the basics of Elixir. Maybe you have even shipped something to production. That’s awesome! But how can you go one step further in your Elixir developer journey?

This book will help you to become a better Elixir developer by teaching you how to leverage the power of the BEAM runtime with recipes and patterns specific to Elixir/OTP.

About the book

The idea of having a “go-to” toolbox of patterns that you can leverage is an enticing one. That’s what design patterns are about. But, design patterns are usually abstract and do not leverage unique properties of your specific run-time or language. That’s how this book is different.

This book aims to surface the powerful and unique characteristics of the Erlang virtual machine (or BEAM for short) and show you how you can go about solving everyday problems in a simple yet scalable way.

Not only will you learn how to better leverage the tools that are at your disposal courtesy of Erlang and the BEAM, but you will also learn how to better utilize Functional Programming in order to achieve your goals in a clear and concise way. You’ll start off by learning about some of the Erlang standard library utilities that are available to you right out of the box, and then you’ll learn how to put those to use in your stateful GenServer powered applications.

What you’ll learn in this book:

  1. The Erlang Standard Library Part 1
  2. What are Data Structures
  3. Using Queues in Erlang
  4. The Many Set Implementations in Erlang
  5. Arrays…in Erlang?
  6. Using the Erlang Module for Everyday Tasks
  7. The Erlang Standard Library Part 2
  8. Directed Graphs with the Digraph Module
  9. Fast Incrementers with Atomics and Counters
  10. Blazing Fast Data Reads with Persistent Term
  11. Using ETS and DETS for General Purpose Data Storage
  12. Keeping Things Secret with the Crypto Module
  13. The Elixir Standard Library
  14. Useful Enum Module Patterns
  15. Being Lazy with the Stream Module
  16. Massive Concurrency with the Task Module
  17. The Process Module
  18. GenServers and Supervisors
  19. Erlang Application Philosophy
  20. What is a GenServer?
  21. Understanding the Callbacks
  22. The Lifecycle of a GenServer
  23. What is a Supervisor
  24. Combining Supervisors and GenServers
  25. Basic GenServer Recipes
  26. Initializing an Application
  27. Message and Data Batching
  28. Running Cron Jobs
  29. Process Introspection with the Sys Module
  30. Advanced GenServer Recipes
  31. Rate Limiting
  32. Work Delegator
  33. Actor Model Design
  34. Testing Stateful Applications
  35. Application Release Packaging
  36. What is an Erlang Release
  37. Why Should you use Erlang Releases?
  38. Handling Application Configuration
  39. Behaviours and Protocols for Environment Specific Adapters
37
Post #2
akoutmos

akoutmos

Author of Build a Weather Station with Elixir and Nerves

Apologies for the delay with the Elixir Patterns book. My wife and our newborn both fell very ill back in February and I had to put a pause on pretty much everything from the book, open source, blogging, podcasting and everything inbetween in order to take care of the family. My wife was fairly close to death’s door, but thank God she has recovered and is improving day by day. Still a long way to go but we’re getting there.

I am hoping that I will be back to writing the book in a few weeks. And after that hopefully back to doing some open source work. It’s been a long road for the family and I appreciate all the support from the Elixir community :heart:.

akoutmos

akoutmos

Author of Build a Weather Station with Elixir and Nerves

@hugobarauna and I have some fantastic news…the Elixir Patterns books is complete and in release candidate!!

The eighth and final chapter dives into:

  • Building a Scalable Actor Model with Caching Support: Learn how to architect a high-performance, fault-tolerant system using GenServers, ETS, and DynamicSupervisor.
  • Implementing a Fault-Tolerant ETS Cache: Discover techniques to make your ETS caches resilient to failures, ensuring that your system can recover and maintain state even after unexpected process crashes.
  • Adapter Pattern in Elixir: Understand how to use Elixir’s behaviours to implement the adapter pattern, allowing you to easily swap out dependencies at run-time or compile-time.

Here is a sneak peak at the final boss supervision tree :smiley:

This is the first release candidate of Elixir Patterns which means that the book’s content is complete, but we expect minor adjustments and potential errata. If you haven’t so already, be sure to pick up your copy at: https://elixirpatterns.dev/

akoutmos

akoutmos

Author of Build a Weather Station with Elixir and Nerves

@hugobarauna and I excited to announce the the Elixir Patterns book is in beta release! Part one of the book is complete and we’re currently working on wrapping up part 2. Each chapter has a couple of accompanying Livebook files to help you learn and experiment with the concepts in the chapter. Check it out @ https://elixirpatterns.dev/ and if you are interested in picking up a copy, you get an early beta price :wink:

10
Post #8
akoutmos

akoutmos

Author of Build a Weather Station with Elixir and Nerves

Just released the next round of content (PDF and Livebooks)!. We also got a fresh new cover :smiley:. Really excited about this release and happy to get it into readers hands!

We’re still running the beta price so be sure to get your copy if you haven’t already :wink:: https://elixirpatterns.dev/

Where Next?

Popular in Books Top

PragmaticBookshelf
Kevin Hoffman edited by Kelly Talbot @KellyTalbot Reality is event-sourced; your mind processes sight, sound, taste, smell, and touch to...
New
PragmaticBookshelf
Joseph Koski Series editor: Sophie DeBenedetto @SophieDeBenedetto Developmental editor Adaobi Obi Tulton @aotulton Combine advanced fu...
New
radar
by Ryan Bigg Joy of Elixir came about because I saw that there was not very much when it comes to absolute beginner material for lear...
New
AstonJ
By Simon St. Laurent, J. David Eisenberg Elixir is an excellent language if you want to learn about functional programming, and with thi...
New
Eiji
The Ecto recipes were originally written for the “What’s new in Ecto 2” ebook and then made open-source by Plataformatec. Since then, the...
New
AstonJ
Classing this as a free online book :003: By Sean Callan with help from the community Lessons about the Elixir programming language...
New
benwilson512
by Bruce Williams and Ben Wilson Your domain is rich and interconnected, and your API should be too. Upgrade your web API to GraphQL, le...
New
peerreynders
Build Highly Scalable Systems with Channels https://imagery.pragprog.com/products/593/sbsockets.jpg?1566562141 Don’t forget you can ...
355 15772 140
New
codestirring
Hey Elixir Forum, I’ve written a ebook called the Phoenix LiveView Cookbook which I’ve written in the hopes of distilling the knowledge ...
New
AstonJ
by Dave Thomas This book is the introduction to Elixir for experienced programmers, completely updated for Elixir 1.6 and beyond. Explor...
New

Other popular topics Top

chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New

We're in Beta

About us Mission Statement