Elixir - Easy fun for busy developers @ Devoxx 2016
-
Upload
david-schmitz -
Category
Engineering
-
view
245 -
download
1
Transcript of Elixir - Easy fun for busy developers @ Devoxx 2016
#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 ReliabilityMessage-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
AsynchronousSynchronous
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 TreeAPPLICATION
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 Macrosdefmacro unless(clause, do:expression) do quote do if(!unquote(clause) do unquote(expression)) end end end
#Devoxx #AwesomeElixir @koenighotze
Hygienic Macrosdefmacro 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!<[email protected]>