Skip to content

Summer release

Choose a tag to compare

@a-maze-d a-maze-d released this 24 Jul 17:33
· 129 commits to main since this release

Caution

Several BC breaking changes are in this version, but most of them shouldn't impact the user of the DSL. You might be
impacted if you work with more lower level APIs (like some of the livebooks do and therefore required small adjustments.

  • the parameters of Leds.set_led_strip_info/3 are around, so it's more consistent
  • added a count to the set_leds (and set_leds_with_rotation) to optimize the call. It's allowed to be nil
  • the animation type is now mandatory
  • renamed several functions
  • several functions got moved to other modules or deleted

It should be rather obvious which changes will break compatibility and it should be clear on how to fix it

Intro

In this a lot of things have changed to improve the stability and the quality of the code. The whole system now hangs in a supervision tree and processes get restarted if they start to fail for some reason. There are still some more changes expected but the biggest junk is done, so it's time for this summer release.

Note: The expected changes in the Effects did not happen in this version, this is on the plan for the next version as part of the further improvements of the Coordinator

What's new?

Features

  • started all the processes in a Supervisor tree:
    • Built the AnimationSystem supervisor with Animation.Manager, LedStrips, Animation.JobScheduler, ...
    • Attached the Animation.Animator and Animation.Coordinator to the LedStrip
    • provided the possibility to specify a :supervisor option in the use Fledex call
    • Note: more smaller changes are expected in the next version, like introducing a stop_xyz to the supervisors, move the job scheduler to the LedStrip, ...
  • removed the dependency from Animator onto the Leds.send function. We introduced a LedStrip.set_leds_with_rotation function.
  • Animation.Animator options are now allowed to be nil
  • added a :log_level parameter to use Fledex because the Fledex config might not be read if not started as an application. The default is to only log info levels and above

Docs

  • big overhaul and restructuring of the documentation.
  • added more documentation (@moduledoc, @typedoc, @doc) and improvement of livebooks
  • added more livebooks for school presentation (in German, WIP)
  • started to write some documentation for the coordinator (WIP)
  • started using a modified ex_doc version to get the documentation working as desired (see elixir-lang/ex_doc#2118 for details)
  • added favicon and logo to the documentation

Tests

  • added more negative tests (especially related to the supervisor tree)
  • simplified some tests (a result of introducing the supervisor tree)
  • improved the stability of the tests

Builds

  • added support for Elixir 1.18
    • small refactoring how the colors are stored that avoid the failing compilation (due to too expensive color compilation)
    • fixed some warnings that are emitted by the Elixir 1.18 compiler
  • decided on the versions to support and test for.
  • updated dependencies
  • added scorecard analysis
  • added OpenSSF Best Practices
  • reduced the compile time dependencies

Bugs

  • corrected some copyright notices (they had the wrong year)

Cleanups

  • renamed shutdown functions to stop to be consistent
  • moved several files/functions/... around and removed unnecessary stuff
  • moved functions around so there is more consistency
  • improved the @specs
    • added them wherever they were missing
    • simplified them by introducing new types
    • corrected them where erroneous (dialyzer does not report any issues anymore)
    • renamed them (like Manager.configs_t to Manager.config_t)
  • moved all TODOs into the TODO.md file. Thereby, Credo now reports as found no issues
  • cleaned up the IO.puts and replaced them with Logger entries where necessary. Especially logging process start and shutdown
  • removed unused code
  • removed the optional qualifier from the type spec where they are required
  • breaking out the utility functions used in components
  • fixing the component interface that any manager config is valid (not just animations)
  • getting rid of the AnimatorBase and the AnimatorInterface (they weren't necessary and made things more complicated than necessary)
  • made the animation type mandatory. The use of a default made things more fragile.

Final words

For the next release, as partially mentioned above, I'm looking at:

  • further improvements and documentation for the Coordinator, including the changes on the Effects.
  • improving the documentation for the school material
  • improving the Supervisor tree (to get the JobScheduler as a part of the LedStrip (and maybe exchange Quantum for another library, maybe even one with millisecond precision?)
  • And maybe, but only maybe, provide support for other led strips (like WS2812, WS2813, WS2815, ... which are all working the same way)

And now I wish you a nice summer and a lot of fun!