Slide 1

Slide 1 text

UNBIASED A COMPLETELY SHOWCASE OF ELIXIR

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

L F E OVEABLE, UN RLANG

Slide 4

Slide 4 text

ERLANG FOR HIPSTERS 2.0?

Slide 5

Slide 5 text

javascript/coffescript java/clojure javascript/elm

Slide 6

Slide 6 text

javascript/coffescript java/clojure javascript/elm ✓

Slide 7

Slide 7 text

.BEAM

Slide 8

Slide 8 text

1.0 September 2014 1.3 September 2016

Slide 9

Slide 9 text

GOOD STUFF IMPROVABLE STUFF ELIXIR + ERLANG

Slide 10

Slide 10 text

@whatyouhide

Slide 11

Slide 11 text

FOOTBALL ADDICTS

Slide 12

Slide 12 text

GOOD STUFF IMPROVABLE STUFF ELIXIR + ERLANG

Slide 13

Slide 13 text

GOOD STUFF IMPROVABLE STUFF ELIXIR + ERLANG

Slide 14

Slide 14 text

STANDARD LIBRARY

Slide 15

Slide 15 text

STREAMS

Slide 16

Slide 16 text

STREAMS "foo.txt" |> File.stream! |> Stream.map(...) |> Stream... |> Enum.to_list

Slide 17

Slide 17 text

METAPROGRAMMING

Slide 18

Slide 18 text

defmacro unless(cond, expr) do quote do if !unquote(cond) do unquote(expr) end end end

Slide 19

Slide 19 text

defmacro unless(cond, expr) do quote do if !unquote(cond) do unquote(expr) end end end

Slide 20

Slide 20 text

STRUCTS "official" data types

Slide 21

Slide 21 text

defmodule User do defstruct [:name, :age] end %User{name: "Meg", age: 33}

Slide 22

Slide 22 text

PROTOCOLS

Slide 23

Slide 23 text

JSON encoding json:encode({user, ...}) user:encode({...})

Slide 24

Slide 24 text

JSON encoding defprotocol JSON do def encode(_) end defimpl JSON, for: User do def encode(user), do: ... end

Slide 25

Slide 25 text

ExUnit test "send/2" do send(self(), {:ok, 1}) assert_receive {:ok, _} end

Slide 26

Slide 26 text

ExUnit test "send/2" do send(self(), {:ok, 1}) assert_receive {:ok, _} end

Slide 27

Slide 27 text

tagging diff --stale

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

--stale don't run stale stinky tests

Slide 30

Slide 30 text

INTEROP WITH ERLANG for doing Real Work™

Slide 31

Slide 31 text

lists:map(fun(X) -> X + 1 end, [1, 2, 3]) :lists.map(fn(x) -> x + 1 end, [1, 2, 3])

Slide 32

Slide 32 text

Enum.shuffle([1, 2, 3]) 'Elixir.Enum':shuffle([1, 2, 3])

Slide 33

Slide 33 text

MIX

Slide 34

Slide 34 text

DOCUMENTATION @doc """ Performs command """ def command(c), do: ...

Slide 35

Slide 35 text

DOCUMENTATION

Slide 36

Slide 36 text

ONBOARDING Getting Started guide Resources (books, ...) Error messages

Slide 37

Slide 37 text

ECOSYSTEM Phoenix Nerves Ecto, Plug, GenStage, ...

Slide 38

Slide 38 text

COMMUNITY

Slide 39

Slide 39 text

GOOD STUFF IMPROVABLE STUFF ELIXIR + ERLANG

Slide 40

Slide 40 text

DIALYZER

Slide 41

Slide 41 text

PROPERTY-BASED TESTING

Slide 42

Slide 42 text

USING ELIXIR FROM ERLANG

Slide 43

Slide 43 text

GOOD STUFF IMPROVABLE STUFF ELIXIR + ERLANG

Slide 44

Slide 44 text

just an app

Slide 45

Slide 45 text

WHICH ONE DO I USE ELIXIR ELIXIR ELIXIR ELIXIR ELIXIR ELIXIR ELIXIR

Slide 46

Slide 46 text

APPRECIATE BOTH

Slide 47

Slide 47 text

POSSIBLE RULE OF THUMB libraries in Erlang (if they wouldn't benefit from Elixir features) apps in Elixir /

Slide 48

Slide 48 text

hex.pm Erlang + Elixir

Slide 49

Slide 49 text

GOOD STUFF IMPROVABLE STUFF ELIXIR <3 ERLANG STDLIB EXUNIT METAPROGRAMMING PROTOCOLS MIX DOCS ECOSYSTEM DIALYZER PROPERTY-BASED TESTS ELIXIR FROM ERLANG USE BOTH SHARE ON HEX BE NICE

Slide 50

Slide 50 text

@whatyouhide