Slide 1

Slide 1 text

Elixir, Erlang i visoko dostupni serverski sustavi @sasajuric

Slide 2

Slide 2 text

Tko vrijedi, je dostupan. Tko je dostupan, vrijedi. Tko nije dostupan, ne vrijedi.

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

EVM Erlang stdlib OTP Erlang programi Erlang/OTP

Slide 5

Slide 5 text

dostupnost stabilnost skalabilnost distribuiranost responzivnost live upgrade concurrency dostupnost

Slide 6

Slide 6 text

P P P P P P P P P P P P P P P P P P P P P scheduler scheduler scheduler scheduler CPU CPU CPU CPU EVM

Slide 7

Slide 7 text

P P P P exit signal vrijeme P'

Slide 8

Slide 8 text

P P P P P P P P P P P P P P P P P P P P P scheduler scheduler scheduler scheduler CPU CPU CPU CPU EVM

Slide 9

Slide 9 text

EVM P P P P P P P P P P P P P P P P P P P P P scheduler scheduler scheduler scheduler CPU CPU CPU CPU EVM

Slide 10

Slide 10 text

scheduler scheduler scheduler scheduler listener request request job 1 job 2 request EVM

Slide 11

Slide 11 text

EVM Erlang stdlib OTP Erlang programi :-) :-(

Slide 12

Slide 12 text

EVM Erlang stdlib OTP Erlang programi Elixir Elixir programi

Slide 13

Slide 13 text

-module(sum_actor). -behaviour(gen_server). -export([ start/0, sum/3, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3 ]). start() -> gen_server:start(?MODULE, [], []). sum(Server, A, B) -> gen_server:call(Server, {sum, A, B}). init(_) -> {ok, undefined}. handle_call({sum, A, B}, _From, State) -> {reply, A+B, State}; handle_call(_Request, _From, State) -> {reply, error, State}. handle_cast(_Msg, State) -> {noreply, State}. handle_info(_Info, State) -> {noreply, State}. terminate(_Reason, _State) -> ok. code_change(_OldVsn, State, _Extra) -> {ok, State}.

Slide 14

Slide 14 text

defmodule SumActor do use GenServer.Behaviour def start do :gen_server.start(__MODULE__, [], []) end def sum(server, a, b) do :gen_server.call(server, {:sum, a, b}) end def handle_call({:sum, a, b}, _from, state) do {:reply, a + b, state} end end

Slide 15

Slide 15 text

defmodule SumActor do use ExActor defcall sum(a, b) do a + b end end

Slide 16

Slide 16 text

defcall sum(a, b) do a + b end def sum(server, a, b) do :gen_server.call(server, {:sum, a, b}) end def handle_call({:sum, a, b}, _from, state) do {:reply, a + b, state} end

Slide 17

Slide 17 text

Repo.all( from w in Weather, where: w.prcp > 0 or w.prcp == nil, select: w ) get "/hello/world" do conn.resp(200, "Hello world") end fact "addition" do 1 + 1 |> 2 end

Slide 18

Slide 18 text

obradi_xml(Model, Xml) -> Model1 = azuriraj(Model, Xml), Model2 = obradi_promjene(Model1), pohrani(Model2).

Slide 19

Slide 19 text

obradi_xml(Model, Xml) -> Model1 = azuriraj(Model, Xml), Model2 = obradi_promjene(Model1), pohrani(Model2).

Slide 20

Slide 20 text

def obradi_xml(model, xml) do model |> azuriraj(xml) |> obradi_promjene |> pohrani end f(...) |> g(...) g(f(...), ...)

Slide 21

Slide 21 text

defrecord Person, [:name, :age] record = MyRecord.new(name: "Saša Jurić") record = record.age(36) x = 5 IO.puts "#{x} * #{x} = #{x * x}" String.codepoints("Saša Jurić") sasa: ~$ mix new test * creating README.md * creating .gitignore * creating mix.exs * creating lib * creating lib/test.ex * creating test * creating test/test_helper.exs * creating test/test_test.exs Enum.each(enumerable, ...) inspect(inspectable)

Slide 22

Slide 22 text

elixir-lang.org elixir-lang-talk elixir-lang-core Hacking Devin Torres A Cauldron of Black and White Stones The Erlangelist