call_end

    • chevron_right

      Ignite Realtime Blog: New releases for Tinder and Whack!

      news.movim.eu / PlanetJabber • 11 April • 1 minute

    The IgniteRealtime community is happy to announce releases for two of its projects! Both are for XMPP-libraries that we produce.

    Tinder is a Java based XMPP library, providing an implementation for XMPP stanzas and components. Tinder’s origins lie in code that’s shared between our Openfire and Whack implementations. The implementation that’s provided in Tinder hasn’t been written again from scratch. Instead, code has been moved from the original projects into Tinder, preserving al of the existing features and functionality.

    The v2.1.0 release of Tinder is a maintenance release. It updates various libraries that are used by Tinder, and removes deprecated, unused code. Tinder now requires Java 11 or later. The full list of changes in this release can be found in the release notes .

    Whack is a Java library that easily allows the creation of external components that follow the XEP-0114: Jabber Component Protocol. This library allows you to create server-sided components of your XMPP network that can run as stand-alone processes. That’s particularly useful when you are creating functionality for which scalability configuration differs from that of Openfire, or if you want to re-use your component for XMPP servers other than Openfire!

    The v3.0.0 release of Whack is a maintenance release. It improves reconnection logic (when connection to the XMPP server is lost), it no longer ships with an embedded webserver (that was old, unused, and was raising vulnerability warnings, and updates some libraries (such as Tinder) to more recent versions. The fulll list of chagnes in this release can be found in the release notes .

    We would love to hear from you! If you have any questions, please stop by our community forum or our live groupchat .

    For other release announcements and news follow us on Mastodon or X

    1 post - 1 participant

    Read full topic

    • chevron_right

      Erlang Solutions: Elixir for Business: 5 Ways It Transforms Your Processes

      news.movim.eu / PlanetJabber • 10 April • 2 minutes

    Elixir is a lightweight, high-performance programming language built on the Erlang virtual machine. It’s known for its simple syntax and efficient use of digital resources. But how does this translate to business benefits?

    Elixir is already powering companies like Discord and Pinterest. It helps businesses reduce costs, improve process efficiency, and speed up time to market.

    Here are five reasons why Elixir is a game-changer for your business.

    1. Cleaner Code, Faster Progress

    Elixir is designed for simplicity. Its clean syntax and functional style help developers write concise, readable code, with fewer bugs and less overhead.

    For teams, this means faster development cycles and smoother collaboration. For businesses, it means shorter time to market and reduced long-term maintenance costs, which is especially useful during talent shortages.

    Projects move faster when your team isn’t fighting complexity.

    2. Built-In Concurrency, Built-In Stability

    Concurrency – the ability to run multiple tasks at once -is essential for modern applications. Elixir handles this natively, thanks to the Erlang virtual machine it runs on.

    With Elixir, you can run millions of lightweight processes simultaneously . It’s ideal for:

    • Real-time systems (e.g., messaging, live data feeds)
    • Applications with high user demand
    • Businesses that can’t afford downtime

    Crucially, these processes run independently. If one fails, the rest carry on — making your application more resilient by design.

    3. Smarter Use of Resources

    Elixir is resource-efficient. As your infrastructure scales, Elixir adapts automatically using the processing power available.

    This has clear benefits:

    • No wasted server capacity
    • Better app performance on existing infrastructure
    • Lower hosting and scaling costs

    Your tech stack runs leaner and more efficiently, with fewer surprises at scale.

    4. Elixir means simple scalability

    Elixir was made for scalable systems. Its lightweight processes and distributed architecture allow your application to grow without rewriting core components.

    What sets it apart:

    • Seamless horizontal scaling across machines
    • High fault tolerance through process isolation
    • Built-in support for distributed systems

    This makes Elixir especially strong for digital products that need to scale quickly or support unpredictable usage.

    Take Bleacher Report . They switched from Ruby to Elixir and saw results:

    Bleacher report Elixir

    • Server count dropped from 150 to 8
    • The app now handles over 200 million push notifications a day
    • Performance improved, with far fewer bottlenecks

    All of this was achieved while reducing infrastructure overhead.

    Read the full case study here .

    Modern Tools for Modern Challenges

    Elixir isn’t just fast it’s current.

    It supports distributed teams, integrates with today’s tools, and works well alongside other languages and frameworks.

    It’s especially useful for:

    • Products that need to ship fast and scale cleanly
    • Teams juggling real-time features, analytics or event-driven systems
    • Organisations focused on reliability and long-term performance

    Unlike many programming languages, Elixir is both powerful and practical.

    To conclude

    Elixir helps teams move quickly, handle growth with ease, and build reliable systems without unnecessary complexity. For modern businesses building digital platforms, it’s a quiet powerhouse and a strong strategic choice.

    Want to learn more about Elixir? Explore the full “What is Elixir?” post .

    Want to discuss how Elixir can enhance your business performance? Get in touch with the team.

    The post Elixir for Business: 5 Ways It Transforms Your Processes appeared first on Erlang Solutions .

    • wifi_tethering open_in_new

      This post is public

      www.erlang-solutions.com /blog/5-ways-elixir-can-improve-business-performance/

    • chevron_right

      Gajim: Gajim 2.1.0

      news.movim.eu / PlanetJabber • 8 April • 1 minute

    This release brings an all-new activity feed and adds support for Message Displayed Synchronization across group chats. Thank you for all your contributions!

    What’s New

    Gajim 2.1 comes with a new page called ‘Activity feed’. Currently, it displays events around group chat invitations, contact requests, and updates. Clicking an event allows you to act on it (e.g. accept an invitation) A badge indicates new activities on the top left corner of Gajim’s window. This will be the central feed for all kinds of activities in the future (e.g. reactions, replies, mentions, message reminders).

    Activity feed in Gajim 2.1

    Activity feed in Gajim 2.1

    If you have more than one account enabled in Gajim, accounts will now be displayed inside a menu available at the bottom left corner of the window. A left click brings you to your account, while a right click allows your to set your status.

    Account and status selection in Gajim 2.1

    Account and status selection in Gajim 2.1

    When following large group chats across multiple devices, you’ve probably experienced this: You read all new messages on one device, and later you switch to another device, but all those messages you’ve already read are now shown as unread messages. Seeing if you have read messages on another device is now supported by Gajim through XEP-0490: Message Displayed Synchronization . This feature is also supported by Conversations on Android for example. Thanks @nicoco for contributing to this feature!

    A note for Windows users: At the time of writing, there are some issues with emoji rendering on Windows. That’s why there is no release of Gajim 2.1 for Windows yet. This issue should soon be resolved and we will post an update once Gajim 2.1 is released on Windows.

    More Changes

    • Status icon: Fixed showing menu correctly
    • Emoji chooser: Fixed segfault after choosing emoji, which occurred on some systems
    • Nickname: Fixed displaying published nickname correctly
    • Start chat: Added ‘Execute Command…’ menu item
    • Removed unread message confirmation dialog at shutdown

    And much more! Have a look at the changelog for a complete list.

    Gajim

    As always, don’t hesitate to contact us at gajim@conference.gajim.org or open an issue on our Gitlab .

    Support Gajim

    Gajim is free software developed by volunteers.
    If you like to support Gajim, please consider making a donation.

    Donate via Liberapay:

    liberapay-donate.svg

    • wifi_tethering open_in_new

      This post is public

      gajim.org /post/2025-04-08-gajim-2.1.0-released/

    • chevron_right

      The XMPP Standards Foundation: The XMPP Newsletter March 2025

      news.movim.eu / PlanetJabber • 5 April • 7 minutes

    XMPP Newsletter Banner

    XMPP Newsletter Banner

    Welcome to the XMPP Newsletter, great to have you here again! This issue covers the month of March 2025.

    Like this newsletter, many projects and their efforts in the XMPP community are a result of people’s voluntary work. If you are happy with the services and software you may be using, please consider saying thanks or help these projects! Interested in supporting the Newsletter team? Read more at the bottom .

    XSF Announcements

    The XMPP Standards Foundation published an Open Letter to urge Meta to adopt XMPP for messaging interoperability. It’s time for real interoperability. Let’s make it happen.

    XSF Membership

    If you are interested in joining the XMPP Standards Foundation as a member, please apply until May 18th, 2025, 00:00 UTC! .

    XSF Fiscal Hosting Projects

    The XSF offers fiscal hosting for XMPP projects. Please apply via Open Collective . For more information, see the announcement blog post . Current projects you can support:

    XMPP Events

    • XMPP Track at FOSSY : Call for proposals is open until April 28th 2025! Once again this year, the soprani.ca project is pleased to announce its annual offer for funding to the potential attendees who may be struggling with financial limitations, especially to those who would like to give an XMPP related talk. Please, join us at discuss@conference.soprani.ca , and don’t hesitate to ask for more information.
    • Berlin XMPP Meetup [DE / EN]: monthly meeting of XMPP enthusiasts in Berlin, every 2nd Wednesday of the month at 6pm local time.
    • XMPP Italian happy hour [IT]: monthly Italian XMPP web meeting, every third Monday of the month at 7:00 PM local time (online event, with web meeting mode and live streaming).
    • XMPP Sprint in Berlin : On Friday, 23rd, Saturday, 24th, and Sunday, 25th of May 2025.

    Talks

    XMPP Articles

    XMPP Software News

    XMPP Clients and Applications

    XMPP Servers

    • ProcessOne is pleased to announce the release of ejabberd 25.03 : a big release with new features and many improvements, as it comes three months and 180 commits after ejabberd 24.12.
    • Prosody IM is pleased to announce the release of version 13.0.0 , the new major release of the Prosody XMPP server. This release brings a wide range of improvements that make Prosody more secure, performant, and easier to manage than ever before. Read about all the details on the release changelog . As always, detailed download and install instructions are available on the download page for your convenience.

    XMPP Libraries & Tools

    Extensions and specifications

    The XMPP Standards Foundation develops extensions to XMPP in its XEP series in addition to XMPP RFCs . Developers and other standards experts from around the world collaborate on these extensions, developing new specifications for emerging practices, and refining existing ways of doing things. Proposed by anybody, the particularly successful ones end up as Final or Active - depending on their type - while others are carefully archived as Deferred. This life cycle is described in XEP-0001 , which contains the formal and canonical definitions for the types, states, and processes. Read more about the standards process . Communication around Standards and Extensions happens in the Standards Mailing List ( online archive ).

    Proposed

    The XEP development process starts by writing up an idea and submitting it to the XMPP Editor . Within two weeks, the Council decides whether to accept this proposal as an Experimental XEP.

    • No XEPs proposed this month.

    New

    • Version 0.1.0 of XEP-0503 (Server-side spaces).
      • Promoted to Experimental (XEP Editor: dg)

    Deferred

    If an experimental XEP is not updated for more than twelve months, it will be moved off Experimental to Deferred. If there is another update, it will put the XEP back onto Experimental.

    • No XEPs deferred this month.

    Updated

    • No XEPs updated this month.

    Last Call

    Last calls are issued once everyone seems satisfied with the current XEP status. After the Council decides whether the XEP seems ready, the XMPP Editor issues a Last Call for comments. The feedback gathered during the Last Call can help improve the XEP before returning it to the Council for advancement to Stable.

    • No Last Call this month.

    Stable

    • No XEPs moved to Stable this month.

    Deprecated

    • No XEPs deprecated this month.

    Rejected

    • No XEPs rejected this month.

    Spread the news

    Please share the news on other networks:

    Subscribe to the monthly XMPP newsletter
    Subscribe

    Also check out our RSS Feed !

    Looking for job offers or want to hire a professional consultant for your XMPP project? Visit our XMPP job board .

    Newsletter Contributors & Translations

    This is a community effort, and we would like to thank translators for their contributions. Volunteers and more languages are welcome! Translations of the XMPP Newsletter will be released here (with some delay):

    • English (original): xmpp.org
      • General contributors: Adrien Bourmault (neox), Alexander “PapaTutuWawa”, Arne, Benson Muite, cal0pteryx, emus, Federico, Gonzalo Raúl Nemmi, Jonas Stein, Kris “poVoq”, Licaon_Kter, Ludovic Bocquet, Mario Sabatino, melvo, MSavoritias (fae,ve), nicola, Schimon Zachary, Simone Canaletti, singpolyma, XSF iTeam
    • French: jabberfr.org and linuxfr.org
      • Translators: Adrien Bourmault (neox), alkino, anubis, Arkem, Benoît Sibaud, mathieui, nyco, Pierre Jarillon, Ppjet6, Ysabeau
    • Italian: notes.nicfab.eu
      • Translators: nicola
    • Spanish: xmpp.org
      • Translators: Gonzalo Raúl Nemmi
    • German: xmpp.org
      • Translators: Millesimus

    Help us to build the newsletter

    This XMPP Newsletter is produced collaboratively by the XMPP community. Each month’s newsletter issue is drafted in this simple pad . At the end of each month, the pad’s content is merged into the XSF GitHub repository . We are always happy to welcome contributors. Do not hesitate to join the discussion in our Comm-Team group chat (MUC) and thereby help us sustain this as a community effort. You have a project and want to spread the news? Please consider sharing your news or events here, and promote it to a large audience.

    Tasks we do on a regular basis:

    • gathering news in the XMPP universe
    • short summaries of news and events
    • summary of the monthly communication on extensions (XEPs)
    • review of the newsletter draft
    • preparation of media images
    • translations
    • communication via media accounts

    Unsubscribe from the XMPP Newsletter

    To unsubscribe from this list, please log in first . If you have not previously logged in, you may need to set up an account with the appropriate email address.

    License

    This newsletter is published under CC BY-SA license .

    • wifi_tethering open_in_new

      This post is public

      xmpp.org /2025/04/the-xmpp-newsletter-march-2025/

    • chevron_right

      Prosodical Thoughts: Prosody 13.0.1 released

      news.movim.eu / PlanetJabber • 3 April • 2 minutes

    We are pleased to announce a new minor release from our stable branch.

    As is the tradition with software, here is our first patch release following shortly behind our major 13.0.0 release announced a few weeks ago. It fixes some important bugs that were discovered after the release.

    Many thanks to everyone who reported issues and helped with testing the fixes for this release. We appreciate it!

    For those of you on 0.12.x who haven’t upgraded yet, skip 13.0.0 and jump straight to 13.0.1 if you can. It will be a smoother upgrade.

    A summary of changes in this release:

    Fixes and improvements

    • mod_admin_shell: Add debug:cert_index() command to aid debugging of automatic certificate selection
    • mod_tls: Enable Prosody’s certificate checking for incoming s2s connections (fixes #1916 : Impossible to override certificate verification policy in 13.0)
    • portmanager: Multiple fixes to use correct certificates for direct TLS ports (fixes #1915 )
    • net.server_epoll: Use correct connection timeout when initiating Direct TLS
    • mod_roster: Fix shell commands when a component is involved (fixes #1908 : error in prosodyctl shell roster attempting to subscribe a component)
    • mod_http_file_share: Explicitly reject all unsupported ranges
    • mod_http_file_share: Fix off by one in Range response
    • mod_admin_shell, prosodyctl shell: Report command failure when no password entered (fixes #1907 : prosodyctl adduser: unexpected account creation on password mismatch)

    Minor changes

    • mod_storage_sql: Drop legacy index without confirmation to ease upgrades
    • util.adminstream: Fix traceback on double-close (fixes #1913 : Prosody fails to completely stop while shell watch:log is active)
    • certmanager: Improve logging for all cases where certs are skipped
    • mod_tls: Collect full certificate chain validation information
    • mod_s2s: Fix error detection with newer versions of OpenSSL
    • portmanager: Add debug log message to state which certificate we end up using
    • prosodyctl check certs: Use correct hostname in warning message about HTTPS
    • prosodyctl check: Be more robust against invalid disco_items, and show warning
    • spec/tls: Add TLS/certificate integration tests
    • mod_http_file_share: Improve error reporting by using util.error more
    • core.storagemanager: Fix tests by removing an assert that upset luarocks
    • core.usermanager: Fix COMPAT layer for legacy is_admin() function
    • certmanager: Remove obsolete and verbose index log (replaced by shell command)
    • doap: Add XEP-0333, XEP-0334, XEP-0156 and mod_http_altconnect

    Download

    As usual, download instructions for many platforms can be found on our download page

    If you have any questions, comments or other issues with this release, let us know!

    • wifi_tethering open_in_new

      This post is public

      blog.prosody.im /prosody-13.0.1-released/

    • chevron_right

      XMPP Interop Testing: Enabling Tests

      news.movim.eu / PlanetJabber • 3 April • 1 minute

    Our project creates a framework that allows anyone to easily add XMPP standards compliance tests to the test phase of their build pipeline. Prior to our most recent release (version 1.5.0) a test execution would basically run all tests in the test suite. We provided an option to exclude certain tests, but in essence, the bulk of tests would execute.

    This behavior is generally preferable when testing an XMPP server implementation. A benefit of exclusion-based configuration is that tests that are newly added to the test suite will automatically be picked up, without requiring a configuration change.

    However, there are scenarios where it is desirable to execute only a specific set of tests, for example when:

    • testing of a server-sided component, that implements only one specification, or
    • testing a development branch in which changes are applied to only one feature.

    In those scenarios, having to disable all other tests is cumbersome.

    We have now made available a mechanism in which specific tests can be included . When you include tests, only the included tests are executed. These configuration is very similar to that of the exclusion of tests. You can find more information in our documentation on Selecting Tests .

    Please let us know if you like the new features. We’d love to hear from you!

    • chevron_right

      Erlang Solutions: Elixir Tutorials

      news.movim.eu / PlanetJabber • 3 April • 12 minutes

    Elixir is a functional language that combines modern syntax, broad metaprogramming capabilities and the power of BEAM – Erlang Virtual Machine. It has a vast community which is constantly growing due to its resilient concurrency model and programmer-friendly approach. Our tutorials are focused on showcasing language capabilities and helping any newcomer gain enough knowledge to start actively utilising Elixir in their projects.

    The basics of Elixir language

    In this section, we’ll have a quick look at the core properties of the language: syntax, language conventions and principles. This should allow any programmer to have an overview of what kind of language Elixir is.

    Syntax and conventions

    The tables below show the most essential syntax in comparison to Python:

    Data Types

    Elixir Python
    Numbers 4
    -2
    1_000_000
    2.3
    1.4e12

    4
    -2
    1_000_000
    2.3
    1.4e12
    Strings “Hello”
    “Interpolation: #{var}”
    ‘Hello’f’
    Interpolation: {var}’
    Booleans true
    false
    True
    False
    Lists [1, 2, 3] [1, 2, 3]
    Tuples {“banana”, 4} (‘banana’, 4)
    Maps %{“key” => “value”} {‘key’: ‘value’}

    Note: Elixir has a data type “atom” that does not have a direct equivalent in most of the programming languages. Atoms are constants whose values are also their names. They are denoted with a colon at the beginning, e.g. an_atom.

    Operators

    Elixir Python
    Arithmetic 1 + 2
    3.4 - 5.6
    7 * 8
    9.01 / 2.3
    div(8, 3)
    rem(8, 3)
    1 + 2
    3.4 - 5.6
    7 * 8
    9.01 / 2.3
    8 // 3
    8 % 3
    Logical true and false
    false or true
    not true
    True and False
    False or True
    not True
    Comparison 9 > 5
    1.2 < 2
    6 >= 6
    1 <= 6.5
    “Hello” == “Hello”
    “Hello” != “World”
    1 == 1.0
    1 === 1
    1 !== 1.0
    9 > 5
    1.2 < 2
    6 >= 6
    1 <= 6.5
    ‘Hello’ == ‘Hello’
    ‘Hello’ != ‘World’
    1 == 1.0
    String concatenation “Hello “ <> “World!” ‘Hello ‘ + ‘World!’
    List concatenation [1, 2, 3] ++ [4, 5, 6] [1, 2, 3] + [4, 5, 6]
    Variable assignment var = 42 var = 42

    Control Flow

    if/else if condition do
    “It is true”
    else
    “It is false”
    end
    if condition:
    ‘It is true’
    else:
    ‘It is false’
    case/match case status do
    200 -> “It is ok”
    400 -> “Bad request”
    _ -> “Unknown status”
    end

    match status:
    case 200:
    ‘It is ok’
    case 400:
    ‘Bad request’
    case _:
    ‘Unknown status’
    cond/elif cond do
    2 + 2 == 5 ->
    “False”
    2 * 2 == 5 ->
    “Also false”
    1 + 1 == 2 ->
    “This is true”
    end

    if 2 + 2 == 5:
    ‘False’
    elif 2 * 2 == 5:
    ‘Also false’
    elif 1 + 1 == 2:
    ‘This is true’
    comprehensions for i <- 0..9, do: i * 2 [i * 2 for i in range(10)]

    Functions

    Elixir Python
    defining functions def add(a, b) do
    a + b
    end

    def add(a, b):
    return a + b
    calling functions add(1, 2)
    or
    1 |> add(2)
    add(1, 2)
    anonymous functions add_fn = fn a, b -> a +
    b end
    add_fn.(1, 2)
    add_fn = lambda a, b:
    a + b
    add_fn(1, 2)

    Functional programming principles

    Functional programming is a paradigm that has a different set of core principles and rules than imperative programming or object-oriented programming. These are some of the principles that are the most relevant in Elixir:

    • First-Class Functions – Functions are treated as values, i.e. they can be assigned to variables, passed as an argument or returned from another function. In Elixir this is done by the capture operator & with the following syntax: &<function_name>/<function_arity> , e.g. &add/2
    • Immutability – Existing data is never modified; instead, each data transformation results in creating a new structure.
    • Higher-Level Abstractions – Operations on collections are done with higher-order functions like map, filter, reduce instead of explicitly looping over them. Elixir’s pipe operator |> allows to write elegant code in this manner, e.g.: list_of_ints |> Enum.filter(&is_even/1) |> Enum.map(fn a -> a * 2 end) |> Enum.sum()
    • Recursion and comprehension – There are no loops in Elixir, only recursion and comprehension. Using tail recursion can be optimized by the compiler to avoid generating big call stacks.
    • Pattern matching – Match operator = is more powerful than a simple assignment. It allows to match data with the same shape to get smaller parts of a complex data structure or choose a case clause/function head to match the argument, e. g. {id, “label”, value} = {123, “label”, 4.2} .

    Elixir’s ecosystem and tools

    Any programming language wouldn’t be useful in developing software without a comprehensive set of build tools, runtime tools, libraries and frameworks. Elixir has a rich ecosystem both created by the community and derived from Erlang Virtual Machine .

    Erlang VM called BEAM, is a powerful runtime environment that has been battle-tested for years and provides many essential foundations for developing software systems, such as a robust concurrency model, fault-tolerance mechanism, scalability and distribution, shell for development and debugging. Elang also has a set of basic abstractions for programmers called OTP to encapsulate runtime properties of a system like process creation and supervision.

    Elixir also has a vast choice of libraries to choose for creating your project:

    • Phoenix and Phoenix LiveView – web development
    • Ecto – data mapping and language integrated queries
    • Broadway – multi-stage data processing engine
    • Nx, Axon, Bumblebee – tensor calculations and ML
    • Livebook – interactive and collaborative notebooks

    You can learn more about Elixir’s ecosystem by reading our What is Elixir? post.

    Elixir language tutorial for beginners

    In this section, we’ll show how to install Elixir on your machine and write your first program.

    Installation guides across platforms

    • MacOS – run brew install elixir
    • Linux
      • Arch Linux – run pacman -S elixir
      • Debian/Ubuntu – run sudo add-apt-repository ppa:rabbitmq/rabbitmq-erlang && sudo apt update && sudo apt install elixir erlang-dev erlang-xmerl
      • Fedora – run sudo dnf --disablerepo=’*’ --enablerepo=rawhide install elixir elixir-doc erlang erlang-doc
    • Windows
      • Download and run the Erlang installer .
      • Download and run the Elixir installer compatible with your Erlang version from the previous step. The installer is available in the “Assets” list for each Elixir release, e.g.. elixir-otp-27.exe.

    Alternatively, you can use the asdf version manager to install both Erlang and Elixir. To check if you’ve installed Elixir successfully, run elixir --version in your terminal.

    Step-by-step development process

    For your first program, we’re going to use an Elixir script. The difference between a standard Elixir program and a script is that the latter is compiled in memory and executed right away in a single command. This is useful for learning and experimenting, and if you need a program to do a task and exit.

    1. Create a file hello_world.exs and open it in a text editor.

    2. Write this line in the file: IO.puts(“Hello World!”).

    a. IO is a module from a standard library that handles IO operations.

    b. puts is a function from this module that prints a string on standard output.

    3. Save your file.

    4. Open the terminal and go to the directory with the hello_world.exs file.

    5. Run your script with the following command: elixir hello_world.exs .

    Advanced Elixir programming tutorial

    In this section, we’ll showcase in a nutshell two more advanced topics that make Elixir stand out among other popular programming languages: the concurrency model based on message passing and how scalable and fault-tolerant systems are built in Elixir.

    Processes and message passing

    There are two main approaches to concurrent computing: shared memory and message passing. The first one processes exchange information by writing data into the same memory block. To keep order in this, synchronization mechanisms such as mutexes and semaphores are used. With message passing, each process is isolated, i.e. has its memory, and the communication between processes is handled by exchanging messages. The formal mathematical model for this approach is called the Actor Model.

    In Elixir, each process has its Process Identifier (referred to as PID). If you want to send a message to another process, you need to have its PID and call a send function:

    send(pid, "The message")
    

    The first argument is the receiver’s PID, and the second one is the message, which can be of any Elixir data type, even complex data structure. However, getting a message does not interrupt any task that a process is doing. Instead, there is a mailbox which stores all the messages that a process receives, and then it can explicitly fetch a single one with the receive instruction:

    receive do
     msg -> IO.puts("I've received: #{msg}")
    end
    
    

    This code sample fetches the first message in the message queue (i.e. the one that came the earliest) and prints it on standard input. The whole operation can be visualized with the following diagram:

    Elixir code sample diagram

    But how do you get a process’s PID in the first place? To create a new process, you need to call the spawn function with the function that this process will execute, and the return value is its PID. You can also call a self function to get the PID of a current process. The following example showcases how bidirectional communication can be achieved:

    # Function to be executed by the new process
    def multiply_by_two() do
     receive do
       {reply_to, val} -> send(reply_to, val * 2)
     end
    end
    
    
    # Getting PID of process A
    pid_a = self()
    # Creating process B
    pid_b = spawn(&multiply_by_two/0)
    
    
    # Sending a message to process B
    send(pid_b, {pid_a, 2})
    # Receiving a message from process B
    receive do
     val -> IO.puts("Result: #{val}")
    end
    


    There are many topics beyond the scope of this article regarding concurrency in Elixir: monitoring other processes, linking processes, registering a process under a global name and abstractions for building processes in OTP. However, this example should give a glimpse of what the core foundation for concurrency in Elixir is.

    Fault tolerance and scalability

    The concurrency model presented above with lightweight processes and mechanisms to communicate and monitor each other gives the developers tools to build fault-tolerant and scalable distributed systems.

    In OTP, there are also common abstractions to create so-called “supervision trees”. This allows you to decompose your system into a tree structure where errors in one part of the system do not propagate to the other part but are handled by the supervisor process of a particular branch. Most of the time, a process that generated the error is restarted with its state restored and this is transparent to other parts of the system.

    Case studies: Successful Elixir projects

    These are the highlights of successful Elixir projects achieved by various companies in collaboration with Erlang Solutions. Each detailed story is available in the case study in the corresponding link.

    Company name Key benefits
    Bleacher Report There is a significant reduction in code complexity, a considerable decrease in development time, and significant cost savings. Additionally, time and resources are freed up to address technical debt, and there is excellent availability of coding expertise after converting the Ruby team into Elixir experts.
    TV4 Migrated millions of subscribers from an external service to a user management application with zero downtime.Reduced server consumption and decreased infrastructure costs.
    BET Software Code complexity is significantly reduced, development time decreases, and costs are lower. Time and resources are freed to address technical debt, with strong coding expertise after converting the Ruby team to Elixir.
    International Registries, Inc. (IRI) Run highly parallel processes and eliminate system bottlenecks. A distributed data architecture ensuring system availability even during data center failures. An innovative event ingress system capable of processing up to 300,000 market changes on peak days, enabling real-time event processing and live betting.

    Enhancing team skills with Elixir tutorials

    As the Elixir community is growing, so is the availability of learning materials. Besides our blogs and tutorials, there are online platforms for learning programming and local workshops.

    Here are some of the popular platforms for learning Elixir:

    Platform Description Features
    Learn Elixir A dedicated platform for Elixir enthusiasts, offering structured courses to guide learners from basics to advanced topics. Self-paced learning modules.Interactive coding challenges.Community support and forums.
    Exercism A free platform offering coding exercises across various programming languages, including Elixir. It provides practice problems and mentorship to help learners improve their coding skills. Interactive exercises with real-world scenarios.Mentorship from experienced developers.Community discussions for collaborative learning.
    Educative.io An interactive learning platform that offers a course on functional programming using Elixir. In-browser coding environment.Hands-on exercises and quizzes.Text-based lessons with visual aids.

    If you prefer hands-on experience, then these are local options for learning Elixir:

    Learning type Description
    Meetups are a great way to get inspired by developers in your area. You can check meetup.com if there is a local group of enthusiasts meeting together. Conferences like ElixirConf , ElixirConf EU , Code Beam Europe , Code Beam America organise workshops with various difficulty levels.
    Conference talks Meetups are a great way to get inspired by developers in your area. You can check meetup.com if there is a local group of enthusiasts meeting together.
    Local meetups Meetups are a great way to get inspired by developers in your area. You can check out on meetup.com if there is a local group of enthusiasts meeting together.

    Future-proofing your company with Elixir

    Elixir is not only a language with modern syntax but also a language that keeps up with emerging trends in software development, making it an interesting choice for a tech stack. Here’s a list of a few current trends where Elixir fits:

    1. Artificial Intelligence and Machine Learning Integration – The Current boom in Large Language Models (LLMs) is continuing, and the Numerical Elixir (Nx) project provides all the tooling to incorporate ML models into your systems written in Elixir.
    2. Functional Programming Paradigm – Elixir is a functional language and has all the features that many imperative languages have been adopting over the past years, such as immutable data structures, pattern matching, higher-order functions, streams
    3. Internet of Things – Elixir’s ability to manage thousands of concurrent processes makes it an excellent choice for IoT applications that require real-time data processing and high availability. Also, there are tools like Nerves that help to build IoT platforms in Elixir.
    4. Developer Productivity – According to Stack Overflow Survey 2024, Elixir is the second most admired programming language , and the Phoenix framework is the most admired web framework . This is no surprise as they provide a smooth Developer Experience and allow programmers to focus on the most essential parts of their tasks

    To conclude

    Elixir is a great choice whether you’re a beginner looking for a language to learn programming, a senior developer wanting to change your tech stack to be more productive or a tech lead searching for a solution to scale up your product. With our Elixir Tutorial, we’ll bring you materials and inspiration to proceed on this journey.

    If you’d like to use Elixir in your product and would like the help of our experts to introduce it into your tech stack, read more about our Elixir consulting offer.

    The post Elixir Tutorials appeared first on Erlang Solutions .

    • chevron_right

      Kaidan: Kaidan 0.12.2: Message Removal and Bubble Fixes

      news.movim.eu / PlanetJabber • 29 March

    Kaidan 0.12.2 fixes some bugs. Have a look at the changelog for more details.

    Changelog

    Bugfixes:

    • Fix removing corrected message (melvo)
    • Fix showing message bubble tail only for first message of sender (melvo)

    Download

    Or install Kaidan for your distribution:

    Packaging status

    • wifi_tethering open_in_new

      This post is public

      kaidan.im /2025/03/30/kaidan-0.12.2/

    • chevron_right

      Kaidan: Kaidan 0.12.1: Voice Message and Password Change Fixes

      news.movim.eu / PlanetJabber • 28 March

    Kaidan 0.12.1 fixes some bugs. Have a look at the changelog for more details.

    Changelog

    Bugfixes:

    • Do not highlight unpinned chats when pinned chat is moved (melvo)
    • Fix deleting/sending voice messages (melvo)
    • Fix crash during login (melvo)
    • Fix opening chat again after going back to chat list on narrow window (melvo)
    • Increase tool bar height to fix avatar not being recognizable (melvo)
    • Fix width of search bar above chat list to take available space while showing all buttons (melvo)
    • Fix storing changed password (melvo)
    • Fix setting custom host/port for account registration (melvo)
    • Fix crash on chat removal (fazevedo)
    • Move device switching options into account details to fix long credentials not being shown and login QR code being temporarily visible on opening dialog (melvo)
    • Allow setting new password on error to fix not being able to log in after changing password via other device (melvo)

    Download

    Or install Kaidan for your distribution:

    Packaging status

    • wifi_tethering open_in_new

      This post is public

      kaidan.im /2025/03/29/kaidan-0.12.1/