Skip to content

Instantly share code, notes, and snippets.

@ZachParsons
Last active October 29, 2023 09:05
Show Gist options
  • Save ZachParsons/5bce454270b5aa94a6c5e6dbe4ed0003 to your computer and use it in GitHub Desktop.
Save ZachParsons/5bce454270b5aa94a6c5e6dbe4ed0003 to your computer and use it in GitHub Desktop.
Elixir Resources

General

Offical learning resources
Elixir School
Visualizations of Elixir functions


Books

foundational
Thomas. 2018. Programming Elixir
McCord, Tate, Valim. 2019. Programming Phoenix

intermediate
Juric. 2018. Elixir in Action
Lessel. 2018. Phoenix in Action

more: Elixir Books


Tutorials

ElixirSips (280+ videos)
Alchemist Camp (130+ videos)
ElixirCasts (120+ videos)
Elixir for Programmers (8hrs video)
Pragmatic Studio: Elixir & OTP (6hrs video), Phoenix LiveView (6hrs video)
Clean Coders: Elixir (9hrs video)


Exercises

30 Days of Elixir (30 exercises)
CodeWars.com (395 exercises)
Exercism.io (94 exercises)


Libraries

Besides the bundled ones
ExUnit
Mix
Logger
Ecto
Plug

I use these frequently
static analyzer: Credo
type-checking: Dialyxir, Dialyzer
http client: Tesla, Finch
html parsing, web-scraping: Floki
json: Jason
csv: NimbleCSV
benchmarking: Benchee
math: Erlang's math module, Decimal
cryptography: Erlang's crypto module
datetime: Timex
auth: Pow
AWS: ExAws
emailing: Bamboo
test coverage: ExCoveralls
mocking: Mox
property-based testing: StreamData
end-to-end testing: Wallaby
job queueing, scheduling: Oban
cron-like job scheduling: Quantum
data processing: Broadway, Flow
monitoring & metrics: Telemetry, Prometheus
event sourcing: Commanded
realtime user interaction: LiveView
PaaS: Gigalixir

more: Awesome Elixir


Debugging

  1. TDD: mix test <path>:<line> --trace
  2. interactive shell: iex for running smaller blocks, also its commands i & h;
    iex -S mix phx.server then importing & calling functions, queries, requests, etc.
  3. binding() |> IO.inspect(label: "#{__MODULE__}:#{__ENV__.line}") dbg/2.
  4. Process.info(self(), :current_stacktrace) |> IO.inspect()
  5. require IEx; IEx.pry()
  6. from Ecto query to SQL string: Repo.to_sql(:all, query) |> elem(0) |> IO.puts()
  7. Code Runner for running larger blocks
  8. VSCode debugger's breakpoints
  9. mix xref: mix xref graph --format dot then (with graphviz installed) dot -Tpdf xref_graph.dot -o xref_graph.pdf

Conventions

Style Guide
Code smells


VSCode Extensions

ElixirLS
Elixir snippets
Code Runner
BEAMdasm


Forums

Elixir Forum
StackOverflow


Tech talks

Erlang Solutions

Confs

ElixirConf
Code Sync
EmpEx
Confreaks
GOTO

Meetups

ChicagoElixir
Elixir LA


People to follow (on GitHub, tech talks, Elixir Forum, Twitter, ...)

Elixir org
Phoenix org

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment