Email or username:

Password:

Forgot your password?
10 posts total
Aleksei Matiushkin

Solo is the new yet another library to manage a singleton across a BEAM cluster with zero downtime and VM brutal crash support.

Reimplementing failover/takeover for ECS has not turned into a cakewalk, unexpectedly. Existing libraries for singletons I managed to find out were not able to handle brutal VM/process crashes. I thought implementing it properly would take an hour, and apparently, it lasted almost 8 hours.

Welcome Solo which is a robust singleton implementation across a cluster. The usage is as easy as wrapping several specs in the supervision tree into Solo.global/2 call. Enjoy.

Solo is the new yet another library to manage a singleton across a BEAM cluster with zero downtime and VM brutal crash support.

Reimplementing failover/takeover for ECS has not turned into a cakewalk, unexpectedly. Existing libraries for singletons I managed to find out were not able to handle brutal VM/process crashes. I thought implementing it properly would take an hour, and apparently, it lasted almost 8 hours.

Aleksei Matiushkin

Rambla is published with:

▹ full support of asynchronous guaranteed message delivery to Rabbit, Redis, S3, HTTP, SMTP + custom plugins ▹ infrastructure to ease testing on any granularity level (the target service mocks vs. on_publish/3 mocks) ▹ based on Finitomata.Pool to ensure the delivery. Channels allow publishing to several destinations at once (as per configuration.)

Aleksei Matiushkin

I am proud to finally introduce fully distributed, zero-effort scalable FSM aka Finitomata implementation. With Infinitomata being a drop-in replacement of Finitomata, one might scale the processes running FSM by adding nodes to the cluster. Technically, every process might be easily converted to FSM, making it drastically easy to scale without any effort (well, almost :)

https://elixirforum.com/t/finitomata-fsm-boilerplate-based-on-callbacks/46933/7?u=mudasobwa

Aleksei Matiushkin

I have the strongest opinion, that library authors must provide the Test API alongside the Code API.

The OSS library authors must supply the framework to make testing external code that uses their library a charm.

That’s how my library Finitomata talks to the code users who have not figured out yet how to use the testing framework shipped with Finitomata.

Screenshot of compilation error saying what the issue is and suggesting how to fix it.

== Compilation error in file test/finitomata/ex_unit_test.exs ==
** (Finitomata.TestTransitionError)     error: clauses in a call to `assert_transition/5` must be either `:ok`, or `payload.inner.struct ~> match`, given:
    
    │
 67 │ IO.inspect(42)
    │ ⇑ unexpected clause
    │
    └─ test/finitomata/ex_unit_test.exs:68:1
  💡 If you do not want to validate anything after entering some states, use `:state -> :ok` clause.

    (finitomata 0.14.6) lib/finitomata/test/ex_unit.ex:284: anonymous fn/3 in Finitomata.ExUnit.do_assert_transition/6
…
Aleksei Matiushkin
What I hate in OTP is the application might have been rotting from an exorbitant load, crashing processes and failing in all possible ways, and still your metrics would look like “it’s slightly slower than yesterday.”
Aleksei Matiushkin

On a scale from
On Error Resume Next
to
if _, err := f(); err != nil {}
how ugly your error handling is?

Aleksei Matiushkin
In case somebody is not aware, Brave browser has this speedreader feature and it’s absolutely amazing.

https://support.brave.com/hc/en-us/articles/360045031392-What-is-Speedreader-
Aleksei Matiushkin

I have created a helper for working with MapSet.

import MapSetEx
now = DateTime.utc_now()

checker = fn 
  mapset when is_empty_mapset(mapset) -> :empty_mapset
  mapset when mapset_size(mapset) == 3 -> :mapset_with_three_elements
  mapset([^now]) -> :now_mapset
  %MapSet{} -> :mapset 
  _ -> :unknown
end

checker.(MapSet.new([]))
#⇒      :empty_mapset
checker.(mapset([now]))
#⇒      :now_mapset

Gist: https://gist.github.com/am-kantox/03325197ff9608dfa83457dbe0d144e9

Go Up