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
Let's create stateful systems, by Elixir
Search
さっちゃん
August 24, 2019
Programming
1
750
Let's create stateful systems, by Elixir
さっちゃん
August 24, 2019
Tweet
Share
More Decks by さっちゃん
See All by さっちゃん
作ってよかったgraceful shutdownライブラリ #kyotogo
ne_sachirou
0
820
path 依存型って何?
ne_sachirou
0
280
野生の onbording と onbording 設計 #kyototechtalk
ne_sachirou
0
460
メトリックはいかにして見え續ける樣になったか #devio2022
ne_sachirou
0
54
名實一致
ne_sachirou
0
560
まかれるあなとみあ ―Mackerel のしくみを理解する 30 分― @ Hatena Engineer Seminar #16
ne_sachirou
0
2.9k
tacit programming : Point-free, Concatenatives & J
ne_sachirou
0
650
Monitoring Containerized Elixir
ne_sachirou
1
810
Phoenix LiveReact
ne_sachirou
1
380
Other Decks in Programming
See All in Programming
AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen
kasacchiful
1
250
[技育CAMPアカデミア]アイディアを形に!【超入門】スマホアプリ開発〜リリースまでの流れをご紹介
teamlab
PRO
0
350
本格ローグライク制作にEbitengineを選んでみた
nagainaganawa
0
290
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.6k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.2k
SwiftUI Performance 不要なViewの再描画と更新を抑える
bigamitiongit
1
160
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
180
puregoの活用例
aethiopicuschan
0
220
Ruby Pattern Matching
bkuhlmann
0
920
ONE WEDGE_company_guide
1wedge_one
0
380
Changed Rules: Architectures with Lightweight Stores
manfredsteyer
PRO
0
230
Site Reliability Engineering for GMO
pyama86
6
940
Featured
See All Featured
The Language of Interfaces
destraynor
151
23k
Building Adaptive Systems
keathley
30
1.8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.3k
No one is an island. Learnings from fostering a developers community.
thoeni
14
2.1k
Six Lessons from altMBA
skipperchong
20
3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
39
4.4k
Designing the Hi-DPI Web
ddemaree
276
33k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
186
16k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Building Effective Engineering Teams - LeadDev
addyosmani
27
1.8k
Large-scale JavaScript Application Architecture
addyosmani
503
110k
Become a Pro
speakerdeck
PRO
10
4.5k
Transcript
Let's create stateful systems, by Elixir
. 。oO( さっちゃんですよヾ( 〃l _ l) ノ゙☆)
I'll show you a number.
2
Two
Ⅱ
⼆
2 is a number of collison & collaboration.
I & you hot & ice stand up & lie
down inside & outside
stateless & stateful
Function is stateless. f : x -> y e.g. Web
server
Dialogue is stateful. Alice : X. Bob : Y. Alice
: X. Bob : Z. Most of the system is stateful.
Elixir
Elixir is a functional programming language. Functional programming is stateless.
All data of Elixir is immutable. [x, 3, x] = Enum.map([1,2,1], &(&1 + 1)) assert 2 == x // Many lines that don't reassign to `x`. assert 2 == x
Elixir has processes. 29 = Task.async(fn -> 29 end) |>
Task.await
Process has state. agent = Agent.start_link(fn -> 29 end) 29
= Agent.get(agent, &(&1)) Agent.update(agent, &(&1 + 13)) 42 = Agent.get(agent, &(&1))
State should be updated in a transaction. State shold interact
& isolate each other. Accessing to state should be scaled in-out. Server with state should be updated gracefully. Elixir has all of these!
State should be updated in a transaction. (No shared state)
State shold interact & isolate each other. (Application, Supervisor) Accessing to state should be scaled in-out. (GenStage, Task, Register, Erlang cluster) Server with state should be updated gracefully. (Hot code swap)
We can create stateful system easy, by constructing stateless parts.
How we can start Elixir? Let's create some applications. *
Web application with Phoenix. * Slack bot.
Phoenix is a Web application framework that familiar with WebSocket.
https://hexdocs.pm/phoenix/overview.html
React is available (✿ >ヮ ╹ )-♡ Let's create a
realtime interaction ∩ (> ◡ <*)∩ ♡ https://speakerdeck.com/ne_sachirou/phoenix-livereact
Create a Slack bot. https://github.com/BlakeWilliams/Elixir-Slack (Easy, so no topic.)
Installing Elixir. asdf https://asdf-vm.com/ asdf plugin-add erlang asdf install erlang
22.0.7 asdf plugin-add elixir asdf install elixir 1.9.1
Text editor? VSCode with mjmcloug.vscode-elixir works.
Format & lint. InnerCotton https://github.com/ne-sachirou/inner_cotton is a set of standard
development tools. mix cotton.init mix cotton.lint --fix
Docker image (You need Docker :-) Fix major ver.s both
Erlang & Elixir. docker run -it --rm nesachirou/elixir:1.9_erl22
Textbook & document. Official guide : https://elixir-lang.org/ Official document :
https://hexdocs.pm/elixir/Kernel.html Online textbook : https://elixirschool.com/ja/ Textbook : https://tatsu-zine.com/books/programming-elixir-ja
https://speakerdeck.com/ne_sachirou/elixirwan-quan-nili-jie-sita
Advanced resources
Erlang in Anger https://ymotongpoo.github.io/erlang-in-anger/text-ja.pdf You want to read this… before
production.
https://speakerdeck.com/ne_sachirou/sutetohurudeda-gui-mo- akusesufalsearusoft-realtimenagemusabawoeasynitukuru
https://speakerdeck.com/ne_sachirou/elixir-on-containers
https://speakerdeck.com/ne_sachirou/phoenix-at-scale
https://speakerdeck.com/ne_sachirou/ddd-data-driven-development