Decoding Dialyzer - part 1
I decided to start a new series about better understanding Dialyzer. The first post in the series goes through understanding the no_return
and call
warnings.
Hey Process, there is a Message for you!
Hey Process, there is a Message for you!
Messages are a fundamental part of concurrency in Elixir. In this article I introduce how messaging between processes works. We play with simple examples to see how a process sends and receives messages.
Elixir Umbrella Applications and Testing with Mox
I’ve written a post about umbrella applications and testing with Mox. Check it out at: https://simplabs.com/blog/2019/03/13/elixir-umbrella-mox.html
Test Suite as a Complexity Measuring Tool
In this post, I want to discuss how to measure our module’s external complexity with our test suite.
To demonstrate that:
- I used StreamData to write a property-based test for a Fibonacci function.
- I wrote two different implementations for the Fibonacci function, to explain the differences between internal and external complexity.
Finally, I reached a conclusion that different test styles are just different perspectives of understanding our code, and this idea aligns with the idea of complexity measurement pretty well.
https://dsdshcym.github.io/blog/2019/03/12/test-suite-as-a-complexity-measuring-tool/
Elixir's If and Elixir's Do
I saw a single line of if
statement in Elixir and it excited me enough to write an article about it.
Cool CLIs in Elixir (part 2) with IO.ANSI
After writing about how to use IO.write/2 to build cool command line interfaces, I decided to follow it up with a post about IO.ANSI. We walk through working with color, cursor movement, and covering the entire terminal.
https://dennisbeatty.com/2019/03/12/cool-clis-in-elixir-part-2-with-io-ansi.html
ElixirMix Podcast 042 - Updates on ExVenture with Eric Oestrich
In this episode of ElixirMix, the panel catches up with Eric Oestrich about his ExVenture project. We talk about instrumenting Elixir applications for Prometheus, Elixir and CI solutions, his live coding on twitch.tv, letting Elixir talk to Ruby and Python, and much more!
EnvHelper 0.1.0 released, now without warnings!
EnvHelper is a convenience library for working with application and environment variables. Thanks to a pull request from Tony Walker, a lot of compiler warnings just went away for Elixir 1.5+.
Ack With Ease
Ack
→ the tiny drop-in package to enable ACK functionality in your Elixir microservice intercommunication.
Here is the article on What? Why? Why not?.
Testing with Mock Processes in Elixir
Recently at SmartLogic and in my side projects, I’ve wanted to test code that interacts with processes. This post covers what I came up with after listening to an episode of Elixir Mix and toying around with a better way to test my code.
https://blog.smartlogic.io/testing-against-processes-in-elixir/
Playing with FFmpeg C code in Elixir
using NIFs to segfault the BEAM
-
erl_nif
- reductions
- dirty schedulers
-
rustler
- and more!
Exenv - Dynamically Load Env Vars
Exenv provides an adapter-based approach to dynamically loading environment variables from external sources.
Features include:
-
Adapters for both
.env
and.yml
files. - Makes loading env vars based on your app environment easy.
-
No need to
source
env files all the time.
Lonestar ElixirConf 2019 Lunchisode
We sat down with numerous developers, including José Valim and Chris McCord, during the Saturday lunch at Lonestar ElixirConf 2019. Hear what they had to say about the state of Elixir!
Free Episode on Elixir Agents
In this episode I discuss the Basics of Agents. I talk about when / why you should use Agents over GenServer
https://www.codemy.net/posts/elixir-agent-basics-016/sets/elixir-foundation
IntelliJ Elixir v10.3.0
-
Add Type Specifications to Dbgi tab for :elixir_erl backend for
.beam
files. -
Cache all computed Elixir levels at the file, module, project, and SDK levels. The computed Elixir level is used to determine how to emulate the various grammar changes made for the different Elixir versions. This bug was potentially introduced as earlier asv7.0.0 (2017-12-15) and as late as v7.5.0 (2018-06-03) as that’s the history for
LevelPropertyPusher.java
and has affected all later versions. If you ever experienced the 6.X series as faster than the 7.X series and later, this bug may be why and you should upgrade/reinstall immediately.
Que v0.9 released! 🎉
Que v0.9 brings massive improvements to the performance and reliability of job workers, especially under high load / concurrency. 🎉🎉🎉
<img src=”https://i.imgur.com/Eec71eh.png” alt=”Que” width=”100px”>
Que is a simple background job processing library for Elixir that’s backed by Mnesia for storage. That makes it fast, reliable and still super easy to use without depending on any external services like Redis. 🙌
Using Control Flow in Elixir to Improve Discoverability
Code is read many more times than it is written, so it is important to us that our code is understandable. Here are a couple of guidelines we tend to follow in order to boost the discoverability and convey purpose to the reader.
QuickFormat for running the formatter without BEAM startup
I made https://github.com/obrok/quick_format for my own usage when formatting on save in Vim, because the latency was getting to me. It’s a little rough around the edges, but maybe someone will find it of use.