Riza Fahmi - ElixirDose.com - @rizafahmi22 - riza@ hacktiv8.com
PRODUCTIVE. RELIABLE. FAST.
SPONSOR
THANKS!
INTRODUCTION
YOU’RE MY REGULATOR, MY COMPILER
▸ Scream when things go too fast / slow / are unclear
▸ Scream when cool things happen
▸ Help me when live coding, I’m suck at it. Find errors for me
before the compiler do
▸ Similar to Phoenix channel, this is two way communication
channel. Don’t let me do all the talking!
INTRODUCTION
SLIDES ARE UP!
https://slideshare.net
INTRODUCTION
WHO AM I
▸ Was at CitizenLab, a Belgium-based early stage startup. As
a CTO
▸ Now at Hacktiv8, a startup for dev bootcamp
▸ Run ElixirDose — an Elixir-focused blog since November
2013
INTRODUCTION
WHAT WE’LL SEE
▸ The Awesomeness of Phoenix
▸ Build something with Phoenix
▸ Some live coding
SOME GLOSSARY
Web Framework
Programming Language
Erlang Virtual Machine
WHAT IS PHOENIX
“Framework for building HTML5 apps, API backends
and distributed systems to take on the modern web.”
Chris McCord
HOW IS PHOENIX DIFFERENT?
PRODUCTIVITYPERFORMANCE VS
LET’S TALK PRODUCTIVITY
PRODUCTIVITY
SHORT TERM
▸ Documentation / Guides / Generators
▸ Eliminates trivial choices
PRODUCTIVITY
LONG TERM
▸ Maintainability
▸ Tried and true architecture patterns
▸ Let it crash mentality
“IF I HAVE TO BUILD SKYNET,
KILLER ARTIFICIAL INTELLIGENT
FROM TERMINATOR MOVIES, I
WOULD USE ERLANG AND
ERLANG VM. MOSTLY BECAUSE
IT’S UNKILLABLE AND KEEP
COMING BACK!”
Simon St.Laurent from MostlyErlang Podcast
MORE FEATURES PLEASE…
FEATURES
STATIC BUILD TOOLS WITH ES6 AS DEFAULT
Ultra fast HTML5 build tools
Compiles/lints your scripts and styles
Concatenates your scripts and styles
Minifies it
Watches for file changes
FEATURES
PRETTY AND HELPFUL ERROR PAGES
FEATURES
CHANNELS
▸ The main reason why Phoenix exists in the first place
▸ It’s websocket with steroid
▸ Cross-platform, cross-languages
▸ For creating modern, real-time apps
▸ Beyond HTML
FEATURES
MORE…
▸ Form builder
▸ Live reloading
▸ MCV with twist
▸ much more…
LET’S TALK PERFORMANCE NOW
PERFORMANCE
VIEWS & TEMPLATES
▸ Precompiled and pretty fast!
▸ Views render templates
▸ It’s beyond HTML
PERFORMANCE
WHAT ABOUT SOME BENCHMARK
Frameworks Throughput (req/s) Latency (ms)
Plug (Elixir) 54,948.14 3.83
Gin (Go) 51,483.20 1.94
Phoenix (Elixir) 43,063.45 2.82
Express Cluster (Nodejs) 27,669.46 3.73
Martini (Go) 14,798.46 6.81
Express (Nodejs) 9,965.56 10.07
Sinatra (Ruby) 9,182.86 6.55
Rails (Ruby) 3,274.81 17.25
https://github.com/mroth/phoenix-showdown
PERFORMANCE
ROBUST CONCURRENCY MODEL
▸ “processes” is extremely lightweight units of concurrency
▸ Garbage collection is per process, no global pauses
“ WE DO NOT HAVE ONE
WEB-SERVER
HANDLING 2 MILLIONS
SESSIONS. WE HAVE 2
MILLION WEBSERVERS
HANDLING ONE
SESSION EACH.”
Joe Armstrong - Erlang Father
http://goo.gl/DprVTC
LET’S BUILD SOMETHING
WHAT WE’LL BUILD
ELIXIR VIDEO PORTAL
▸ CRUD app for collecting Elixir-related video
▸ Similar confreaks.tv or pyvideo.org
OFF ROAD… WE GO!
WANT MORE?
WANT MORE…
READ SOME BOOKS
WANT MORE…
WATCH AND LEARN
I’M DONE. THANKS FOR TUNING IN!

Introduction to Phoenix Web Framework