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.

Faf649a95c7b996e7b7071f85277b3e2?s=128

René Föhring

February 11, 2016
Tweet

Transcript

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

  2. @rrrene

  3. @rrrene (read in pirate voice)

  4. @rrrene (read in pirate voice) coding @ . teacher ∙

    researcher (insert more self-description here)
  5. @rrrene creator of Credo running ElixirStatus / Inch CI

  6. Where are we now?

  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
  8. What‘s the „newcomer experience“ like?

  9. GREAT FOUNDATION elixirc mix Hex Ecto Phoenix

  10. GREAT FOUNDATION elixirc mix Hex Ecto Phoenix is Rails 5

    https://medium.com/infinite-red/phoenix-is-rails-5-f6d28e57395
  11. Markdown parser: yes HTML Sanitizer: no

  12. Talk is cheap, contribution is king!

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

  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
  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
  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
  19. SEMANTIC CATEGORIES readability software design refactoring opportunities consistency warnings

  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
  21. DYNAMIC PRIORITIES higher high normal low ignore

  22. issues ordered by priority 20 12 11 6 5 1

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

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

    -1 -2 -2 -10 -11 -100 (strict)
  25. Consistency Checks

  26. # preferred way - common suffix Error defmodule BadHTTPHeaderError do

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

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

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

    exceptions defmodule InvalidHeader do defexception [:message] end defmodule UserRequestFailed do defexception [:message] end
  30. None
  31. None
  32. None
  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