Elixir Blog Posts

I implemented the Random Cut Forest anomaly detection algorithm in Elixir this weekend, using Nx and ExZipper. There’s definitely a lot of room for optimizing performance (in Elixir or through a NIF), but I was impressed with how easy it was to work with Nx tensors and recreate results from the research paper.

There’s a livebook in the post, in case anyone wants to run it at home!

1 Like

How can we avoid runtime exceptions when using mocks and behaviors? With a little bit of compile time config. Read more:

This post was made possibly only with special help from @benwilson512 - Thank you Ben!

2 Likes

I made a flow chart illustrating the LiveView life cycle :slight_smile:

If you want to get the mermaid diagram code to modify for any reason, it’s available at:

4 Likes

Wrote a blog post about how to customise the phx.new generator to include Oban (just an example and you can apply the same principles for any other changes to the generator).

6 Likes

You could add a box for patching to the current liveview.

1 Like

I wrote a blog post on how I built an MVP (using Elixir/Phoenix/LiveView) in 3 months whilst having a full time job. :slight_smile:

3 Likes

That’s a good call. I updated it to this, but I don’t know if I love the placement.

patch isn’t quite a callback, it’s the result of a callback. But it can also happen from the client with <.link> navigation, so I put it on Continuous Connection.

1 Like

In Postgres, if you search for users named “Jose”, you would expect to see our beloved José, no?

You won’t.

You first need to “unaccent” words with special characters for this to work.

This post explains how :point_down::point_down::point_down:

3 Likes

I’ve seen a lot of people express interest in Machine Learning in Elixir but were unsure of what the ecosystem has to offer, so I wrote a blog post to go over most of the prominent Elixir ML libraries and relate then to their Python alternatives. It includes a nice table at the bottom for quick reference. I even go into a bit of history of the ML development since I find it quite interesting how it sprung up.

1 Like

:rotating_light: New Blog Post Alarm :rotating_light:

Learn how to animate a side drawer using LiveView.JS

4 Likes

New Blog Post

An Opinionated Way of Organizing GraphQL APIs using Absinthe and Phoenix

Hope this helps!

2 Likes

My first Elixir blog in English!

https://json.media/blog/en/how_elixir_became_a_mature_language_in_less_than_10_years

4 Likes

please please don’t make it 2.0 yet! I’m still in the learning phase with the language itself! too overwhelming! :scream_cat:

1 Like

If you need i18n or i10n in an Elixir project you’ll most likely use Gettext.

The provided macros and functions have their own benefits and downsides. But there is a way to combine them and get the best of both worlds.

I was recently looking at a front-end video by FreeCodeCamp where they introduced the site https://codewars.com. I was surprised to see that they had some Elixir problems, but this post is not about one you can solve using Elixir on that site (at least not yet). Instead, it is about a JavaScript problem on that site that I had difficulty translating into Elixir code. This is because the problem (or, at the very least, the naive solution) requires in-place modification of a few variables within a loop. If you would like to see the problem, its statement, and how I came up with a naive Elixir solution using ETS tables, feel free to check it out here: https://danieljaouendevelopment.com/2023/09/09/elixir-codewars-problem/

Thanks for reading!

As a side note, I have been using GitHub Copilot for a few months now and am amazed at how well it knows how to extend my code. I was typing up the solution not using ETS a moment ago, and it knew to filter out the nils from my Enum.with_index. Amazing!

Interesting that you consider using ETS the naive solution. I would use recursion or reduce for this type of thing.

3 Likes

I think ETS is a serious overcomplication. It should be possible to solve it in a go with Enum.scan. Nice post though!

2 Likes

I tried to solve it with parsing combinators in another language and I like how simple it came out to be. Sadly I’m not accustomed with NimbleParsec’s API so if anyone could post an Elixir solution with parsing combinators it would be awesome.

1 Like

Interesting post, and thanks for sharing.

Although, I think the normal “naive” way to do this in Elixir would be to use a function from Enum module, or plain recursive functions like

defmodule Challenge do
  def solution(string) do
    squeeze(string, [])
  end
  
  defp squeeze(<<>>, acc), do: Enum.reverse(acc)
  defp squeeze(<<c, rest::binary>>, [c | _] = acc), do: squeeze(rest, acc)
  defp squeeze(<<c, rest::binary>>, acc), do: squeeze(rest, [c | acc])
end
1 Like