#Devoxx #AwesomeElixir @koenighotze
Bootstrap
|> Elixir
EASY FUN FOR BUSY DEVELOPERS
#Devoxx #AwesomeElixir @koenighotze
@koenighotze / David Schmitz
Senacor Technologies
Programmer!
Bad, bad fighter!
#Devoxx #AwesomeElixir @koenighotze
WET YOUR APPETITE FOR ELIXIR
SHOW OFF SOME COOL FEATURES
CODE A DISTRIBUTED PIZZA PARLOUR
#Devoxx #AwesomeElixir @koenighotze
学⼀一⻔门语⾔言,就是多⼀一个观察世界的窗户。
To learn a language is to have one more window from which to look at the world
#Devoxx #AwesomeElixir @koenighotze
Two minor caveats
#Devoxx #AwesomeElixir @koenighotze
I AM THE JON SNOW OF
ELIXIR AND ERLANG/OTP
#Devoxx #AwesomeElixir @koenighotze
THIS IS NOT A README!
#Devoxx #AwesomeElixir @koenighotze
YET
ANOTHER
PROGRAMMING
LANGUANGE?
Y
A
P
L
#Devoxx #AwesomeElixir @koenighotze
Elixir in a Nutshell
+
Elixir in a Nutshell
+
#Devoxx #AwesomeElixir @koenighotze
Principle of Conciseness
Principle of Consistency
Principle of Flexibility
Why Ruby is awesome
#Devoxx #AwesomeElixir @koenighotze
Battle-proven BEAM and OTP
Ever seen WhatsApp crash?
Reactive before Reactive-is-HipTm
Actors before Actors-are—HipTm
Why Erlang is awesome
#Devoxx #AwesomeElixir @koenighotze
Why Clojure is awesome
Because Rich Hickey is always right
#Devoxx #AwesomeElixir @koenighotze
WHY NOT JUST USE
RUBY, ERLANG OR CLOJURE?
#Devoxx #AwesomeElixir @koenighotze
It didn't take long, but pretty
soon my gut feeling kicked in.
This is good $hit. …, they both
compile to instructions for the
EVM
- Joe Armstrong (Creator of Erlang)
#Devoxx #AwesomeElixir @koenighotze
Programmer focussed
OTP Power + Ruby Love
Functional but pragmatic
Standard Toolset
Why Elixir is awesome
#Devoxx #AwesomeElixir @koenighotze
#Devoxx #AwesomeElixir @koenighotze
Erlang/OTP
ERLANG/BEAM TOOLS
LIBRARIES PATTERNS
#Devoxx #AwesomeElixir @koenighotze
Elixir
ERLANG/BEAM TOOLS
LIBRARIES PATTERNS
#Devoxx #AwesomeElixir @koenighotze
Pizza Parlour - Version 1
“Take my money! I want a salami pizza!”
“I am hungry!!”
“3 €, please!”
#Devoxx #AwesomeElixir @koenighotze
Pizza Parlour - Version 1
Demo
#Devoxx #AwesomeElixir @koenighotze
WHAT ABOUT
99.9999999?
#Devoxx #AwesomeElixir @koenighotze
Pillars of Resilience and Reliability
Message-passing between
isolated processes
Automatic recovery and
monitoring
Transparent distribution
#Devoxx #AwesomeElixir @koenighotze
Elixir Power Tools
Messaging with GenServer modules
Supervisor for transparent resilience
#Devoxx #AwesomeElixir @koenighotze
Shared resources Shared state Shared stability
SHARED STATE
COMPUTATION COMPUTATION COMPUTATION
HEAVY WEIGHT PROCESS
COMPUTATION COMPUTATION COMPUTATION
#Devoxx #AwesomeElixir @koenighotze
Light Weight Processes
MAILBOX
STATE
COMPUTATION
Asynchronous
Synchronous
GENSERVER
#Devoxx #AwesomeElixir @koenighotze
GenericServer in a Nutshell
loop(current_state):
wait for message
handle message
send reply
loop(new_state)
#Devoxx #AwesomeElixir @koenighotze
GenericServer in a Nutshell
loop(current_state):
wait for message
handle message
send reply
loop(new_state)
#Devoxx #AwesomeElixir @koenighotze
GenericServer in a Nutshell
loop(current_state):
wait for message
handle message
send reply
loop(new_state)
#Devoxx #AwesomeElixir @koenighotze
GenericServer in a Nutshell
loop(current_state):
wait for message
handle message
send reply
loop(new_state)
#Devoxx #AwesomeElixir @koenighotze
Architecture build around tiny Processes
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
PROCESS
HEAVY WEIGHT PROCESS
#Devoxx #AwesomeElixir @koenighotze
Message driven Pizza - The request
{:pizza, “Salami”}
handle_call({:pizza, “Salami”}, from, state)
#Devoxx #AwesomeElixir @koenighotze
%{order_number: 123, price: 10.50}
Message driven Pizza - The reply
#Devoxx #AwesomeElixir @koenighotze
Pizza Parlour - Version 2
Demo
#Devoxx #AwesomeElixir @koenighotze
NOW REALLY,
WHAT ABOUT
RESILIENCE???
#Devoxx #AwesomeElixir @koenighotze
“HAVE YOU TRIED TURNING
IT OFF AND ON AGAIN?”
#Devoxx #AwesomeElixir @koenighotze
The WHAT IF scenario
{:pizza, “Salami”}
#Devoxx #AwesomeElixir @koenighotze
Risk at the Bottom of the Supervision Tree
APPLICATION
SUPERVISOR
Here be dragons…
#Devoxx #AwesomeElixir @koenighotze
APPLICATION
SUPERVISOR
Supervisors watch their Children
#Devoxx #AwesomeElixir @koenighotze
APPLICATION
SUPERVISOR
Supervisors watch their Children
#Devoxx #AwesomeElixir @koenighotze
APPLICATION
SUPERVISOR
Supervisors watch their Children
#Devoxx #AwesomeElixir @koenighotze
Pizza Parlour - Version 3
Demo
#Devoxx #AwesomeElixir @koenighotze
There is so much more
#Devoxx #AwesomeElixir @koenighotze
Protocols for polymorphism
defimpl String.Chars do
def to_string(bitmap),
for: [Bitmap] do
…
end
end
#Devoxx #AwesomeElixir @koenighotze
Hygienic Macros
defmacro unless(clause, do:expression) do
quote do
if(!unquote(clause) do
unquote(expression))
end
end
end
#Devoxx #AwesomeElixir @koenighotze
Hygienic Macros
defmacro unless(clause, do:expression) do
quote do
if(!unquote(clause) do
unquote(expression))
end
end
end
#Devoxx #AwesomeElixir @koenighotze
Zero downtime Hot code replacement
def code_change(ver, old_state, extra) do
new_state = …
{:ok, new_state}
end
#Devoxx #AwesomeElixir @koenighotze
Real-time apps with Ecto and Phoenix
defmodule Video do
def alphabetical(query) do
from q in query, order_by: q.name
end
end
#Devoxx #AwesomeElixir @koenighotze
Real-time apps with Ecto and Phoenix
def alphabetical(query) do …
Video
|> Video.alphabetical
|> Repo.all
#Devoxx #AwesomeElixir @koenighotze
SHOULD WE ALL START
BUILDING EVERYTHING
WITH ELIXIR?
#Devoxx #AwesomeElixir @koenighotze
#Devoxx #AwesomeElixir @koenighotze
WELL….MAYBE NOT?!
#Devoxx #AwesomeElixir @koenighotze
AND OF COURSE…
#Devoxx #AwesomeElixir @koenighotze
MICROSERVICE AND
CLOUD READY ;)
#Devoxx #AwesomeElixir @koenighotze
New insights and ideas
Clean patterns as part of the core
Architecture and Tooling for IoT
Vibrant and friendly Community
Come for OTP, stay for…
#Devoxx #AwesomeElixir @koenighotze
Elixir Homepage, http://elixir-lang.org/
Dave Thomas, Programming Elixir
Fred Hebert, Stuff Goes Bad: Erlang in Anger
Do you want to know more?
#Devoxx #AwesomeElixir @koenighotze
Thank you very much!
<david.schmitz@senacor.com>

Elixir - Easy fun for busy developers @ Devoxx 2016