$30 off During Our Annual Pro Sale. View Details »

ElixirRuhr.001: Good Tooling educates

ElixirRuhr.001: Good Tooling educates

Where are we in Elixir right now and what are the challenges faced by both newcomers and tool designers? This talk tries to answer these questions and advocates taking humans into account when designing even the nerdiest software tools.

René Föhring

February 11, 2016
Tweet

More Decks by René Föhring

Other Decks in Programming

Transcript

  1. Good Tooling Educates
    René Föhring // @rrrene

    View Slide

  2. @rrrene

    View Slide

  3. @rrrene
    (read in pirate voice)

    View Slide

  4. @rrrene
    (read in pirate voice)
    coding @ .
    teacher ∙ researcher
    (insert more self-description here)

    View Slide

  5. @rrrene
    creator of Credo
    running ElixirStatus / Inch CI

    View Slide

  6. Where are we now?

    View Slide

  7. Elixir’s recent rise from “totally unknown” to
    “still definitely unknown but mentioned in
    hushed tones” [...]
    Clark Kampfe in “Elixir is not Ruby”
    https://zeroclarkthirty.com/2015-11-01-elixir-is-not-ruby.html

    View Slide

  8. What‘s the „newcomer experience“ like?

    View Slide

  9. GREAT FOUNDATION
    elixirc
    mix
    Hex
    Ecto
    Phoenix

    View Slide

  10. GREAT FOUNDATION
    elixirc
    mix
    Hex
    Ecto
    Phoenix
    is Rails 5
    https://medium.com/infinite-red/phoenix-is-rails-5-f6d28e57395

    View Slide

  11. Markdown parser: yes
    HTML Sanitizer: no

    View Slide

  12. Talk is cheap, contribution is king!

    View Slide

  13. View Slide

  14. View Slide

  15. (╯°□°)╯︵ ┻━┻
    It’s the same!

    View Slide

  16. 1 def get_item_if_member(filenames, item) do
    2 if Enum.member?(filenames,
    _____"/home/rene/projects/credo/lib/credo.ex") do
    3 item
    4 |> IO.inspect
    5 end
    6 end

    View Slide

  17. 1 def get_item_if_member(filenames, item) do
    2 if Enum.member?(filenames,
    _____"/home/rene/projects/credo/lib/credo.ex") do
    3 item
    4 |> IO.inspect
    5 end
    6 end

    View Slide

  18. 1 def get_item_if_member(filenames, item) do
    2 if Enum.member?(filenames,
    _____"/home/rene/projects/credo/lib/credo.ex") do
    3 item
    4 |> IO.inspect
    5 end
    6 end

    View Slide

  19. SEMANTIC CATEGORIES
    readability
    software design
    refactoring opportunities
    consistency
    warnings

    View Slide

  20. 1 defmodule ElixirRuhr do
    2 @github_url "https://github.com/"
    3 end
    4
    5 defmodule ElixirRuhr2 do
    6 @githubURL "https://github.com/"
    7 end

    View Slide

  21. DYNAMIC PRIORITIES
    higher
    high
    normal
    low
    ignore

    View Slide

  22. issues ordered by priority
    20
    12
    11
    6
    5
    1
    -1
    -2
    -2
    -10
    -11
    -100

    View Slide

  23. issues ordered by priority
    20
    12
    11
    6
    5
    1
    -1
    -2
    -2
    -10
    -11
    -100
    (normal)

    View Slide

  24. issues ordered by priority
    20
    12
    11
    6
    5
    1
    -1
    -2
    -2
    -10
    -11
    -100
    (strict)

    View Slide

  25. Consistency Checks

    View Slide

  26. # preferred way - common suffix Error
    defmodule BadHTTPHeaderError do
    defexception [:message]
    end
    defmodule UserRequestError do
    defexception [:message]
    end

    View Slide

  27. # also okay - common suffix Exception
    defmodule BadHTTPHeaderException do
    defexception [:message]
    end
    defmodule UserRequestException do
    defexception [:message]
    end

    View Slide

  28. # also okay - consistent *prefix* Invalid
    defmodule InvalidHTTPHeader do
    defexception [:message]
    end
    defmodule InvalidUserRequest do
    defexception [:message]
    end

    View Slide

  29. # bad
    # there is no common naming scheme for exceptions
    defmodule InvalidHeader do
    defexception [:message]
    end
    defmodule UserRequestFailed do
    defexception [:message]
    end

    View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. END-OF-TALK
    # Credo – Static code analysis
    https://github.com/rrrene/credo
    # Bunt – 256 colors for your CLI
    https://github.com/rrrene/bunt
    # @rrrene‘s personal blog
    http://trivelop.de

    View Slide