13. Build for Telecom switch system
at beginning
» Functional
» Soft real time
» Concurrent
» 99.999% up-time, including upgrade and hot-fix
» Hot update
14. On the fly update, literally*.
Erlang AR drone in-flight upgrade
16. Compare with system process
» C# process:
300µs per process
50µs per message
» Erlang VM process:
1µs up to 2,500 processes
3µs up to 30,000 processes
0.8µs per message
17. We do not have ONE web server handling 2 millions sessions.
We have 2 million web servers handling one session each.
» Joe Armstrong
37. Code with doctest
defmodule Num do
@doc """
Demonstrate doctest feature
## Example
iex> Num.is_even?(1)
true
"""
def is_even?(num) do
rem(num, 2) == 0
end
end
47. Demysitify: Both are MVC framework with
» Routes
» Controller
» Model
» View
» assets
48. Core idea of phoenix:
Your entire web application is a function
49. url is your params, and return value is that html
path = "/order/search?start_date=2017-12-02&end_date=2017-12-03"
html = path
|> router
|> controller
|> model
|> controller
|> view
53. Ecto
defmodule MyApp.Order
schema "orders" do
belongs_to :user, MyApp.User
has_many :order_items, MyApp.OrderItem
field :code, :string
field :payment_method, :string
end
# query functions here
end
54. Ecto query functions
def query_cart_of_user(query __MODULE__, user_id) do
from o in query,
where: o.user_id == ^user_id
end
def order_by_created_at(query __MODULE__) do
from o in query,
order_by: o.created_at
end
## in Controller
orders = %Order{}
|> query_cart_of_user(20)
|> order_by_created_at
|> Repo.all
57. File: /view/order_view.ex
defmodule MyApp.OrderView do
use MyApp.Web, :view
def render("show.html", params []) do
~E{
<h2>Hi! this is the show page!<%= order_name(@conn, @order) %></h2>
}
end
def order_name(conn, order) do
user = conn.assigns[:current_user]
"#{user.name}: #{order.name} x #{order.quantity}"
end
end
61. What I've learned
» Different paradiam expand your horizon
» Which is a knowledge you can bring with you anywhere
» Composability over REUSE
» Think in process way
» And...