liveBook · Manning

What you will learn in Elixir in Action, Third Edition

by Sasa Juric

Chapter by chapter

Chapter 1: First steps

1.1 About Erlang · 1.1.1 High availability · 1.1.2 Erlang concurrency · 1.1.3 Server-side systems · 1.1.4 The development platform · 1.1.5 Relationship to microservices · 1.2 About Elixir · 1.2.1 Code simplification · 1.2.2 Composing functions · 1.2.3 The big picture · 1.3 Disadvantages · 1.3.1 Speed · 1.3.2 Ecosystem · 1.4 Summary

What you learn in chapter 1 →

Chapter 2: Building blocks

2.1 The interactive shell · 2.2 Working with variables · 2.3 Organizing your code · 2.3.1 Modules · 2.3.2 Functions · 2.3.3 Function arity · 2.3.4 Function visibility · 2.3.5 Imports and aliases · 2.3.6 Module attributes · 2.3.7 Comments · 2.4 Understanding the type system · 2.4.1 Numbers · 2.4.2 Atoms · 2.4.3 Tuples · 2.4.4 Lists · 2.4.5 Immutability · 2.4.6 Maps · 2.4.7 Binaries and bitstrings · 2.4.8 Strings · 2.4.9 First-class functions · 2.4.10 Other built-in types · 2.4.11 Higher-level types · 2.4.12 IO lists · 2.5 Operators · 2.6 Macros · 2.7 Understanding the runtime · 2.7.1 Modules and functions in the runtime · 2.7.2 Starting the runtime · 2.8 Summary

What you learn in chapter 2 →

Chapter 3: Control flow

3.1 Pattern matching · 3.1.1 The match operator · 3.1.2 Matching tuples · 3.1.3 Matching constants · 3.1.4 Variables in patterns · 3.1.5 Matching lists · 3.1.6 Matching maps · 3.1.7 Matching bitstrings and binaries · 3.1.8 Compound matches · 3.1.9 General behavior · 3.2 Matching with functions · 3.2.1 Multiclause functions · 3.2.2 Guards · 3.2.3 Multiclause lambdas · 3.3 Conditionals · 3.3.1 Branching with multiclause functions · 3.3.2 Classical branching expressions · 3.3.3 The with expression · 3.4 Loops and iterations · 3.4.1 Iterating with recursion · 3.4.2 Tail function calls · 3.4.3 Higher-order functions · 3.4.4 Comprehensions · 3.4.5 Streams · 3.5 Summary

What you learn in chapter 3 →

Chapter 4: Data abstractions

4.1 Abstracting with modules · 4.1.1 Basic abstraction · 4.1.2 Composing abstractions · 4.1.3 Structuring data with maps · 4.1.4 Abstracting with structs · 4.1.5 Data transparency · 4.2 Working with hierarchical data · 4.2.1 Generating IDs · 4.2.2 Updating entries · 4.2.3 Immutable hierarchical updates · 4.2.4 Iterative updates · 4.2.5 Exercise: Importing from a file · 4.3 Polymorphism with protocols · 4.3.1 Protocol basics · 4.3.2 Implementing a protocol · 4.3.3 Built-in protocols · 4.4 Summary

What you learn in chapter 4 →

Chapter 5: Concurrency primitives

5.1 Concurrency in BEAM · 5.2 Working with processes · 5.2.1 Creating processes · 5.2.2 Message passing · 5.3 Stateful server processes · 5.3.1 Server processes · 5.3.2 Keeping a process state · 5.3.3 Mutable state · 5.3.4 Complex states · 5.3.5 Registered processes · 5.4 Runtime considerations · 5.4.1 A process is sequential · 5.4.2 Unlimited process mailboxes · 5.4.3 Shared-nothing concurrency · 5.4.4 Scheduler inner workings · 5.5 Summary

What you learn in chapter 5 →

Chapter 6: Generic server processes

6.1 Building a generic server process · 6.1.1 Plugging in with modules · 6.1.2 Implementing the generic code · 6.1.3 Using the generic abstraction · 6.1.4 Supporting asynchronous requests · 6.1.5 Exercise: Refactoring the to-do server · 6.2 Using GenServer · 6.2.1 OTP behaviours · 6.2.2 Plugging into GenServer · 6.2.3 Handling requests · 6.2.4 Handling plain messages · 6.2.5 Other GenServer features · 6.2.6 Process life cycle · 6.2.7 OTP-compliant processes · 6.2.8 Exercise: GenServer-powered to-do server · 6.3 Summary

What you learn in chapter 6 →

Chapter 7: Building a concurrent system

7.1 Working with the Mix project · 7.2 Managing multiple to-do lists · 7.2.1 Implementing a cache · 7.2.2 Writing tests · 7.2.3 Analyzing process dependencies · 7.3 Persisting data · 7.3.1 Encoding and persisting · 7.3.2 Using the database · 7.3.3 Analyzing the system · 7.3.4 Addressing the process bottleneck · 7.3.5 Exercise: Pooling and synchronizing · 7.4 Reasoning with processes · 7.5 Summary

What you learn in chapter 7 →

Chapter 8: Fault tolerance basics

8.1 Run-time errors · 8.1.1 Error types · 8.1.2 Handling errors · 8.2 Errors in concurrent systems · 8.2.1 Linking processes · 8.2.2 Monitors · 8.3 Supervisors · 8.3.1 Preparing the existing code · 8.3.2 Starting the supervisor process · 8.3.3 Child specification · 8.3.4 Wrapping the supervisor · 8.3.5 Using a callback module · 8.3.6 Linking all processes · 8.3.7 Restart frequency · 8.4 Summary

What you learn in chapter 8 →

Chapter 9: Isolating error effects

9.1 Supervision trees · 9.1.1 Separating loosely dependent parts · 9.1.2 Rich process discovery · 9.1.3 Via tuples · 9.1.4 Registering database workers · 9.1.5 Supervising database workers · 9.1.6 Organizing the supervision tree · 9.2 Starting processes dynamically · 9.2.1 Registering to-do servers · 9.2.2 Dynamic supervision · 9.2.3 Finding to-do servers · 9.2.4 Using the temporary restart strategy · 9.2.5 Testing the system · 9.3 “Let it crash” · 9.3.1 Processes that shouldn’t crash · 9.3.2 Handling expected errors · 9.3.3 Preserving the state · 9.4 Summary

What you learn in chapter 9 →

Chapter 10: Beyond GenServer

10.1 Tasks · 10.1.1 Awaited tasks · 10.1.2 Non-awaited tasks · 10.1.3 Supervising dynamic tasks · 10.2 Agents · 10.2.1 Basic use · 10.2.2 Agents and concurrency · 10.2.3 Agent-powered to-do server · 10.2.4 Limitations of agents · 10.3 ETS tables · 10.3.1 Basic operations · 10.3.2 ETS-powered key-value store · 10.3.3 Other ETS operations · 10.3.4 Exercise: Process registry · 10.4 Summary

What you learn in chapter 10 →

Chapter 11: Working with components

11.1 OTP applications · 11.1.1 Creating applications with the mix tool · 11.1.2 The application behavior · 11.1.3 Starting the application · 11.1.4 Library applications · 11.1.5 Implementing the application callback · 11.1.6 The application folder structure · 11.2 Working with dependencies · 11.2.1 Adding a dependency · 11.2.2 Adapting the pool · 11.2.3 Visualizing the system · 11.3 Building a web server · 11.3.1 Choosing dependencies · 11.3.2 Starting the server · 11.3.3 Handling requests · 11.3.4 Reasoning about the system · 11.4 Configuring applications · 11.4.1 Application environment · 11.4.2 Varying configuration · 11.4.3 Config script considerations · 11.5 Summary

What you learn in chapter 11 →

Chapter 12: Building a distributed system

12.1 Distribution primitives · 12.1.1 Starting a cluster · 12.1.2 Communicating between nodes · 12.1.3 Process discovery · 12.1.4 Links and monitors · 12.1.5 Other distribution services · 12.2 Building a fault-tolerant cluster · 12.2.1 Cluster design · 12.2.2 The distributed to-do cache · 12.2.3 Implementing a replicated database · 12.2.4 Testing the system · 12.2.5 Detecting partitions · 12.2.6 Highly available systems · 12.3 Network considerations · 12.3.1 Node names · 12.3.2 Cookies · 12.3.3 Hidden nodes · 12.3.4 Firewalls · 12.4 Summary

What you learn in chapter 12 →

Chapter 13: Running the system

13.1 Running a system with Elixir tools · 13.1.1 Using the mix and elixir commands · 13.1.2 Running scripts · 13.1.3 Compiling for production · 13.2 OTP releases · 13.2.1 Building a release · 13.2.2 Using a release · 13.2.3 Release contents · 13.2.4 Packaging in a Docker container · 13.3 Analyzing system behavior · 13.3.1 Debugging · 13.3.2 Logging · 13.3.3 Interacting with the system · 13.3.4 Tracing · 13.4 Summary

What you learn in chapter 13 →

Concepts explained in this book

These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.