Table of Contents
Introduction
- About this tutorial
- So what's Erlang?
- Don't drink too much Kool-Aid
- What you need to dive in
- Where to get help
Starting Out
Starting Out (for real)
- Numbers
- Invariable Variables
- Atoms
- Boolean Algebra and Comparison Operators
- Tuples
- Lists
- List Comprehensions
- Bit Syntax
- Binary Comprehensions
Modules
Syntax in Functions
Types (or lack thereof)
Recursion
- Hello recursion!
- Length
- Length of Tail Recursion
- More recursive functions
- Quick, Sort!
- More than lists
- Thinking recursively
Higher Order Functions
Errors and Exceptions
- Not so fast!
- A Compilation of Errors
- No, YOUR logic is wrong!
- Run-time Errors
- Raising Exceptions
- Dealing with Exceptions
- Wait, there's more!
- Try a try in a tree
Functionally Solving Problems
A Short Visit to Common Data Structures
- Won't be too long, promised!
- Records
- Key-Value Stores
- Arrays
- A Set of Sets
- Directed Graphs
- Queues
- End of the short visit
The Hitchhiker's Guide to Concurrency
- Don't Panic
- Concepts of Concurrency
- Not Entirely Unlike Linear Scaling
- So long and thanks for all the fish!
More On Multiprocessing
Errors and Processes
Designing a Concurrent Application
- Understanding the Problem
- Defining the Protocol
- Lay Them Foundations
- An Event Module
- The Event Server
- Hot Code Loving
- I Said, Hide Your Messages
- A Test Drive
- Adding Supervision
- Namespaces (or lack thereof)
What is OTP?
- It's The Open Telecom Platform!
- The Common Process, Abstracted
- The Basic Server
- Specific Vs. Generic
Clients and Servers
Rage Against The Finite-State Machines
- What Are They?
- Generic Finite-State Machines
- A Trading System Specification
- Game trading between two players
- That Was Quite Something
- Fit for the Real World?
Event Handlers
Who Supervises The Supervisors?
- From Bad to Good
- Supervisor Concepts
- Using Supervisors
- Child Specifications
- Testing it Out
- Dynamic Supervision
Building an Application With OTP
- A Pool of Processes
- The Onion Layer Theory
- A Pool's Tree
- Implementing the Supervisors
- Working on the Workers
- Writing a Worker
- Run Pool Run
- Cleaning the Pool
Building OTP Applications
- Why Would I Want That?
- My Other Car is a Pool
- The Application Resource File
- The Application Behaviour
- From Chaos to Application
- Library Applications
The Count of Applications
Release is the Word
- Am I an Executable Yet?
- Fixing The Leaky Pipes
- Releases With Systools
- Releases With Reltool
- Recipes
- Released From Releases
Leveling Up in The Process Quest
- The Hiccups of Appups and Relups
- The 9th Circle of Erl
- Progress Quest
- Making Process Quest Better
- Appup Files
- Upgrading the Release
Buckets Of Sockets
- IO Lists
- TCP and UDP: Bro-tocols
- UDP Sockets
- TCP Sockets
- More Control With Inet
- Sockserv, Revisited
- Where to go From Now?
EUnited Nations Council
- The Need for Tests
- EUnit, What's a EUnit?
- Test Generators
- Fixtures
- Testing Regis
- He Who Knits Eunits
Bears, ETS, Beets
- The Concepts of ETS
- ETS Phone Home
- Meeting Your Match
- You Have Been Selected
- DETS
- A Little Less Conversation, A Little More Action Please
Distribunomicon
- Alone in the Dark
- This is my Boomstick
- Fallacies of Distributed Computing
- Dead or Dead Alive
- My Other CAP is a Theorem
- Setting up an Erlang Cluster
- Cookies
- Remote Shells
- Hidden Nodes
- The Walls are Made of Fire and the Goggles do Nothing
- The Calls from Beyond
- Burying the Distribunomicon
Distributed OTP Applications
Coming Soon
- Common Test
- Mnesia
- Dialyzer
- And then hopefully, I can take a long nice break and consider myself done with Erlang!