Ecto and EctoSQL covers a lot of ground and its abstractions are interesting if a bit overwhelming sometimes.
Not having a lot of experience with ETS and the like… CubDB has resulted to be super useful, beautiful data store you can rely on, with easy to grasp query capabilities.
Norm is super fun to play with, it is a way to specify the “form” of your data so it can be validated at run-time. I have been learning a lot around “Design by Contract” thanks to it! Seeing the pros and cons compared against the static analysis tools (dialyxir, gradualixir) and methodologies (automated tests) we use on a language like elixir.
Decimal is great but it will probably come bundled with another library, like ex_money which might save you a lot of work if you ever need to handle different currencies. EEx for anything about “templating”.
I would love to play more with:
moebius, as an alternative to Ecto. It seems to have full-text-search query capabilities and document schemas out of the box
drab, I’m currently invested in learning LiveView but would love to check-out what I’m missing by not using this library.
witchcraft, as a bunch of really powerful operators I yet don’t really grasp.
@entone already mentioned a bunch. There’s a really vast ecosystem of “GenServer derivates” when you need anything related to “distribution” or “reliability”.
Nimble parsec is both amazing and incredibly mindbendingly hard to use the first few times. Also basically everyone gets it as a part of elixir, so, it’s probably hiding somewhere you don’t expect.
I stopped dead in my tracks while I was doing a hobby projects with NimbleParsec. I got some strange errors that previously defined parts of the parser can’t be found, fought for hours, and gave up.
Yeah I discovered a good pattern in nimble parsec is to fence your combinators with defparsecs set aside inside of if Mix.env == :test blocks and aggressively TDD them. This is a basic example where I discovered this pattern, in internal projects I use it even more.
Oddly no one mentioned the must-haves that get packaged with most things I build:. elixir_uuid, credo, dialyxir, licensor, ex_doc, ex_coveralls. I use httpoison for testing a lot, and when doing web dev (not a whole lot tbh) I use hound (some prefer wallaby)
Interesting! But how does it help? I wanted to fiddle with my parsers and test them in iex while nailing the exact combinations. Does it mean that I can’t do that and they can only be used while testing?
Obviously not I reckon so I’ll read more of your code.
Interesting list, bringing up two of my favorite packages that were not mentioned yet:
mox is great for tests and helping you build good abstractions for your application on top of pluggable behaviours
boundary I didn’t have the chance to use this one yet, but I’m eager to, and interested to see where this will get. It’s experimental at this point, but the idea is to help you manage your application internal module dependencies.
man, I forgot mox! It’s IMO the best solution if you need to mock an external service (like let’s say you shoot off a tweet or contact twilio or stripe).
I will say that figuring out how to use mox with elixir async tests is a learning curve, so don’t try too hard the first few times. Just use Mox in easy-mode, without async. Once you have the feel for basic programming in elixir and are ready to tackle some more difficult concepts, it’s time to take your mox and make it async.