CharlesIrvine

CharlesIrvine

Most Liked

CharlesIrvine

CharlesIrvine

Announcing the release of Mozart 1.0.0.

New:

  • Process notes can be added to processes.
  • Promotion to version 1.0.0

Current State:

  1. Mozart is now feature complete, at least minimally.
  2. Development priority will be given to new GitHub reported issues.
  3. Opera - Mozart POC GUI has been updated with additional sample BPM models.

It’s time for me to start looking for Elixir development work. Please let me know if you know of a position I might be suited for. Either permanent or contract is fine. The location either needs to be the Kansas City metro or remote.

Go Chiefs!!

CharlesIrvine

CharlesIrvine

I am pleased to announce version 0.3.0 of Mozart - an Elixir BPM platform.

The really big new feature is a DSL for defining business process applications. Elixir developers can develop BPM applications just by writing Elixir code. No external tools are required. I don’t believe this is currently possible with any other programming language.

Here is a relevant excerpt from the project readme filed:

===========================================================

Two Features Made Possible by Elixir

A Domain Specific Language (DSL) for BPM Applications

Elixir provides programmers with the ability to seemingly extend Elixir itself by creating domain specific programming idioms.

In the case of Mozart, this means that programmers can create BPM applications by using BPM specific programming constructs mixed with otherwise everyday Elixir code. Here a very simple but complete example:

defmodule MyBpmApplication do
  use Mozart.BpmProcess

  def sum(data) do
    %{sum: data.x + data.y}
  end

  defprocess "add x and y process" do
    service_task("add x and y task", function: &MyBpmApplication.sum/1, inputs: "x,y")
  end

end

This module can be used as-is to start and execute a BPM process engine as shown below. (A small quanity of system output was removed to improve clarity.)

iex > ProcessService.load_process_models(MyBpmApplication.get_processes())
iex > {:ok, ppid, uid, _key} = ProcessEntine.start_process("add x and y process", %{x: 1, y: 1})
[info] Start process instance [add x and y process][b82f5da1-6e5d-44df-b4ed-9064b877e484]

iex > ProcessEngine.execute(ppid)
[info] New service task instance [add x and y task][f396a252-fba4-4804-9fdd-360a6c24ed54]
[info] Complete service task [add x and y task[f396a252-fba4-4804-9fdd-360a6c24ed54]
[info] Process complete [add x and y process][b82f5da1-6e5d-44df-b4ed-9064b877e484]

iex > ProcessService.get_completed_process_data(uid)
%{sum: 2, y: 1, x: 1}

Conversely, with Mazart, process models are not graphically constructed using a visual programming environment typical of most of current BPM development. We believe that this kind of development is avoided by a substantial segment of the software development community and in some instances is not condusive to CI/CD developmemnt processes.

However, visual BPM modelling tools are highly regarded by business process analysts and the resulting graphical process depictions are highly readable by developers and process analysts alike. So, it was essential that the DSL developed produce process models that are as readily understood by process analysts as are BPMN2 process models. We hope you will think we have been reasonably successful achieving this goal.

We anticipate that BPMN2 tools will still be used by Mozart development teams, but only for analysis and documentation. Actual BPM process models will be created with the Mozart BPM DSL.

A Process for Each Business Process

Another distinguishing feature is that each business process model is executed in a separate Elixir process (GenServer) instance. This is possible due to Elixir’s (and Erlang’s) unique capacity for highly performant, fault tolerant and massively concurrent multi-processing.

The goal is extremely fast and relable business process model execution. We will be publishing performance metics in the near future to gage Mozart’s performance charateristics. Initial results look very promising.

===========================================================

Any feedback will be appreciated.

CharlesIrvine

CharlesIrvine

Status Update

Currently at version 0.4.3, Mozart is now functionality-complete. I don’t anticipate making any breaking changes in the near future. I will address any bug reports or small enhancements opened GitHub.

Mozart can be used now for service orchestration. If you Google for service orchestration BPM you will find numerous articles on the subject. Here is an interesting one.

You could also use Mozart for business processes with people in the loop, but only if you develop an end-user GUI for doing so. This is actually a common practice with the well known Camunda BPM platform.

For now, I’m going to shift my efforts to implementing an end-user Phoenix LiveView POC for starting processes and completing open user tasks.

CharlesIrvine

CharlesIrvine

Ok. Thanks for providing the background. It sounds like you are very well versed in BPM.

As it stands right now, I really don’t know how Mozart performs relative to Appian, IBM BPM, Camunda, etc. I haven’t done any kind of serious performance testing. Also, I haven’t focused on performance and it’s likely that several things could be much more performant than they are. Performance testing is on my todo list but I’m more interested in adding additional functionality at the moment.

The main reason I created Mozart is that I personally don’t prefer creating process models graphically using BPMN2 modeling tools. These are essentially, in my opinion, visual programming tools - something that I have never liked.

With the input of some on this forum, I started thinking how I might create a DSL for business process model creation using Elixir metaprogramming and decided to dive in.

If you haven’t already, you might glance at the Mozart docs at:

https://hexdocs.pm/mozart/api-reference.html

Also, you might find Opera useful. At this point, its a very, very basic POC for showing how Mozart might be used to create BPM related GUIs. You are welcome to experiment with an instance of it deployed to fly.io at:

https://opera-holy-bush-2296.fly.dev/

CharlesIrvine

CharlesIrvine

Announcing the release of Mozart version 0.2.0.

From the project readme:

What is Business Process Management

See Introduction to BPM in hexdocs to get a basic understanding of Business Process Management (BPM).

Documentation

View documentation for Mozart in hexdocs at https://hexdocs.pm/mozart/api-reference.html

Introduction

Mozart is an open source BPM platform written using Elixir. Process models are defined using a set of Elixir structs providing a modelling language which is somewhat inspired by AWS Step Functions. See AWS Step Functions.

The most distinguishing feature of Mozart is that each business process model is executed in a GenServer instance, made possible by the well known character of Elixir (and Erlang) multi-processing.

Another important feature is that process models are not graphically constructed using BPMN2. Instead, they are textually represented by struct based Elxir data structures. This makes BPM, hopefully, just another tool in the software developers toolkit.

Current Use Cases (and Non Use Cases)

  • Elixir development teams wanting to explore and potentially implement exploratory BPM applications.
  • Non Elixir development teams having the goal of exploring and experimenting with Elixir.
  • Mozart is not ready for major enterprise BPM projects.
  • Mozart is not a low code or no code platform suitable for non developers.

Where Next?

Popular in Libraries Top

markmark206
simple_feature_flags is a tiny package that lets you turn features on or off based on which environment (e.g. localhost, staging, product...
New
Qqwy
TypeCheck: Fast and flexible runtime type-checking for your Elixir projects. Core ideas Type- and function specifications are const...
336 13801 100
New
kip
Image is an image processing library for Elixir. It is based upon the fabulous vix library that provides a libvips wrapper for Elixir. I...
574 16576 179
New
pkrawat1
Hey guyz We at @aviabird are working on a payment library in elixir/phoenix. We are targeting March 2018 to add 56 Gateways to it. Have...
New
nikokozak
Hello all, I’ve been working on Svonix - a library for quickly integrating Svelte components into Phoenix views. It’s a much-needed succ...
New
tmbb
I’ve published the first version of my Makeup library. It’s a syntax highlighter for Elixir in the spirit of Pygments, Currently it highl...
New
MRdotB
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
Jskalc
Hi! Today, after a couple weeks of development I’ve released v0.1 of LiveVue. It’s a seamless integration of Vue and Phoenix LiveView, i...
New
handnot2
Samly can be used to enable SAML 2.0 Single Sign On in a Plug/Phoenix application. This library uses Erlang esaml to provide plug enabl...
New
mplatts
With HEEX released we decided to start a components library using Tailwind CSS - check it out here: Petal Components. We also have a boi...
New

Other popular topics Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
yurko
Here are few pieces of (common) Linux knowledge that we use for reasonably small one server apps. We use Ubuntu but this should work for ...
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> someth...
New

Sub Categories:

We're in Beta

About us Mission Statement