Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elixir. There and Back Again
Search
Nikolay Sverchkov
March 06, 2018
Programming
0
650
Elixir. There and Back Again
Nikolay Sverchkov
March 06, 2018
Tweet
Share
More Decks by Nikolay Sverchkov
See All by Nikolay Sverchkov
Authorization in the GraphQL era
ssnickolay
0
790
Rails 6: ActiveRecord
ssnickolay
0
39
Serverless Is Ruby Future
ssnickolay
0
710
Anything new Rails 6?
ssnickolay
1
1.3k
Serverless for mere mortals
ssnickolay
1
820
Evolution of Rails application architecture: 14 years in production
ssnickolay
3
1.2k
A Healthy Monolith
ssnickolay
0
1.2k
Other Decks in Programming
See All in Programming
階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜
yuhisatoxxx
3
890
XP, Testing and ninja testing ZOZ5
m_seki
2
260
Build your own WebP codec in Swift
kishikawakatsumi
2
890
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
260
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
170
CSC509 Lecture 02
javiergs
PRO
0
400
dynamic!
moro
9
6k
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
2
360
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
900
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
360
iOSDC.pdf
chronos2500
2
650
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
23
12k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
28
4k
Balancing Empowerment & Direction
lara
4
670
What's in a price? How to price your products and services
michaelherold
246
12k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
GitHub's CSS Performance
jonrohan
1032
460k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Docker and Python
trallard
46
3.6k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
How to Ace a Technical Interview
jacobian
280
23k
Context Engineering - Making Every Token Count
addyosmani
4
170
Transcript
None
None
EVIL MARTIANS
EVIL MARTIANS
Nikolay Sverchkov @ssnickolay
Battle of facts
Dependencies
??? “Welcome email” ???
Sidekiq (Redis) “Welcome email” ???
GenServer defmodule EmailSender do use GenServer def handle_cast({:send, email}, state)
do # send email {:noreply, state} end end # Start the server {:ok, pid} = GenServer.start_link(EmailSender, []) # This is the client GenServer.cast(pid, {:send, “
[email protected]
"}) #=> :ok
Sidekiq (Redis) “Welcome email” [OTP] GenServer
Sidekiq (Redis) ??? “We love cashcache” [OTP] GenServer ???
Sidekiq (Redis) Memcached “We love cashcache” [OTP] GenServer ???
Memcached vs ETS
Sidekiq (Redis) Memcached “We love cashcache” [OTP] GenServer [OTP] ETS
Sidekiq (Redis) Memcached ??? “Where is my long polling?” [OTP]
GenServer [OTP] ETS ???
Sidekiq (Redis) Memcached AnyCable “Where is my long polling?” [OTP]
GenServer [OTP] ETS ???
Sidekiq (Redis) Memcached AnyCable “Where is my long polling?” [OTP]
GenServer [OTP] ETS Phoenix Channels
Sidekiq (Redis) Memcached AnyCable ??? Message broker [OTP] GenServer [OTP]
ETS Phoenix Channels ???
Sidekiq (Redis) Memcached AnyCable RabbitMQ Message broker [OTP] GenServer [OTP]
ETS Phoenix Channels RabbitMQ
None
Wait, it's like…
None
Erlang -> Java BEAM -> JVM Elixir -> ???
None
Development
??? Speed ???
Spring + Bootsnap Speed By Design
Spring + Bootsnap ??? Architecture [DDD] By Design ???
Spring + Bootsnap Trailblazer\Dry(Hanami?) Architecture [DDD] By Design By Design
Spring + Bootsnap Trailblazer\Dry(Hanami?) ??? Umbrella By Design By Design
???
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? Umbrella By Design By Design
By Design
Flawless Victory?
I have to rewrite everything with Elixir
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? ??? Debugging By Design By
Design Umbrella ???
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? Pry Debugging By Design By
Design Umbrella IEx.pry
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? Pry ??? Deploy By Design
By Design Umbrella IEx.pry ???
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? Pry Docker\Capistrano Deploy By Design
By Design Umbrella IEx.pry Mix\Distillery
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? Pry Docker\Capistrano ??? Tests tooling
By Design By Design Umbrella IEx.pry Mix\Distillery ???
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? Pry Docker\Capistrano Rspec\Capybara Tests tooling
By Design By Design Umbrella IEx.pry Mix\Distillery Espec\Hound
Overtime
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? ActiveRecord (Rom?) Docker\Capistrano Rspec\Capybara Upload
Image By Design By Design Umbrella Ecto Mix\Distillery Espec\Hound
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? ActiveRecord (Rom?) Docker\Capistrano Rspec\Capybara Send
Email with attachment By Design By Design Umbrella Ecto Mix\Distillery Espec\Hound
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? ActiveRecord (Rom?) Docker\Capistrano Rspec\Capybara Authorization
By Design By Design Umbrella Ecto Mix\Distillery Espec\Hound
Spring + Bootsnap Trailblazer\Dry(Hanami?) Hanami? ActiveRecord (Rom?) Docker\Capistrano Rspec\Capybara Update
deps By Design By Design Umbrella Ecto Mix\Distillery Espec\Hound
Summary
Good for: Monolith Microservice Terrible for: Concurrency Key points Good
for: Microservice Concurrency Terrible for: CMS Admin panel
Why exactly Elixir?
Why exactly Elixir? • Fast learning • A lot of
job offers • http://erlangjobs.ru/ • High salary (Ruby < Elixir < Go) https://t.me/proelixir https://wunsh.ru/