Planet Jabber

September 09, 2024

Erlang Solutions

How Generative AI is Transforming Healthcare

Generative AI (Gen AI) has emerged as a transformative technology across the healthcare industry. It has the potential to vastly transform the clinical decision-making process and ultimately improve patient health outcomes. 

The adoption of generative AI is now valued at over $1.6 billion and the global AI market in the healthcare market is projected to reach $45.2 billion by 2026.  

Given such rapid growth projections, healthcare providers should recognise the opportunities presented by generative AI and explore how to incorporate it to improve patient care.

We will take an in-depth look into Gen AI and provide insights into how it is poised to revolutionise the healthcare space. 

Understanding Generative AI in healthcare

So traditional vs generative AI- what’s the difference? 

Before we compare the two, let’s take a moment to clearly define them:

Traditional AI- Also known as narrow or weak AI is a branch of artificial intelligence that executes tasks based on pre-established algorithms. These systems are usually specialised and excel at specific functions. However, they have a restricted range of applications compared to other types of AI.

Examples include: Chatbots, voice assistants, credit score systems and spam filters.

Generative AI- Is a form of artificial intelligence that can produce new outputs. These include text, images, and other types of data. It starts by analysing large amounts of existing data. Those insights are then used to create fresh content. Generative AI uses machine learning to identify patterns, make predictions, and generate new material based on the data it processes.

Generative AI and predictive AI are quite similar, as predictive AI is also a learning-based technology that identifies and anticipates patterns.

As well as data analysis, generative AI needs direct human input, or what is more commonly known as a “’prompt,’ to guide the AI’s output. Prompts aren’t just text focus. They also include videos, graphics, or audio.

Key differences between Traditional and Generative AI

Now let’s look into the main differences between traditional and generative AI:

AspectTraditional AIGenerative AI
ApplicationsIs most commonly used for data analysis, forecasting, and optimisation tasks where rules are well-defined.Best for tasks such as image recognition, natural language processing (NLP), and sentiment analysis, where patterns in unstructured data are key.
Data- handlingBest for structured data and tasks requiring precise, rule-based decision-making.Best at managing and interpreting large volumes of unstructured data, such as images, videos, and text.
Rules-based v learning-basedOperates on explicit rules that are programmed by humans.Learns from data and adapts its behaviour according to the patterns it discovers.
Flexibility and adaptabilityRigid and less adaptable. It requires manual updates to handle new and/or unexpected situations.Highly flexible and capable of learning from diverse datasets. It can adjust to new scenarios without manual intervention.
Creativity and autonomyLacks creative abilities and autonomy and is confined to predefined rules and tasks.Highly capable of autonomously generating content, such as images and text, demonstrating creativity beyond rule-based systems.
Learning capabilitiesIs dependent on predefined rules and algorithms and requires human intervention for updates or adjustments.It utilises deep learning to continuously improve by analysing data, identifying patterns, and making predictions, making it highly adaptable.

While there are no clear “winners”, generative AI’s advantage lies in its broader offering. Its strength comes from using models to create unique content, without the need to rely on clear and rigid rules. Compared to its traditional counterpart, generative AI allows for greater flexibility and problem-solving.

For healthcare industry leaders, the strategic value of Generative AI cannot be overstated. Its benefits provide the ability to foster a culture of continuous improvement, enabling organisations to innovate in a rapidly evolving industry.

Enhancing patient care and outcomes with Generative AI

Healthcare leaders have long understood the role of personalised care in meeting patient needs. Generative AI provides the opportunity to create personalised care plans, with the ability to leverage patient experience and achieve significantly better health outcomes. 

Here are some of generative AI’s main growing applications: 

Personalised treatment plans

A standout advantage of generative AI in healthcare is its ability to create treatment plans that are uniquely tailored to each patient. Traditional approaches are dependent on standardised protocols, which might not fully address the specific needs of every individual. 

But generative AI can analyse extensive patient data- from medical history and genetic information to lifestyle choices and social factors- to develop highly personalised treatment recommendations.

AI can examine a patient’s genetic likelihood of developing certain conditions and suggest preventative measures or specific treatment options. By offering customised care recommendations, healthcare professionals can enhance the effectiveness of treatments and reduce the chances of adverse effects, leading to improved health outcomes.

Predictive analytics

Generative AI also offers significant potential in the realm of predictive analytics, helping healthcare providers foresee and prevent potential health issues before they become critical. By examining large datasets of patient information, such as vital signs, lab results, and diagnostic images, AI algorithms can detect patterns that may signal future health risks.

For example, researchers at Mayo Clinic utilised generative AI to develop a deep-learning algorithm to forecast the likelihood of patient complications following surgery. 

It can produce customised treatment recommendations, depending on the risk.

Enhanced diagnostic accuracy

Diagnosis mistakes are a massive concern within healthcare. They can lead to incorrect or delayed treatment, which can lead to life-threatening consequences for patients. Generative AI provides enhanced accuracy of diagnoses by supporting healthcare professionals in their decision-making processes.

Generative AI systems can:

  • Examine medical images, such as X-rays, MRIs, and pathology slides, with incredible precision.
  • Identify even the smallest abnormalities that might be missed by the human eye.
  • Recognise patterns that are linked to particular diseases by learning from sizable datasets.
  • Analyse symptoms and clinical data to suggest possible diagnoses. 

By improving diagnostic accuracy, generative AI helps to ensure timely and correct treatments. It also reduces the likelihood of unnecessary procedures and time delays, which ultimately ease the strain on healthcare systems.

Virtual health assistants

Chatbots that are powered by AI act as virtual health assistants (VHAs) for patients. They can provide a wealth of information, such as answering medical queries, providing relevant health information, medication reminders, personalised health advice and necessary support for chronic conditions- to name a few services.

DAX Express, a notable US healthcare provider integrates GPT-4, a generative AI technology, to automate clinical documentation. This application listens to patient-physician interactions and then generates medical notes. The notes are directly uploaded into Electronic Health Records (EHR) systems, removing the need for a human review.

The use of gen AI in DAX Express significantly speeds up the documentation process. It reduces it from hours to seconds, a substantial benefit of VHAs. This also improves patient care by allowing doctors more time with patients, enhancing the accuracy of medical records, and speeding up follow-up treatments.

Operational efficiency and cost reduction

As briefly mentioned, AI’s ability to provide transformative solutions that streamline processes and reduce costs, while enhancing patient care is a major driver for healthcare service providers  Various AI-driven technologies including GenAI are reshaping the way healthcare organisations operate, so both providers and patients benefit from these advancements.

Wearables to enhance patient monitoring

Fitbits, Apple watches, Oura rings and ECG machines are just a few examples of AI-powered wearables that are transforming patient care through continuous health monitoring. 

According to research by Deloitte, wearable technologies are expected to reduce 16% of hospital costs by 2027, and by 2037, it could save $200 billion with its remote patient monitoring devices. These devices are designed to catch potential health issues early, reducing the need for emergency interventions and, therefore lowering the frequency of hospital visits. They also empower patients to manage their health proactively, thanks to personalised reminders, which are aimed to foster healthier habits (think of fitness rings on your Apple watch).

This approach optimises healthcare resources and contributes to reducing overall healthcare costs.

Accelerating drug discovery and reducing costs

In the pharmaceutical sector, generative AI is accelerating drug discovery processes for faster treatment development, especially in underserved medical areas. 

Gen AI models analyse large amounts of data to identify new disease markers, streamlining clinical trials and reducing their duration by up to two years. 

Improved accessibility and inclusivity

AI-driven chatbots and digital assistants are breaking down barriers to healthcare access. They support multiple languages and provide user-friendly interactions. 

These tools make healthcare more inclusive, especially for patients with disabilities or those who face language barriers. By ensuring that everyone can access care without obstacles, AI enhances patient satisfaction and promotes equity in healthcare delivery.

Optimising data management and analysis

The healthcare industry generates vast amounts of data daily, and managing this information efficiently is crucial. Traditional AI assists in organising and analysing healthcare data, which helps professionals extract valuable insights quickly. 

Generative AI can sift through electronic health records, research articles, and clinical notes to identify patterns and trends, enabling more informed decision-making and improving the overall quality of care.

Enhancing supply chain and equipment utilisation

AI is also playing a critical role in optimising the healthcare supply chain and equipment usage. According to research from Accenture, 43% of all working hours across end-to-end supply chain activities could be impacted by gen AI in the near future.

AI algorithms can provide actionable insights into the best supplies or drugs to use, considering cost, quality, and patient outcomes. Additionally, gen AI helps schedule diagnostic equipment, ensuring that costly machines like MRIs and CT scanners are utilised to their full potential. This not only reduces operational costs but also enhances the overall efficiency of healthcare delivery.

Integrating Elixir in Generative AI in Healthcare

As healthcare organisations increasingly adopt generative AI technologies, integrating the right tools and technologies is crucial for maximising their potential. Elixir, a functional and concurrent programming language is well-suited to underpin the delivery of AI models, due to its scalability, performance and ability to handle large-scale data processing efficiently. Healthcare organisations can leverage Elixir to ensure robust, reliable deployment of their generative AI technologies, to drive innovation and enhance capabilities.

Let’s look into some of the key features of Elixir:

  • Concurrency: Elixir excels at managing numerous simultaneous tasks, crucial for handling the large-scale data processing needs of AI applications.
  • Fault tolerance: Built to handle failures with ease, Elixir ensures continuous operation and reliability—a key trait for healthcare systems that demand high uptime.

Scalability: Elixir’s ability to scale horizontally supports the growing computational demands of advanced AI models and data analytics.

Improved data processing and management

Elixir’s concurrency capabilities allow for efficient handling of multiple data requests. This feature is essential for real-time AI applications in healthcare, for example, diagnostic tools and patient management systems. Its scalability allows healthcare organisations to build robust data pipelines, ensuring smooth data flow and faster processing.

Enhanced system reliability

Elixir supports fault-tolerant architectures. It maintains system reliability for critical healthcare applications. Its ability to recover from errors without system-wide disruption means that AI-driven healthcare solutions remain operational and dependable.

Optimised performance

Once again, Elixir’s scalability meets the growing demands of AI workloads. This improves computational efficiency and enhances overall system performance. Its support for real-time processing also improves the responsiveness of healthcare applications, providing immediate feedback and improving operational efficiency.

Integrating Elixir and other technologies with generative AI provides huge potential to enhance healthcare applications- from improving data management to optimising system performance. For business leaders, strategic planning and collaboration are key to harnessing these technologies effectively, to ensure that their organisations can capitalise on the benefits of AI while maintaining robust and reliable systems.

The future of Generative AI 

While generative AI has the proven power to revolutionise the healthcare industry, some ethical and regulatory points still need to be considered. Areas surrounding patient privacy, security and equitable access to AI-powered equipment are still a work in progress. 

Consumer trust is also a critical factor in the future of AI. To optimise AI results, business leaders need to understand consumers’ feelings towards Generative AI.

In a survey conducted by Wolters Kluwer,  while those asked did have some concerns or fears surrounding generative AI, 45% were “starting from a position of curiosity.” Over half (52%) of those surveyed further reported that they would be fine with their healthcare providers using gen AI to support their care. 

generative ai in healthcare american feelings

The trust in gen AI is not just down to the technology, but the trust of the consumer in their healthcare provider.

As these issues are addressed, a new era of improved health outcomes and more accessible medical services is just years, if not months, away from being a reality.

To conclude

AI has undeniable transformative potential. Leveraging and gaining a better understanding of this technology is key to embracing innovation in the healthcare industry and most importantly, prioritising patient-centric care.

Whether your current systems are falling short or you’re actively seeking new ways to improve patient outcomes and operational efficiency, generative AI provides a powerful solution. It can revolutionise how healthcare services are delivered- from personalised treatment plans to predictive analytics and enhanced diagnostics. 

By adopting gen AI, you can position healthcare providers at the forefront of healthcare innovation. If you’d like to talk more about your healthcare needs or how Elixir can power your AI model, feel free to drop us a line.

The post How Generative AI is Transforming Healthcare  appeared first on Erlang Solutions.

by Erlang Solutions Team at September 09, 2024 09:00

September 06, 2024

Erlang Solutions

Erlang Solutions announces latest business win with Razoyo to meet growing demand

Erlang Solutions, a global technology and consultancy service provider, is pleased to announce its latest customer win with Razoyo, a leading e-commerce consultancy and software development agency.

Razoyo needed urgent support and additional team members to handle sudden increased demand and extra client needs. They appointed Erlang Solutions for their expertise and ability to provide the right specialists fast, ensuring Razoyo meets their quick turnaround.

Commenting on the latest partnership, Mark Cowan, International Business Development Manager at Erlang Solutions said: ” We are excited to support our newest client Razoyo with our expert team and specialist resources. We look forward to working with them to deliver continued outstanding service.”

Paul Byrne, President at Razoyo, added “When faced with such high demand, outsourcing was key for us to manage this peak time in the business. Erlang Solutions stepped in swiftly with their expertise to meet our needs. We look forward to working with them to maintain our high standards of delivery.”   

Razoyo is an award-winning eCommerce and Development Agency serving the needs of medium and large-size businesses. They work with thousands of merchants each year to improve and expand their business.

With 26 years of expertise, Erlang Solutions is renowned for its world-leading consultants in Erlang, Elixir, and beyond. The company delivers efficient and reliable system solutions for some of the world’s most ambitious companies.

The post Erlang Solutions announces latest business win with Razoyo to meet growing demand appeared first on Erlang Solutions.

by Erlang Solutions Team at September 06, 2024 11:30

September 05, 2024

Erlang Solutions

Meet the team: Joanna Wrona

In this edition of our “Meet the Team” series, we’d like to introduce you to Joanna Wrona, Business Unit Leader for the Kraków office at Erlang Solutions.

She discusses her role at ESL and her passion for empowering her team. She also gives us a glimpse into life in beautiful Kraków and what makes her journey so fulfilling.

Joanna Wrona ESL

About Joanna

What is your role at Erlang Solutions?

I am the Business Unit Leader at Erlang Solutions, based in Kraków, Poland. I oversee the business unit’s day-to-day operations. 

My role focuses on supporting and guiding our great team of talented and passionate Erlang and Elixir developers. I’m dedicated to creating an environment where they can thrive while ensuring we achieve our goals and stay true to our values: teamwork, knowledge sharing, sustainability, passion and fun. 

Equally important is our partnership with our customers – we work closely with them, valuing their input and collaboration as we strive to deliver the best possible outcomes. 

I also identify new market opportunities to help us grow and strengthen our regional presence. My leadership is rooted in serving our team and customers so everyone succeeds.

What have been some highlights of your career so far?

For over a decade, I have worked with passionate people who excel at what they do and genuinely love the technologies we use. Watching them grow, develop, and contribute to our success is incredibly gratifying.

I’m also very proud of our low employee turnover. Many team members have been with us for over a decade, which reflects the positive work environment we’ve built and the deep fulfilment that comes from being part of such a dedicated business. 

It feels good to work here.

What are some of the most important lessons you’ve learned about leadership?

I’ve learned that leadership is fundamentally about service and empathy. Effective leaders prioritise the needs of their teams and create environments where people feel valued, supported, empowered, and listened to. I draw inspiration from thought leaders like Simon Sinek, Brené Brown, Robert Greenleaf and Kim Scott. Their work has helped shape my approach to servant-style leadership.

While it’s not always easy, it’s incredibly rewarding.

Having mentors and leadership workshops with our executive management team has also been invaluable in my journey. I’ve been fortunate to have great mentors and colleagues, like Michał Ślaski, who first brought me to Erlang Solutions and Erik Schön, a fellow Business Unit Leader in Sweden, whose insights and books on leadership continue to inspire me.

Are there any exciting projects you and the team are working on now? 

Yes- we have recently launched the MongooseIM Autoscaler, which is a solution for businesses looking to increase or decrease the capacity of their MongooseIM cluster. It is also for businesses seeking a chat solution, existing chat applications or businesses with variable loads.

Tell us about what life is like in Poland- what does a typical day look like for you?

My most important responsibility is as a mother to two teenagers. My schedule is often dictated by school calendars and family events! 

I’m fortunate to live in Kraków. I enjoy biking to work, which allows me to pass by iconic landmarks like Wawel Castle, Main Square, Zakrzówek and along the Vistula River.

It’s a great way to start my day and appreciate the city’s beauty.

Tell us one thing you can’t live without.

Well, it is not a thing, but it’s people around me (my partner, kids, family, friends, colleagues at work). To me, life is a journey that is best when you can share it with others. 

Final thoughts

We love connecting with people—whether it’s over coffee at our offices or conferences around the world. If you’d like to connect with Joanna, catch her at the GOTO EDA Day in Warsaw on 19th September.

If you would like to learn more about what we do, drop the team a line.

The post Meet the team: Joanna Wrona appeared first on Erlang Solutions.

by Erlang Solutions Team at September 05, 2024 11:30

Understanding Elixir processes and concurrency

Welcome to the second chapter of the series “Elixir, 7 Steps to Start Your Journey”. In the first chapter, we discussed the Erlang Virtual Machine, BEAM, and the characteristics Elixir inherits that allow us to develop concurrent and fault-tolerant systems.

In this post, we will dive into the Erlang concurrency model and the fundamental unit to achieve it: processes.

Processes in the BEAM

In Elixir, all the code you write runs in the Erlang virtual machine, so when we refer to processes, we are talking about Erlang processes, not the operating system.

Processes are the fundamental units of concurrency, and an Elixir application can have thousands or even millions of processes running simultaneously. Each process runs on its own memory space and has its stack, so it does not interfere with other processes or cause deadlocks.

The BEAM is responsible for creating and managing processes. These are very lightweight, so their creation is on the order of microseconds. They communicate through asynchronous message passing, regardless of whether they are in the same BEAM instance or different, which is common since a highly concurrent system is usually also distributed.

The BEAM is also responsible for parallelizing the execution of the processes as much as possible. Let’s see how it works.

Concurrency in the BEAM

By default, when an instance of the BEAM runs on a machine, it creates a thread on each available processor and a queue on each thread. The queue is dedicated to specific tasks and has its own scheduler that assigns time and priority to the tasks. 

But before we delve into this, here is a brief explanation of concurrency.

Concurrency is the ability to perform two or 

more tasks (apparently) at the same time.

More accurately, concurrency is the ability of a system to assign a specific priority and time to a series of tasks and intersperse between them to carry them out. This is why the word “apparently” is highlighted. It is not that two tasks are executed precisely at the same time but rather that the system intersperses them so quickly that it gives the illusion that they are being carried out simultaneously. Let’s look at an example. 

We have two tasks to complete, A and B, and only one person can carry them out.

This person will spend a period on task A, pause it, spend a period on task B, pause it, and so on until both are completed. 

Elixir process and concurrency

The person assigns time and priority to tasks to alternate between them until both are completed.

A more tangible example is your browser windows. You can have an Elixir post open to consult in one tab and your notepad in another tab and switch between them so that while you read the post, you also take notes.

In BEAM, we can have N tasks, each of which will be executed in an isolated process. As mentioned above, BEAM will assign a scheduler for each available core on the machine, and these schedulers will be responsible for executing the tasks. This way, we will have many cores working in parallel, performing a series of tasks concurrently.

Elixir process and concurrency BEAM scheduler

The virtual machine takes advantage of all of the resources of the machine to parallelise work as much as possible.

If you want to know more about the Erlang concurrency model, the list of resources below will be very helpful.

Resources

Code example

To finish, let’s look at a very simple code example.

For this exercise, let’s assume that we have a list of users, and we want to validate that their names and email have the defined format. To do this, we will use regular expressions and show an error message if they do not match what is expected.

We will have two functions: one that validates the records sequentially and one that uses the spawn auto-import function to do it concurrently.
In your favourite text editor, copy the following code and save the file as processes.ex

defmodule Processes do
 @moduledoc false


 @email_regex ~r/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/
 @name_regex ~r/\b([A-ZÀ-ÿ][-,a-z. ']+[ ]*)+/


 # This function works SEQUENTIALLY
 def validate_users_sequentially do
   users() |> Enum.each(fn user -> validate_user(user) end)
 end


 # This function works CONCURRENTLY, with spawn
 def validate_users_concurrently do
   users() |> Enum.each(fn user -> spawn(fn -> validate_user(user) end) end)
 end


 @doc """
 Function that receives a user and validates if the email and name are correct.
 Prints an informational message.
 """
 def validate_user(user) do
   info_message =
     user
     |> validate_email()
     |> validate_name()
     |> print_status()


   # This pauses for 2 seconds to simulate more complex information processing.
   Process.sleep(2000)

 IO.puts(info_message)
 end


 @doc """
 Function that validates if the email corresponds to the expected regular expression.
 """
 @spec validate_email(map) :: map
 def validate_email(user) do
   valid_email? = Regex.match?(@email_regex, user.email)
   Map.put(user, :valid_email, valid_email?)
 end


 @doc """
 Function that validates if the name corresponds to the expected regular expression.
 """
 @spec validate_user(map) :: map
 def validate_name(user) do
   valid_name? = Regex.match?(@name_regex, user.name)
   Map.put(user, :valid_name, valid_name?)
 end


 @doc """
 Function that receives a map with the user's information and returns a
 message indicating whether the email status and name are valid or not.
 """
 @spec print_status(map) :: String.t()
 def print_status(%{
       name: name,
       valid_email: valid_email,
       valid_name: valid_name
     }) do
   "User #{name} - Status - Valid name: #{valid_name}, Valid email: #{valid_email}"
 end


 defp users do
   [
     %{name: "Melanie C.", email: "melaniec@test.com"},
     %{name: "Victoria Beckham", email: "victoriab@testcom"},
     %{name: "Geri Halliwell", email: "gerih@test.com"},
     %{name: "123456788", email: "melb@test.com"},
     %{name: "Emma Bunton", email: "emmab@test.com"},
     %{name: "Nick Carter", email: "nickc@test.com"},
     %{name: "Howie Dorough", email: "howie.dorough"},
     %{name: "", email: "ajmclean@test.com"},
     %{name: "341AN L1ttr377", email: "Brian-Littrell"},
     %{name: "Kevin Richardson", email: "kevinr@test.com"}
   ]
 end
end

Now open an Elixir terminal with the iex command, compile the file, and run the sequential function:

> iex


iex(1)> c("processes.ex")
[Processes]


iex(2)> Processes.validate_users_sequentially

Now run the function that does it concurrently:

iex(3)> Processes.validate_users_concurrently

In this case, we are using a Process.sleep(2000) to make the example more dramatic; in a production system, there will be no such instruction, but it helps us see the difference between executing code sequentially and concurrently.

Next Chapter

In the next chapter, “Libraries and Frameworks”,  we will discuss the OTP framework, which allows us to structure systems in the BEAM and provides all the elements necessary to achieve robustness and fault tolerance. We will also discuss the web development framework, Phoenix, and some general libraries from the Elixir ecosystem. Do not miss it!

The post Understanding Elixir processes and concurrency appeared first on Erlang Solutions.

by Lorena Mireles at September 05, 2024 10:05

The XMPP Standards Foundation

The XMPP Newsletter August 2024

XMPP Newsletter Banner

XMPP Newsletter Banner

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

XSF Announcements

The XSF has signed an Open Letter to the European Commission. As currently many other organizations doing, the XMPP Standards Foundation (XSF) has decided to also sign the Open Letter to the European Commission.

The XMPP Standards Foundation is also calling for XSF Board 2024 and XSF Council 2024. Get involved with the XMPP Standards Foundation organisation decisions as well as with the specifications we publish. If you are interested in running for Board or Council, please add a wiki page about your candidacy to one or both of the following sections until November 3rd, 2024, 00:00 UTC. Note: Council members must be elected members of the XSF; however, there is no such restriction for the Board of Directors.

XMPP and Google Summer of Code 2024

The XSF has been accepted as a hosting organisation at GSoC in 2024 again! These XMPP projects have received a slot and have kicked-off with coding:

XSF and Google Summer of Code 2024

XSF and Google Summer of Code 2024

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

  • Berlin XMPP Meetup (DE / EN): monthly meeting of XMPP enthusiasts in Berlin, every 2nd Wednesday of the month at 6pm local time
  • XMPP Sprint in Worcester, UK: From Saturday 21st to Sunday 22nd of September 2024.
  • 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).

Videos

XMPP Articles

XMPP Software News

XMPP Clients and Applications

Movim 0.27 introducing the floating, chat-integrated, and full-screen modes

Movim 0.27 introducing the floating, chat-integrated, and full-screen modes

XMPP Servers

  • Yunohost, a (non-official) Prosody host package aiming at providing better XMPP support has been drafted and available for tests. As a reminder, Yunohost is a server distribution based on Debian, which makes easy to host by yourself a lot of services (apps). Nearing the release of its version 12, till the version 11 the XMPP server Metronome was integrated in the core installation, allowing a lot of people to discover XMPP easier (though with some limitations).

XMPP Libraries & Tools

  • QXmpp 1.8.1 has been released.
  • Blasta (mirror) is a federated bookmarking system based on XMPP, which allows you to share the collection of bookmarks (aka “social bookmarking”) stored on your own XMPP account, not only among your own software, devices and machines, but also with other people.
Blasta browse

Blasta browse

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

  • No new XEPs this month.

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

  • Version 1.2.0 of XEP-0402 (PEP Native Bookmarks)
    • Encourage clients to immediately leave the room if they receive a bookmark notification with autojoin set to false (mye)
  • Version 1.0.2 of XEP-0388 (Extensible SASL Profile)
    • Fix various invalid examples.
    • Fix the XML Schema to match examples. (egp)
  • Version 1.35.0 of XEP-0045 (Multi-User Chat)
    • Remove references to using resourceparts when banning users.
    • Explicitly disallow Ban List modifications that clash with ‘Banning a User’ conditions.
    • Status code purpose no longer hints that recipient is the affected user
    • Improved ‘Service Removes Non-Member’ example.
    • Clarify usage of presence stanzas when removing a non-member from a members-only room.
    • Replace inappropriate RFC 2119 key word usage in §9.7.
    • Presence sent to occupants of a destroyed room includes a element.
    • Explicitly use bare JIDs when operating on affiliations.
    • Allow non-owners to retrieve owner and admin lists in non-anonymous rooms.
    • Members should be allowed to retrieve the member list only in non-anonymous rooms. (gk)
  • Version 0.2.0 of XEP-0478 (Stream Limits Advertisement)
    • Add the XML Schema.
    • Clarify that both children can be optional.
    • Fix indentation and one typo. (egp)
  • Version 1.0.1 of XEP-0386 (Bind 2)
    • Add an XML Schema. (egp)
  • Version 1.3.0 of XEP-0054 (vcard-temp)
    • Updated error cases to be compatible with . (gk)

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 XEP moved to Stable this month.

Deprecated

  • No XEP deprecated this month.

Rejected

  • No XEP 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 an 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, 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.

September 05, 2024 00:00

August 29, 2024

Erlang Solutions

5 Ways MongooseIM Provides Scalable and Future-Proof Messaging

CTOs with instant messaging requirements are facing a challenge. Whether they are looking to improve an existing instant messaging system or implement one for the first time, they need a messaging solution that can scale to meet growing demands. It must also integrate with existing systems and remain future-proof against technological changes. It sounds like a lot to ask for, but traditional methods are no longer cutting it when it comes to the complex needs of modern business.

MongooseIM is designed to address those critical challenges and empower businesses with its robust messaging infrastructure – from managing IoT devices and securing communications to supporting internal collaboration and customer support.

In this post, we’ll be taking a look at the five ways optimising MongooseIM can offer the best in scalable and future-proof messaging solutions to maximise productivity and drive innovation.

What is MongooseIM?

So what Is MongooseIM? MongooseIM is a “robust and efficient chat (or instant messaging) platform aimed at large installations.” 

As an open-source messaging platform built on the XMPP standard, MongooseIM is designed for large-scale, high-performance communication, making it ideal for businesses. Its robust, secure and scalable framework can enhance internal collaboration, improve customer support and improve real-time data sharing. It’s easily customisable thanks to open-source technology, so can be tailored to specific needs, improving overall operational effectiveness and business efficiency.

Adapting to business growth

Businesses need a messaging solution that fits in seamlessly with their growth goals. The unique features of MongooseIM are designed to adapt to those growth goals with ease.

Horizontal scalability

A prevalent business feature for MongooseIM is horizontal scalability. Why is this so popular? Well as your business expands, so does the demand for messaging services. Horizontal scalability allows you to add more servers to handle a growing workload without any service interruption. This allows for continued reliable communication, which is critical to maintaining performance while handling increased data volume. If you would like more about the importance of horizontal scalability, you can explore how MongooseIM scales horizontally in more detail.

Flexible architecture with MongooseIM

MongooseIM offers a wide range of pluggable and configurable modules. Its modular design allows for unmatched flexibility, allowing businesses to scale individual components based on their specific needs. 

The types of flexible architecture provided by MongooseIM include: 

Modular design: Allows for the scaling of individual components that are based on specific needs.

Optimised resource usage: Allows for efficient growth management of data, users and other features.

Adaptability: Allows for adjustments without the need to overhaul the entire system.

Dynamic Configuration

Multi-tenancy is another major advantage of MongooseIM. It supports dynamic management of XMPP domains, allowing businesses to adjust their infrastructure without the need for any downtime. This enables real-time scaling and flexible reconfiguration to meet changing demands. For more details, you can explore this blog post on dynamic XMPP domains.

Real-time scaling and reconfiguration are key for maintaining continued customer satisfaction without compromising on service quality. Your messaging solution will remain robust and most importantly, responsive.

Provides seamless scalability

We have explained the importance of horizontal scalability as a key feature of MongooseIM. 

But scalability in general is where the messaging platform truly excels. 

MongooseIM offers several means of scalability, designed to support the traffic of XMPP servers, dependent on load. The main feature of the recently released MongooseIM 6.2.1 is its improved CETS in-memory storage backend, designed to further simplify and enhance its scalability offering. 

So how have these capabilities impacted real-life businesses? It has been crucial for facing the rapid growth needs of demands of many, but here are some key examples: 

Pando Health

Pando Health is an app designed to modernise doctor-to-doctor communication. Before it was widely introduced to the NHS, it had to resolve its ill-fitting technology issues. It was still using WhatsApp and other dated solutions like pagers for daily communication, which was far from efficient. 

Switching to the MongooseIM platform solved its scalability limitations and improved the visibility and traceability of the app. Thanks to the flexibility of the previously mentioned XMPP, it provided the chance for simple customisation and configuration if needed. It also opened up the chance to extend chat functionalities to support its future growth goals. 

MongooseIM Pando

You can explore the case study to learn more about MongooseIM’s business transformation of the Pando Health app. 

Beekeeper

Beekeeper IO used MongooseIM to help deliver efficient, scalable messaging performance. 

It is the top employee app, designed for frontline teams to lead the force for deskless workers. The migration to MongooseIM resulted in a vast performance improvement for the platform thanks to its scalable and flexible nature.

These improvements include: 

  1. Efficiently managing increased customer demand and traffic: Seamlessly handled due to MongooseIM’s architecture.
  2. Horizontal scaling: Allowed for the system to expand efficiently to meet growing needs.
  3. Decoupling chat functionality: Improved the development processes by separating the chat from the main system.
  4. Streamlined agile development cycles: This allowed for quicker iterations and faster bug fixes.
  5. Accelerated feature delivery: For faster development and the release of new features.
  6. XMPP protocol: Enhanced real-time communication capabilities. XMPP perfectly suited Beekeeper’s Frontline Success System and messaging requirements.
MongooseIM Beekeeper

To learn more about the Beekeeper MongooseIM business transformation click here.

In these examples, MongooseIM’s ability to scale allowed Pando Health and Beekeeper to grow their messaging needs. The scaling features of MongooseIM were enhanced to accommodate for increased user growth and high-performance standards, without compromising on user experience. 

Offers top security

Security and privacy have become a major cause for concern in the past few years. Unfortunately, major instant messaging apps have faced heavy criticism for the way they store, collect and share data. This has understandably led to real scrutiny among businesses and users alike. But MongooseIM is built with business security in mind. Its features ensure that security remains robust for its users.

End-to-end encryption and GDPR compliance

End-to-end encryption is fully supported by MongooseIM, preventing any unauthorised access and protecting sensitive information. It is also General Data Protection Regulation (GDPR) compliant, allowing users to adjust privacy settings according to their personal preferences. For businesses, particularly those operating in heavily regulated industries operating within the EU and UK, this level of compliance is crucial to ensure they meet data protection requirements.

Continuous security testing and integration

MongooseIM takes no chances when it comes to security. 

If there is a change to the system’s code, the repository runs hundreds of unit tests, via GitHub’s continuous integration system. The tests are built with modern software testing and static analysis technologies, designed to catch security vulnerabilities from the early stages of the development process.

If you’re a business looking to future-proof its messaging strategies, MongooseIM ensures that sensitive information is safeguarded against unauthorised access, which addresses the concerns of businesses on all levels. MongooseIM meets current security standards and also anticipates and adapts to future regulatory requirements.

MongooseIM for simple, easy deployment

For businesses looking for a fast, efficient way to implement messaging solutions, MongooseIM can simplify the deployment process.

As the saying goes, time is money. MongooseIM’s fast set-up means your operational platform will be up fast, allowing businesses to engage with their customers and internal teams immediately. The rapid deployment means business downtime is reduced but business continuity is maintained.

Seamless integration

Integration of a new system into an existing infrastructure can be a hurdle that understandably, businesses want to avoid. But MongooseIM fits seamlessly into existing setups, providing compatibility with popular platforms and protocols such as  XMPP and GraphQL. So whether it be a mobile app, web platform or internal communication tools, this integration allows for minimal disruption to day-to-day operations.

Scalability from day one

As your business grows, so do your messaging needs. MongooseIM’s distributed architecture is designed for scalability, meaning your messaging solution can expand as your user base increases. Your business is able to handle increased demand without the need for time-consuming and costly reconfigurations. The use of Kubernetes for orchestration also helps manage and scale deployments efficiently.

Developer-friendly

MongooseIM comes with active community support, so developers can integrate, implement and manage with ease. GitHub automates testing and deployment processes, which allows developers to adapt quickly to the system, roll out features faster and keep everything running smoothly.

MongooseIM’s swift and easy deployment facilitates agile growth and minimises operational disruptions, providing a dependable option for businesses to scale and future-proof messaging solutions.

Reliable, no-risk technology

MongooseIM relies on the XMPP (Extensible Messaging and Presence Protocol) open standard, a solution trusted by businesses globally. XMPP’s widespread adoption is scalable across diverse industries.

Think of XMPP as the backbone that supports your messaging needs as your business grows. Its open-source nature means it is constantly evolving and being refined by developers. This ongoing support ensures your messaging platform remains secure, efficient, and adaptable without the need for constant oversight.

Whether your operations are small-scale or aimed at global expansion, MongooseIM’s solutions are dependable and scalable, providing confidence in handling today’s needs and preparing for future challenges. If you would like to learn more about MongooseIM and other XMPP applications, check out this post on optimising instant messaging.

To conclude

MongooseIM is the ideal solution for businesses seeking a modern messaging platform that meets the demands of scalability and future readiness, while also supporting their growth objectives.

As an open-source technology, MongooseIM is free and readily available for businesses to use and adapt to meet their needs. Supported by a thriving global community of contributors, it undergoes continuous improvement to add features, improve vulnerabilities, fix bugs and enhance overall security. That many eyes on the code means continuous innovation and quality control, benefitting all users.

Open-source technology is also a cost-effective choice, with no upfront costs or long-term license fees to manage. Businesses are not tied to any particular suppliers, enhancing flexibility.

MongooseIM’s horizontal scalability also supports seamless business growth, while flexible architecture allows for tailored deployments and efficient resource management. Real-time time scaling and dynamic multi-tenancy enhance responsiveness, ensuring consistent service quality. 

Security features like end-to-end encryption and GDPR compliance provide imperative data protection, crucial for regulatory compliance and user trust. With straightforward deployment and seamless integration, MongooseIM minimises downtime and accelerates new solution launches, which maximises productivity and innovation.

If you would like to talk more about MongooseIM’s capabilities, feel free to contact our expert team.

The post 5 Ways MongooseIM Provides Scalable and Future-Proof Messaging  appeared first on Erlang Solutions.

by Erlang Solutions Team at August 29, 2024 09:13

August 28, 2024

Sam Whited

Luddism in Becky Chambers' Monk & Robot Series

Without use of constructs, you will unravel few mysteries.

Without knowledge of mysteries, your constructs will fail.

Find the strength to pursue both, for these are our prayers.

And to that end, welcome comfort, for without it, you cannot stay strong.

Becky Chambers has always been known for her political science fiction. Whether it’s criticisms of the overly-bureaucratic and often classist, but ultimately well-meaning, Galactic Commons (read “Space EU”) in her Wayfarers series or the “working class” astronauts of To Be Taught, If Fortunate, the politics are always close to the surface in her stories. Unlike these previous novels which perform the classic sci-fi trick of using the future to reflect on the present, Monk & Robot is her first explicitly solar punk speculative fiction series. Instead of exporting our current society across the galaxy, the Monk & Robot books ask what our current society could become with a prod in the right direction. The only hint we see of the present day are memories of the “factory age”, long ago, and worries about repeating it.

The two novellas, A Psalm for the Wild-Built and A Prayer for the Crown-Shy are, like her other novels, unabashedly anarchist and queer. Where they differ from the high-tech, space-opera anarchism of Record of a Spaceborn Few is in the level of technology embraced by the Pangan society. With the notable exception of one of the main characters, the robot Splendid Speckled Mosscap (it/its), we see very little technology beyond what we humans of the 21st century could create. There are no space ships, phasers, or warp drive. Instead, the most advanced pieces of technology we see are mobile phones (albeit repairable ones that are “designed to last a lifetime”, a far cry from the planned obsolescence of today), the mention of communication satellites, and the occasional solar panel or bio-plastic 3D printer. This relative lack of technology, coupled with the way the cities and towns of Panga (the small moon on which the stories are set) live in harmony with the natural world, has led some to use the story as a way to explore ideas of anarcho-primitivism through the lens of Wild-Built. However, with the exception of one seaside community that spurns all technology beyond simple tools, this comparison does not seem apt.

The main character of Wild-Built is the tea monk—a roving therapist with the job description “listen to people, give tea”—Sibling Dex (they/them). Dex finds themself unsatisfied with their work and questioning their value to society. They set out to solve their meaning crisis in the way monks in literature have done for generations: by climbing a mountain (quite literally, in Dex’s case). However, upon returning from the mountain and their low-tech lifestyle with their new friend Mosscap in tow, they make it quite clear that anarco-primitivism does not accurately reflect their views:

The thing about fucking off to the woods is that unless you are a very particular, very rare sort of person, it does not take long to understand why people left said woods in the first place. Houses were invented for excellent reasons, as were shoes, plumbing, pillows, heaters, washing machines, paint, lamps, soap, refrigeration, and all the other countless trappings humans struggle to imagine life without.

The anarcho-primitivist sees technology and industrialization as the cause of our current climate collapse, but Sibling Dex is critical of this view while simultaneously turning a critical eye on the technology itself if it would jeopardize a sustainable world.

the moment they pedaled their wagon out of the wilderness and onto the highway, Dex felt the indescribable relief of switching back to the flip side of that equation—the side in which humans had made existence as comfortable as technology would sustainably allow.

Emphasis mine. This is similar to the view taken by another group over 200 years ago in pre-Industrial England. Becky Chambers’ vision of a de-growth future, and the broader de-growth movement, should instead be seen through the lens of their ideas instead: the 19ᵗʰ century textile workers and followers of General Ludd.

The Luddites are remembered in pop culture only through the capitalist propaganda that sought to discredit their uprising, and this also leads to frequent comparisons with anarco-primitivists or assertions that the Luddites wished to return to a pre-industrial world. But unlike the anarco-primitivists with their critique of civilization and industry, the Luddites—on the whole—weren’t anti-industrialist at all. Quite the contrary, they were often skilled machinists who made improvements and fixes to the engines and frames they would later smash.

In his book Blood in the Machine: The Origins of the Rebellion Against Big Tech Brian Merchant describes the source of their ire:

Machinery, or technology, gets painted as the main target of the Luddites’ hatred and attacks, but the ultimate source of their rage was the factory system that those machines made possible. It was not the gig mill alone, nor the wide frames or power looms—it was the specific mode of domination over workers that the factory created that they felt such deep trepidation and anger toward.

This echo’s a quote from A Prayer for the Crown-Shy when Sibling Dex gets into a sectarian debate with Mx. Avery who argues the anarco-primitivist position against Dex’s more mainstream (for the world of Panga) views. Dex says:

“I’d say there’s no harm in any sort of construct so long as said construct has been proven to do no harm.”

Sound familiar? This mirrors the Luddist critique of the industrial revolution in a startlingly succinct manner. It was not civilization, or the machines themselves, which the Luddites eschewed, it was the factory model they enabled. Even the name used for Panga’s troubled past, the “factory age”, seems chosen to reflect the shift in working conditions the Luddites were trying to avert. There is no harm in the robot Mosscap, nor in the power loom, but the use to which they were put by the factories caused great harm never the less (for the workers in both cases, but I doubt the power looms experienced the hardship of robots, even if both are objects according to Mosscap itself). While Mx. Avery, chooses to eschew all post-industrial machines, Dex chooses instead to evaluate each machine based only on whether it is used to do harm.

This is the difference, in essence, between anarco-primitivism and what we might call “new Luddism”. The anarco-primitivist may see the gig economy forcing workers into long hours for little pay that is governed by obtuse algorithms or AI designed to make the company the most money at their expense and say “the cause of this is industrialization and civilization”. Or the casual news consumer may read the headline “The Robots Are Coming For Our Jobs!” and blame the robots. Chambers asserts that neither of these things are the problem. As Merchant put it:

If the Luddites have taught us anything, it’s that robots aren’t taking our jobs. Our bosses are.

Or, as Chambers puts it:

when extractive factories stayed open all twenty hours of the day without a single pair of human hands at work in them—despite the desperate need for those same hands to find some sort, any sort of employment … We had bastardized constructs to the point that it was killing us.

In both cases we are the problem and we should think critically about new technologies based on how they affect people. Do they provide comfort without harm, or harm for the sake of comfort?

It’s a common criticism of Solar Punk as a literary and artistic movement that it does not address the period of change between the future world and today. From the Pangan culture and religion we can infer that technology is embraced only in so far as it serves humanity and the environment, and that this wasn’t always so. What we don’t know is what cultural or political calamity might have happened to change and unify the minds of Panga’s various peoples. Chambers doesn’t tell us how the people of Panga reacted after the Awakening, when the robots woke up and went on strike, or what the path from their factory age to the thoughtful, low-tech world of the novellas was. Perhaps it required something similar to the World War III that sparked the fully automated luxury space Communism of the Star Trek future, or the uninhabitable earth that led to the anarchist Exodan society in Chambers' Wayfarers series, or perhaps it was a peaceful and gradual transition: we just don’t know. Panga’s factory age may or may not have been ended by Enoch’s hammer, but even if their future wasn’t created by the actions of Luddites it is still a reflection of what could be if we embrace Luddist thinking about technology. By contrast the Luddite revolution of 1812, the brutal way the workers were put down, and the resulting society that we’ve inherited today provide us a warning from the past about what can happen if we don’t.


Want to read any of the books in this article? Don’t support the factory owners, support the Luddites and robot workers of the world! Check if your local library has them first, and if not get them on my bookshop to support me and your local bookstore at the same time! The other bookshop.org links in this article are also affiliate links.

If you think others should read these books, consider donating a copy to a Little Free Library in Cobb County, GA by purchasing them through this wish list! All purchases from this list go in Little Free Libraries around the Smyrna and Marietta, GA areas.

August 28, 2024 16:40

August 21, 2024

Erlang Solutions

The Diversity & Inclusion Programme: Our Pledge

As technology becomes increasingly integrated into our lives, the minds behind it must come from diverse backgrounds. Different viewpoints lead to better solutions, ensuring that the tech we create addresses the needs of a global audience.

At Erlang Solutions, we believe that a diverse workforce is a catalyst for creativity and progress. By sponsoring the Diversity & Inclusion Programme for Code BEAM events, we’re reinforcing our commitment to creating a tech landscape that is reflective of the world we live in.

Diversity isn’t just a buzzword – it’s a fundamental pillar of progress. Erlang Solutions’ sponsorship of the Diversity & Inclusion Programme at Code BEAM aligns perfectly with our values. We’re excited to be part of an event that encourages open dialogue, showcases diverse talent, and paves the way for a more inclusive tech industry. 

– Jo Galt, Talent Manager.

The Diversity & Inclusion Programme focuses on empowering ethnic minorities, different gender identities and people with disabilities. 

But we do recognise there are many ways to be diverse. If you feel like you identify with any aspect of our goals, we encourage you to apply.

The post The Diversity & Inclusion Programme: Our Pledge appeared first on Erlang Solutions.

by Erlang Solutions Team at August 21, 2024 13:23

August 16, 2024

Daniel Pocock

ClueCon 2024 photos

ClueCon has just finished. Here are some of my photos.

Monday, pizza night

 

Rita Lopes, David Duffet, Bianca Brisc, ClueCon 2024, Signalwire

 

Gretchen Atkins, ClueCon 2024, Signalwire

Tuesday

 

Anthony Minessale, ClueCon 2024, Signalwire

 

Anthony Minessale, ClueCon 2024, Signalwire

 

Diego Gosmar, ClueCon 2024, Signalwire

 

Diego Gosmar, ClueCon 2024, Signalwire

Tuesday, Gigabit reception and 20th birthday party for ClueCon

 

Cake, ClueCon 2024, Signalwire

 

Anthony Minessale, Brian West, Michael Jerris, Abigail Minessale, ClueCon 2024, Signalwire

 

Anthony Minessale, Brian West, ClueCon 2024, Signalwire

 

Anthony Minessale, Michael Jerris, Brian West, ClueCon 2024, Signalwire

 

Abigail Minessale, Dani Plicka, ClueCon 2024, Signalwire

 

Abigail Minessale, Evan McGee, ClueCon 2024, Signalwire

 

ClueCon 2024, Signalwire

 

ClueCon 2024, Signalwire

 

ClueCon 2024, Signalwire

 

Kat, ClueCon 2024, Signalwire

 

Fred Posner, Kamailio, ClueCon 2024, Signalwire

Wednesday, panel discussion

 

Luca Pradovera, Jakub Karolczyk, Chris Rienzo, Michael Jerris, Brian West, Anthony Minessale, ClueCon 2024, Signalwire

Wednesday, Casino night

 

Jeff Pulver, ClueCon 2024, Signalwire

 

Gretchen Atkins, ClueCon 2024, Signalwire

Thursday, Dangerous Demos

 

Anthony Minessale, Brian West, Bianca Brisca, ClueCon 2024, Signalwire

 

David Duffet, Bianca Brisca, Daniel-Constatin Mierla, ClueCon 2024, Signalwire

 

Andy Smith, James Body, Dangerous Demos, ClueCon 2024, Signalwire

 

Daniel-Constatin Mierla, Diego Gosmar, ClueCon 2024, Signalwire

 

ClueCon 2024, Signalwire

 

Abigail Minessale, Bianca Brisca, ClueCon 2024, Signalwire

 

Gretchen Atkins, David Duffet, ClueCon 2024, Signalwire

Thursday, final raffle prize

Seven Du from China won the Macbook. Congratulations.

 

Seven Du, Anthony Minessale, ClueCon 2024, Signalwire

August 16, 2024 07:30

August 15, 2024

Erlang Solutions

Elixir Blog Round-Up

Welcome to our first-ever Elixir blog round-up! 

This is your guide to some of our most insightful articles on the Elixir programming language. Our experts have written several posts to further your knowledge, regardless of where you’re at in your Elixir journey. 

So whether you’re a business leader looking to discover Elixir’s benefits, a seasoned developer looking for the latest Elixir updates, or just new to the language, we’ll have an article to keep you covered.

What is Elixir?

What is Elixir?

New to Elixir? ‘What is Elixir?’ is an in-depth introduction to the renowned programming language. It details Elixir’s history and its foundation on the Erlang Virtual Machine (BEAM). It also breaks down the practical application of Elixir across various domains, including web development, embedded systems and real-time applications.

You can also find out more about Elixir’s vibrant community, extensive tools, and practical applications in major companies, proving its undeniable relevance to the community.

Comparing Elixir vs Java

Elixir vs Java

Are you curious to learn how Elixir stacks up against Java in real-world applications? 

In ‘Comparing Elixir vs Java’ by Attila Stragli, read about why Elixir’s lightweight processes, built-in fault tolerance, and concurrency make it the go-to choice for scalable, resilient systems—particularly when compared to Java’s more traditional approach. 

Explore the nuances of its performance, ease of use, and which language truly shines under pressure.

A Comprehensive Guide to Elixir v Ruby

Choosing the right programming language is key to defining a long-term business strategy. If you’re weighing out Elixir and Ruby, understanding each language’s strengths and potential trade-offs can hugely impact your decision.

In ‘A Comprehensive Guide to Elixir v Ruby’, we explore how Elixir’s scalability and fault tolerance might serve your growing business needs. Meanwhile, Ruby’s ease of use and mature ecosystem could streamline your operations. Our detailed analysis can help you make an informed choice that aligns with your company’s strategic goals and future growth.

Fastest Programming Language- Making the Case for Elixir

Concerned about speed?

Choosing the fastest programming language can significantly impact a business’s performance and adaptability. In Fastest Programming Language: Making the Case for Elixir,’ the team explains why Elixir as a language stands out among its peers. Discover how its unique features can elevate your development process and why it might be the ideal choice for your next project.

Why Elixir is the Programming Language You Should Learn in 2024

We might be more than halfway through the year, but it’s never too late to develop your skills!

Discover Why Elixir Programming is the Language You Should Learn in 2024’ might be your ideal next step. We explore Elixir’s user-friendly nature, its robust performance under high traffic, and promising career opportunities. 

That combined with its vibrant community, versatile tooling, and full-stack development capabilities makes it an attractive choice for modern developers.

To conclude

Thank you for exploring our first Elixir blog round-up! We hope that our curated guide provides valuable information to support your Elixir journey. If you’d discuss how Elixir can benefit your projects, feel free to contact the team.

The post Elixir Blog Round-Up appeared first on Erlang Solutions.

by Erlang Solutions Team at August 15, 2024 08:55

August 08, 2024

The XMPP Standards Foundation

The XSF signs Open Letter to the European Commission

As currently many other organisations doing, the XMPP Standards Foundation (XSF) has decided to also sign the Open Letter to the European Commission.

The European Union must keep funding free software

Initially published by petites singularités. English translation provided by OW2.

If you want to sign the letter, please publish the letter on your website and complete the table below.

Open Letter to the European Commission

Since 2020, Next Generation Internet (NGI) programmes, part of European Commission’s Horizon programme, fund free software in Europe using a cascade funding mechanism (see for example NGI0 Commons Fund). This year, according to the Horizon Europe working draft detailing funding programmes for 2025, we notice that Next Generation Internet is not mentioned any more as part of Cluster 4.

NGI programmes have shown their strength and importance to supporting the European software infrastructure, as a generic funding instrument to fund digital commons and ensure their long-term sustainability. We find this transformation incomprehensible, moreover when NGI has proven efficient and economical to support free software as a whole, from the smallest to the most established initiatives. This ecosystem diversity backs the strength of European technological innovation, and maintaining the NGI initiative to provide structural support to software projects at the heart of worldwide innovation is key to enforce the sovereignty of a European infrastructure. Contrary to common perception, technical innovations often originate from European rather than North American programming communities, and are mostly initiated by small-scaled organisations.

Previous Cluster 4 allocated 27 million euros to:

  • “Human centric Internet aligned with values and principles commonly shared in Europe” ;
  • “A flourishing internet, based on common building blocks created within NGI, that enables better control of our digital life” ;
  • “A structured ecosystem of talented contributors driving the creation of new internet commons and the evolution of existing internet commons”.

In the name of these challenges, more than 500 projects received NGI funding in the first 5 years, backed by 18 organisations managing these European funding consortia.

NGI contributes to a vast ecosystem, as most of its budget is allocated to fund third parties by the means of open calls, to structure commons that cover the whole Internet scope - from hardware to application, operating systems, digital identities or data traffic supervision. This third-party funding is not renewed in the current program, leaving many projects short on resources for research and innovation in Europe.

Moreover, NGI allows exchanges and collaborations across all the Euro zone countries as well as “widening countries” 1, currently both a success and an ongoing progress, likewise the Erasmus programme before us. NGI also contributes to opening and supporting longer relationships than strict project funding does. It encourages implementing projects funded as pilots, backing collaboration, identification and reuse of common elements across projects, interoperability in identification systems and beyond, and setting up development models that mix diverse scales and types of European funding schemes.

While the USA, China or Russia deploy huge public and private resources to develop software and infrastructure that massively capture private consumer data, the EU can’t afford this renunciation. Free and open source software, as supported by NGI since 2020, is by design the opposite of potential vectors for foreign interference. It lets us keep our data local and favors a community-wide economy and know-how, while allowing an international collaboration.

This is all the more essential in the current geopolitical context: the challenge of technological sovereignty is central, and free software allows to address it while acting for peace and sovereignty in the digital world as a whole.

In this perspective, we urge you to claim for preserving the NGI programme as part of the 2025 funding programme.

Statement by the XMPP Standards Foundation

The XMPP Standards Foundation supports this initiative as well as the statements made. In the past, many XMPP projects have been funded by NGI programmes to enhance realtime infrastructure using established XMPP standards. These funds significantly helped drive innovation in a community with two decades of history in the European digital landscape.

These are some of the funded projects:

About the XMPP Standards Foundation

The XMPP Standards Foundation (also known as the XSF and formerly the Jabber Software Foundation) is an independent, nonprofit standards development organisation whose primary mission is to define open protocols for presence, instant messaging, and real-time communication and collaboration on top of the IETF’s Extensible Messaging and Presence Protocol (XMPP).


  1. As defined by Horizon Europe, widening Member States are Bulgaria, Croatia, Cyprus, the Czech Republic, Estonia, Greece, Hungary, Latvia, Lituania, Malta, Poland, Portugal, Romania, Slovakia and Slovenia. Widening associated countries (under condition of an association agreement) include Albania, Armenia, Bosnia, Feroe Islands, Georgia, Kosovo, Moldavia, Montenegro, Morocco, North Macedonia, Serbia, Tunisia, Turkey and Ukraine. Widening overseas regions are : Guadeloupe, French Guyana, Martinique, Reunion Island, Mayotte, Saint-Martin, The Azores, Madeira, the Canary Islands. ↩︎

August 08, 2024 00:00

August 05, 2024

The XMPP Standards Foundation

The XMPP Newsletter July 2024

XMPP Newsletter Banner

XMPP Newsletter Banner

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

XSF Announcements

If you are interested to join the XMPP Standards Foundation as a member, please apply until August 18th, 2024!.

XMPP and Google Summer of Code 2024

The XSF has been accepted as a hosting organisation at GSoC in 2024 again! These XMPP projects have received a slot and have kicked-off with coding:

XSF and Google Summer of Code 2024

XSF and Google Summer of Code 2024

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 Articles

XMPP Software News

XMPP Clients and Applications

  • Rivista 0.1 has been released.
  • Psi+ 1.5.2033 portable has been released.
  • Psi+ 1.5.2029 through 1.5 2038 installer have been released.
  • Gajim 1.9.2 has been released and comes with an important OMEMO encryption fix, native notifications on Windows, plus usability improvements. Also, Gajim 1.9.3 has been released, which fixes an issue with the MS Store installer and brings some improvements.
  • Monal 6.4.1 has been released with quite a few fixes and updated translations. ATTENTION, this is the last release that will support macOS 11 + 12 and the last release that will support iOS 14 + 15. Furthermore, Monal IM got selected in another funding round by the EU’s NGI via the NLnet Foundation NGI0 Entrust Fund to work on some important features. Namely: Implement Dialpad, Rewrite Chat UI, Implement Message Reactions, Rich Replies and Stickers, XSF work and a documentation of Monal’s internals. You can find out more on the Monal IM Blog post.
  • Movim 0.26 has been released. Featuring Custom Emojis, Codeblock support in messages, better handling of spam messages, updated message moderation and retraction and also some bug fixes. Movim is also happy to announce that it was selected by the NLnet Foundation to receive funds through the NGI0 Core to work on a large set of exciting features around video-conferencing on the platform, including one-to-many audio and video calls. Some more specifics and technical blogs posts will be published soon.
Movim 0.26 with custom emojis

Movim 0.26 with custom emojis

XMPP Servers

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-0492 (Chat notification settings)
    • 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

  • Version 0.1.1 of XEP-0484 (Fast Authentication Streamlining Tokens)
    • Link to latest draft version (09) of the HT SASL mechanism. (lnj)
  • Version 0.2.0 of XEP-0484 (Fast Authentication Streamlining Tokens)
    • Added an XML Schema.
    • Fixed text where ‘count’ was assumed to be an element, not an attribute.
    • Fixed indentation in a few examples. (egp)
  • Version 0.4.2 of XEP-0440 (SASL Channel-Binding Type Capability)
    • Add an XML schema.
    • Mention that this specification does add a new namespace that should go to the registrar.
    • Fix indentation, typos, misuse of '' vs. </> for elements, etc. (egp)
  • Version 0.1.2 of XEP-0491 (WebXDC)
    • Suggest what to use for selfAddr
    • Add acknowledgements (spw)

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 XEP moved to Stable this month.

Deprecated

  • No XEP deprecated this month.

Rejected

  • No XEP 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 an 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, 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

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.

August 05, 2024 00:00

August 01, 2024

Erlang Solutions

Erlang Solutions wins business with BoardClic in a new era of collaboration

Erlang Solutions, a world-leading provider of software development and consultancy services, is pleased to announce its latest customer win with BoardClic, the leading platform for digital board performance reviews.

Following a successful Elixir code and architecture review, Erlang Solutions has been appointed to deliver advanced Elixir development for BoardClic.

Commenting on the latest partnership, Erik Schön, Business Unit Leader at Erlang Solutions said: ”We are excited to continue our relationship with BoardClic.Their innovative approach to board performance software aligns perfectly with our commitment to delivering robust and scalable solutions.”

Johan Tell, VP of Engineering at BoardClic, added “After receiving a comprehensive code and architecture review from Erlang Solutions, we quickly identified that they had the expertise needed to enhance our platform capabilities. We look forward to continuing to work with the team to further our growth goals.”

BoardClic is recognised as one of the top 30 fastest-growing technology companies in Sweden in 2023, experiencing an impressive growth rate of 1112% over the past four years.

With over 20 years of expertise, Erlang Solutions is renowned for its world-leading consultants in Erlang, Elixir, and beyond. The company delivers efficient and reliable system solutions for some of the world’s most ambitious companies.

The post Erlang Solutions wins business with BoardClic in a new era of collaboration appeared first on Erlang Solutions.

by Erlang Solutions Team at August 01, 2024 10:30

July 29, 2024

Gajim

Gajim 1.9.3

Gajim 1.9.3 fixes an issue with the MS Store installer and brings some improvements. Thank you for all your contributions!

What’s New

If you had issues starting Gajim from the Microsoft Store, Gajim 1.9.3 should fix these issues.

Thanks to our contributors @nicoco and @mesonium, Gajim received some improvements regarding message Displayed Markers and highlight colors. Furthermore, drag and drop for file transfers has been fixed in Flatpak installs.

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.

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

Donate via Liberapay:

July 29, 2024 00:00

July 22, 2024

JMP

Newsletter: Calls from SIP; Potential New SIM Plan

Hi everyone!

Welcome to the latest edition of your pseudo-monthly JMP update!

In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; Share one number with multiple people.

Access to our new SMS routes is slowly rolling out, with some users having been moved over already. The process of moving people is a bit slower than we’d hoped, but it is coming along. Let support know if this is a priority for you.

The JMP Data Plan has for some time been providing an option for people who want a privacy-conscious mobile data option for small usage. We do receive feedback from time to time that people would like a similar plan built for heavy data users. We are contemplating adding an “unlimited” (100GB full speed, throttled after) plan to the lineup. If this is you, please reach out to us at support or in the chatroom to let us know of your interest. Pricing is still being worked out, but will likely be in the $80-90 per month range. We may also have an option to access JMP voice and SMS services over the SIM if there is interest.

We have quietly rolled out a feature to allow any JMP customer to receive incoming voice calls from only SIP. While Cheogram SIP has allowed calls to your Jabber network app for some time, calls routed to sip:+yournumber@jmp.chat now ring according to your JMP account settings, including going to your JMP voicemail if not answered. This can be useful in conjunction with services that support forwarding to SIP, or from any sip-broker compatible service dial *10869 followed by a JMP number. This includes calling from any phone number in the world using the SIP Broker access numbers.

Cheogram Android 2.15.3-2 was released this month, with bug fixes and new features including:

  • Animated custom emoji
  • Rich replies, including small image preview and jump-to-parent
  • Hide reply quote if it’s just the exact previous message
  • Allow storing all media in cache on a per-chat basis
  • Optional rich text mode
  • Option to auto-download any size on unmetered networks
  • Use custom tabs for opening links
  • Menu to delete files from media browser
  • Bold timestamp on attention messages
  • Start a message with @mods to ping active moderators in a channel
  • Fix password change
  • Fix unbanning users in channel

Come out and see us at FOSSY 2024! JMP will have a booth and several of us will be giving talks as well.

To learn what’s happening with JMP between newsletters, here are some ways you can find out:

Thanks for reading and have a wonderful rest of your week!

by Stephen Paul Weber at July 22, 2024 18:23

Monal IM

New NLNet Funding

We are pleased to announce that we got selected in another funding round by the EU’s NGI via the NLnet Foundation NGI0 Entrust Fund to work on some important features in Monal.

In short this consists of the following tasks (in no special order).

  • Implement Dialpad: Add Dialpad to our Call-UI and backend code to be able to send DTMF tones in A/V calls. This will make Monal fully compatible with jmp.chat, like Snikket is already.
  • Rewrite Chat UI: Our current chat UI is still UIKit-based and it’s hard to improve it or fix some UI glitches. We want to rewrite and modernize the whole chat UI using SwiftUI. This will not only simplify maintenance a lot and allow us to fix these UI glitches, but also enable us to implement modern XMPP features like message reactions, message styling, message replies or mentions.
  • UI work: Implement Message Reactions, Rich Replies and Stickers: Implement UI and backend for message reactions (XEP-0444), rich replies (XEP-0461) and Stickers, once the chat UI is ported to SwiftUI
  • XSF work: After having successfully worked on the SASL2 XEP-suite, I want to modernize XEP-0389: Extensible In-Band Registration to also send only password hashes instead of cleartext passwords (similar to password upgrades specced in XEP-0480: SASL Upgrade Tasks)
  • Write documentation of Monal internals: After having started to publish a blog series and wiki articles about Monal’s internals (beginning with the Handlers Framework), I want to publish blog and wiki articles on our XML query-language (intentionally based on the XPath-like syntax of Prosody’s query language), the PubSub/PEP framework, Model-Classes used as data sources for our UI (MLContact, MLMessage etc.) and possibly more.

Thanks again to NLNet for fund this!

July 22, 2024 00:00

July 19, 2024

Gajim

Gajim 1.9.2

Gajim 1.9.2 brings an important OMEMO encryption fix, native notifications on Windows, usability improvements, and many bugfixes. Thank you for all your contributions!

What’s New

For some versions now, Windows offers a native notification system, including a notification center for unread notifications, notification settings, etc. If you are running Windows 10 (specifically build 10240) or later versions, Gajim will now use these native notifications.

Thanks to our contributor @nicoco, notifications for new messages from group chats now show the group chat’s avatar including the sender’s avatar.

Last but not least, an annoying issue with OMEMO encrypted messages has been fixed, where people would have broken sessions after being offline for a while.

This release also comes with many bugfixes. 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.

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

Donate via Liberapay:

July 19, 2024 00:00

July 18, 2024

ProcessOne

ejabberd 24.02

🚀 Introducing ejabberd 24.02: A Huge Release!

ejabberd 24.02 has just been release and well, this is a huge release with 200 commits and more in the libraries. We’ve packed this update with a plethora of new features, significant improvements, and essential bug fixes, all designed to supercharge your messaging infrastructure.


🌐 Matrix Federation Unleashed: Imagine seamlessly connecting with Matrix servers – it’s now possible! ejabberd breaks new ground in cross-platform communication, fostering a more interconnected messaging universe. We have still some ground to cover and for that we are waiting for your feedback.
🔐 Cutting-Edge Security with TLS 1.3 & SASL2: In an era where security is paramount, ejabberd steps up its game. With support for TLS 1.3 and advanced SASL2 protocols, we increase the overall security for all platform users.
🚀 Performance Enhancements with Bind 2: Faster connection times, especially crucial for mobile network users, thanks to Bind 2 and other performance optimizations.
🔄 User gains better control over on their messages: The new support for XEP-0424: Message Retraction allows users to manage their message history and remove something they posted by mistake.
🔧 Optimized server pings by relying on an existing mechanism coming from XEP-0198
📈 Streamlined API Versioning: Our refined API versioning means smoother, more flexible integration for your applications.
🧩 Enhanced Elixir, Mix and Rebar3 Support

If you upgrade ejabberd from a previous release, please review those changes:

A more detailed explanation of those topics and other features:

Matrix federation

ejabberd is now able to federate with Matrix servers. Detailed instructions to setup Matrix federation with ejabberd will be detailed in another post.

Here is a quick summary of the configuration steps:

First, s2s must be enabled on ejabberd. Then define a listener that uses mod_matrix_gw:

listen:
  -
    port: 8448
    module: ejabberd_http
    tls: true
    certfile: "/opt/ejabberd/conf/server.pem"
    request_handlers:
      "/_matrix": mod_matrix_gw

And add mod_matrix_gw in your modules:

modules:
  mod_matrix_gw:
    matrix_domain: "domain.com"
    key_name: "somename"
    key: "yourkeyinbase64"

Support TLS 1.3, Bind 2, SASL2

Support for XEP-0424 Message Retraction

With the new support for XEP-0424: Message Retraction, users of MAM message archiving can control their message archiving, with the ability to ask for deletion.

Support for XEP-0198 pings

If stream management is enabled, let mod_ping trigger XEP-0198 <r/>equests rather than sending XEP-0199 pings. This avoids the overhead of the ping IQ stanzas, which, if stream management is enabled, are accompanied by XEP-0198 elements anyway.

Update the SQL schema

The table archive has a text column named origin_id (see commit 975681). You have two methods to update the SQL schema of your existing database:

If using MySQL or PosgreSQL, you can enable the option update_sql_schema and ejabberd will take care to update the SQL schema when needed: add in your ejabberd configuration file the line update_sql_schema: true

If you are using other database, or prefer to update manually the SQL schema:

  • MySQL default schema:
ALTER TABLE archive ADD COLUMN origin_id varchar(191) NOT NULL DEFAULT '';
ALTER TABLE archive ALTER COLUMN origin_id DROP DEFAULT;
CREATE INDEX i_archive_username_origin_id USING BTREE ON archive(username(191), origin_id(191));
  • MySQL new schema:
ALTER TABLE archive ADD COLUMN origin_id varchar(191) NOT NULL DEFAULT '';
ALTER TABLE archive ALTER COLUMN origin_id DROP DEFAULT;
CREATE INDEX i_archive_sh_username_origin_id USING BTREE ON archive(server_host(191), username(191), origin_id(191));
  • PostgreSQL default schema:
ALTER TABLE archive ADD COLUMN origin_id text NOT NULL DEFAULT '';
ALTER TABLE archive ALTER COLUMN origin_id DROP DEFAULT;
CREATE INDEX i_archive_username_origin_id ON archive USING btree (username, origin_id);
  • PostgreSQL new schema:
ALTER TABLE archive ADD COLUMN origin_id text NOT NULL DEFAULT '';
ALTER TABLE archive ALTER COLUMN origin_id DROP DEFAULT;
CREATE INDEX i_archive_sh_username_origin_id ON archive USING btree (server_host, username, origin_id);
  • MSSQL default schema:
ALTER TABLE [dbo].[archive] ADD [origin_id] VARCHAR (250) NOT NULL;
CREATE INDEX [archive_username_origin_id] ON [archive] (username, origin_id)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
  • MSSQL new schema:
ALTER TABLE [dbo].[archive] ADD [origin_id] VARCHAR (250) NOT NULL;
CREATE INDEX [archive_sh_username_origin_id] ON [archive] (server_host, username, origin_id)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
  • SQLite default schema:
ALTER TABLE archive ADD COLUMN origin_id text NOT NULL DEFAULT '';
CREATE INDEX i_archive_username_origin_id ON archive (username, origin_id);
  • SQLite new schema:
ALTER TABLE archive ADD COLUMN origin_id text NOT NULL DEFAULT '';
CREATE INDEX i_archive_sh_username_origin_id ON archive (server_host, username, origin_id);

Authentication workaround for Converse.js and Strophe.js

This ejabberd release includes support for XEP-0474: SASL SCRAM Downgrade Protection, and some clients may not support it correctly yet.

If you are using Converse.js 10.1.6 or older, Movim 0.23 Kojima or older, or any other client based in Strophe.js v1.6.2 or older, you may notice that they cannot authenticate correctly to ejabberd.

To solve that problem, either update to newer versions of those programs (if they exist), or you can enable temporarily the option disable_sasl_scram_downgrade_protection in the ejabberd configuration file ejabberd.yml like this:

disable_sasl_scram_downgrade_protection: true

Support for API versioning

Until now, when a new ejabberd release changed some API command (an argument renamed, a result in a different format…), then you had to update your API client to the new API at the same time that you updated ejabberd.

Now the ejabberd API commands can have different versions, by default the most recent one is used, and the API client can specify the API version it supports.

In fact, this feature was implemented seven years ago, included in ejabberd 16.04, documented in ejabberd Docs: API Versioning… but it was never actually used!

This ejabberd release includes many fixes to get API versioning up to date, and it starts being used by several commands.

Let’s say that ejabberd 23.10 implemented API version 0, and this ejabberd 24.02 adds API version 1. You may want to update your API client to use the new API version 1… or you can continue using API version 0 and delay API update a few weeks or months.

To continue using API version 0:
– if using ejabberdctl, use the switch --version 0. For example: ejabberdctl --version 0 get_roster admin localhost
– if using mod_http_api, in ejabberd configuration file add v0 to the request_handlers path. For example: /api/v0: mod_http_api

Check the details in ejabberd Docs: API Versioning.

ejabberd commands API version 1

When you want to update your API client to support ejabberd API version 1, those are the changes to take into account:
– Commands with list arguments
– mod_http_api does not name integer and string results
– ejabberdctl with list arguments
– ejabberdctl list results

All those changes are described in the next sections.

Commands with list arguments

Several commands now use list argument instead of a string with separators (different commands used different separators: ; : \\n ,).

The commands improved in API version 1:
add_rosteritem
oauth_issue_token
send_direct_invitation
srg_create
subscribe_room
subscribe_room_many

For example, srg_create in API version 0 took as arguments:

{"group": "group3",
 "host": "myserver.com",
 "label": "Group3",
 "description": "Third group",
 "display": "group1\\ngroup2"}

now in API version 1 the command expects as arguments:

{"group": "group3",
 "host": "myserver.com",
 "label": "Group3",
 "description": "Third group",
 "display": ["group1", "group2"]}

mod_http_api not named results

There was an incoherence in mod_http_api results when they were integer/string and when they were list/tuple/rescode…: the result contained the name, for example:

$ curl -k -X POST -H "Content-type: application/json" -d '{}' "http://localhost:5280/api/get_loglevel/v0"
{"levelatom":"info"}

Staring in API version 1, when result is an integer or a string, it will not contain the result name. This is now coherent with the other result formats (list, tuple, …) which don’t contain the result name either.

Some examples with API version 0 and API version 1:

$ curl -k -X POST -H "Content-type: application/json" -d '{}' "http://localhost:5280/api/get_loglevel/v0"
{"levelatom":"info"}

$ curl -k -X POST -H "Content-type: application/json" -d '{}' "http://localhost:5280/api/get_loglevel"
"info"

$ curl -k -X POST -H "Content-type: application/json" -d '{"name": "registeredusers"}' "http://localhost:5280/api/stats/v0"
{"stat":2}

$ curl -k -X POST -H "Content-type: application/json" -d '{"name": "registeredusers"}' "http://localhost:5280/api/stats"
2

$ curl -k -X POST -H "Content-type: application/json" -d '{"host": "localhost"}' "http://localhost:5280/api/registered_users/v0"
["admin","user1"]

$ curl -k -X POST -H "Content-type: application/json" -d '{"host": "localhost"}' "http://localhost:5280/api/registered_users"
["admin","user1"]

ejabberdctl with list arguments

ejabberdctl now supports list and tuple arguments, like mod_http_api and ejabberd_xmlrpc. This allows ejabberdctl to execute all the existing commands, even some that were impossible until now like create_room_with_opts and set_vcard2_multi.

List elements are separated with , and tuple elements are separated with :.

Relevant commands:
add_rosteritem
create_room_with_opts
oauth_issue_token
send_direct_invitation
set_vcard2_multi
srg_create
subscribe_room
subscribe_room_many

Some example uses:

ejabberdctl add_rosteritem user1 localhost testuser7 localhost NickUser77l gr1,gr2,gr3 both
ejabberdctl create_room_with_opts room1 conference.localhost localhost public:false,persistent:true
ejabberdctl subscribe_room_many user1@localhost:User1,admin@localhost:Admin room1@conference.localhost urn:xmpp:mucsub:nodes:messages,u

ejabberdctl list results

Until now, ejabberdctl returned list elements separated with ;. Now in API version 1 list elements are separated with ,.

For example, in ejabberd 23.10:

$ ejabberdctl get_roster admin localhost
jan@localhost jan   none    subscribe       group1;group2
tom@localhost tom   none    subscribe       group3

Since this ejabberd release, using API version 1:

$ ejabberdctl get_roster admin localhost
jan@localhost jan   none    subscribe       group1,group2
tom@localhost tom   none    subscribe       group3

it is still possible to get the results in the old syntax, using API version 0:

$ ejabberdctl --version 0 get_roster admin localhost
jan@localhost jan   none    subscribe       group1;group2
tom@localhost tom   none    subscribe       group3

ejabberdctl help improved

ejabberd supports around 200 administrative commands, and probably you consult them in the ejabberd Docs -> API Reference page, where all the commands documentation is perfectly displayed…

The ejabberdctl command-line script already allowed to consult the commands documentation, consulting in real-time your ejabberd server to show you exactly the commands that are available. But it lacked some details about the commands. That has been improved, and now ejabberdctl shows all the information, including arguments description, examples and version notes.

For example, the connected_users_vhost command documentation as seen in the ejabberd Docs site is equivalently visible using ejabberdctl:

$ ejabberdctl help connected_users_vhost
  Command Name: connected_users_vhost

  Arguments: host::binary : Server name

  Result: connected_users_vhost::[ sessions::string ]

  Example: ejabberdctl connected_users_vhost "myexample.com"
           user1@myserver.com/tka
           user2@localhost/tka

  Tags: session

  Module: mod_admin_extra

  Description: Get the list of established sessions in a vhost

Experimental support for Erlang/OTP 27

Erlang/OTP 27.0-rc1 was recently released, and ejabberd can be compiled with it. If you are developing or experimenting with ejabberd, it would be great if you can use Erlang/OTP 27 and report any problems you find. For production servers, it’s recommended to stick with Erlang/OTP 26.2 or any previous version.

In this sense, the rebar and rebar3 binaries included with ejabberd are also updated: now they support from Erlang 24 to Erlang 27. If you want to use older Erlang versions from 20 to 23, there are compatible binaries available in git: rebar from ejabberd 21.12 and rebar3 from ejabberd 21.12.

Of course, if you have rebar or rebar3 already installed in your system, it’s preferable if you use those ones, because probably they will be perfectly compatible with whatever erlang version you have installed.

Installers and ejabberd container image

The binary installers now include the recent and stable Erlang/OTP 26.2.2 and Elixir 1.16.1. Many other dependencies were updated in the installers, the most notable is OpenSSL that has jumped to version 3.2.1.

The ejabberd container image and the ecs container image have gotten all those version updates, and also Alpine is updated to 3.19.

By the way, this container image already had support to run commands when the container starts… And now you can setup the commands to allow them fail, by prepending the character !.

Summary of compilation methods

When compiling ejabberd from source code, you may have noticed there are a lot of possibilities. Let’s take an overview before digging in the new improvements:

  • Tools to manage the dependencies and compilation:
    • Rebar: it is nowadays very obsolete, but still does the job of compiling ejabberd
    • Rebar3: the successor of Rebar, with many improvements and plugins, supports hex.pm and Elixir compilation
    • Mix: included with the Elixir programming language, supports hex.pm, and erlang compilation
  • Installation methods:
    • make install: copies the files to the system
    • make prod: prepares a self-contained OTP production release in _build/prod/, and generates a tar.gz file. This was previously named make rel
    • make dev: prepares quickly an OTP development release in _build/dev/
    • make relive: prepares the barely minimum in _build/relive/ to run ejabberd and starts it
  • Start scripts and alternatives:
    • ejabberdctl with erlang shell: start/foreground/live
    • ejabberdctl with elixir shell: iexlive
    • ejabberd console/start (this script is generated by rebar3 or mix, and does not support ejabberdctl configurable options)

For example:
– the CI dynamic tests use rebar3, and Runtime tries to test all the possible combinations
– ejabberd binary installers are built using: mix + make prod
container images are built using: mix + make prod too, and started with ejabberdctl foreground

Several combinations didn’t work correctly until now and have been fixed, for example:
mix + make relive
mix + make prod/dev + ejabberdctl iexlive
mix + make install + ejabberdctl start/foregorund/live
make uninstall buggy has an experimental alternative: make uninstall-rel
rebar + make prod with Erlang 26

Use Mix or Rebar3 by default instead of Rebar to compile ejabberd

ejabberd uses Rebar to manage dependencies and compilation since ejabberd 13.10 4d8f770. However, that tool is obsolete and unmaintained since years ago, because there is a complete replacement:

Rebar3 is supported by ejabberd since 20.12 0fc1aea. Among other benefits, this allows to download dependencies from hex.pm and cache them in your system instead of downloading them from git every time, and allows to compile Elixir files and Elixir dependencies.

In fact, ejabberd can be compiled using mix (a tool included with the Elixir programming language) since ejabberd 15.04 ea8db99 (with improvements in ejabberd 21.07 4c5641a)

For those reasons, the tool selection performed by ./configure will now be:
– If --with-rebar=rebar3 but Rebar3 not found installed in the system, use the rebar3 binary included with ejabberd
– Use the program specified in option: --with-rebar=/path/to/bin
– If none is specified, use the system mix
– If Elixir not found, use the system rebar3
– If Rebar3 not found, use the rebar3 binary included with ejabberd

Removed Elixir support in Rebar

Support for Elixir 1.1 was added as a dependency in commit 01e1f67 to ejabberd 15.02. This allowed to compile Elixir files. But since Elixir 1.4.5 (released Jun 22, 2017) it isn’t possible to get Elixir as a dependency… it’s nowadays a standalone program. For that reason, support to download old Elixir 1.4.4 as a dependency has been removed.

When Elixir support is required, better simply install Elixir and use mix as build tool:

./configure --with-rebar=mix

Or install Elixir and use the experimental Rebar3 support to compile Elixir files and dependencies:

./configure --with-rebar=rebar3 --enable-elixir

Added Elixir support in Rebar3

It is now possible to compile ejabberd using Rebar3 and support Elixir compilation. This compiles the Elixir files included in ejabberd’s lib/ path. There’s also support to get dependencies written in Elixir, and it’s possible to build OTP releases including Elixir support.

It is necessary to have Elixir installed in the system, and configure the compilation using --enable-elixir. For example:

apt-get install erlang erlang-dev elixir
git clone https://github.com/processone/ejabberd.git ejabberd
cd ejabberd
./autogen.sh
./configure --with-rebar=rebar3 --enable-elixir
make
make dev
_build/dev/rel/ejabberd/bin/ejabberdctl iexlive

Elixir versions supported

Elixir 1.10.3 is the minimum supported, but:
– Elixir 1.10.3 or higher is required to build an OTP release with make prod or make dev
– Elixir 1.11.4 or higher is required to build an OTP release if using Erlang/OTP 24 or higher
– Elixir 1.11.0 or higher is required to use make relive
– Elixir 1.13.4 with Erlang/OTP 23.0 are the lowest versions tested by Runtime

For all those reasons, if you want to use Elixir, it is highly recommended to use Elixir 1.13.4 or higher with Erlang/OTP 23.0 or higher.

make rel is renamed to make prod

When ejabberd started to use Rebar2 build tool, that tool could create an OTP release, and the target in Makefile.in was conveniently named make rel.

However, newer tools like Rebar3 and Elixir’s Mix support creating different types of releases: production, development, … In this sense, our make rel target is nowadays more properly named make prod.

For backwards compatibility, make rel redirects to make prod.

New make install-rel and make uninstall-rel

This is an alternative method to install ejabberd in the system, based in the OTP release process. It should produce exactly the same results than the existing make install.

The benefits of make install-rel over the existing method:
– this uses OTP release code from rebar/rebar3/mix, and consequently requires less code in our Makefile.in
make uninstall-rel correctly deletes all the library files

This is still experimental, and it would be great if you are able to test it and report any problem; eventually this method could replace the existing one.

Just for curiosity:
– ejabberd 13.03-beta1 got support for make uninstall was added
ejabberd 13.10 introduced Rebar build tool and code got more modular
– ejabberd 15.10 started to use the OTP directory structure for ‘make install’, and this broke make uninstall

Acknowledgments

We would like to thank the contributions to the source code, documentation, and translation provided for this release by:

And also to all the people contributing in the ejabberd chatroom, issue tracker…

Improvements in ejabberd Business Edition

Customers of the ejabberd Business Edition, in addition to all those improvements and bugfixes, also get:

Push

  • Fix clock issue when signing Apple push JWT tokens
  • Share Apple push JWT tokens between nodes in cluster
  • Increase allowed certificates chain depth in GCM requests
  • Use x:oob data as source for image delivered in pushes
  • Process only https urls in oob as images in pushes
  • Fix jid in disable push iq generated by GCM and Webhook service
  • Add better logging for TooManyProviderTokenUpdated error
  • Make get_push_logs command generate better error if mod_push_logger not available
  • Add command get_push_logs that can be used to retrieve info about recent pushes and errors reported by push services
  • Add support for webpush protocol for sending pushes to safari/chrome/firefox browsers

MAM

  • Expand mod_mam_http_access API to also accept range of messages

MUC

  • Update mod_muc_state_query to fix subject_author room state field
  • Fix encoding of config xdata in mod_muc_state_query

PubSub

  • Allow pubsub node owner to overwrite items published by other persons (p1db)

ChangeLog

This is a more detailed list of changes in this ejabberd release:

Core

  • Added Matrix gateway in mod_matrix_gw
  • Support SASL2 and Bind2
  • Support tls-server-end-point channel binding and sasl2 codec
  • Support tls-exporter channel binding
  • Support XEP-0474: SASL SCRAM Downgrade Protection
  • Fix presenting features and returning results of inline bind2 elements
  • disable_sasl_scram_downgrade_protection: New option to disable XEP-0474
  • negotiation_timeout: Increase default value from 30s to 2m
  • mod_carboncopy: Teach how to interact with bind2 inline requests

Other

  • ejabberdctl: Fix startup problem when having set EJABBERD_OPTS and logger options
  • ejabberdctl: Set EJABBERD_OPTS back to "", and use previous flags as example
  • eldap: Change logic for eldap tls_verify=soft and false
  • eldap: Don’t set fail_if_no_peer_cert for eldap ssl client connections
  • Ignore hints when checking for chat states
  • mod_mam: Support XEP-0424 Message Retraction
  • mod_mam: Fix XEP-0425: Message Moderation with SQL storage
  • mod_ping: Support XEP-0198 pings when stream management is enabled
  • mod_pubsub: Normalize pubsub max_items node options on read
  • mod_pubsub: PEP nodetree: Fix reversed logic in node fixup function
  • mod_pubsub: Only care about PEP bookmarks options when creating node from scratch

SQL

  • MySQL: Support sha256_password auth plugin
  • ejabberd_sql_schema: Use the first unique index as a primary key
  • Update SQL schema files for MAM’s XEP-0424
  • New option sql_flags: right now only useful to enable mysql_alternative_upsert

Installers and Container

  • Container: Add ability to ignore failures in execution of CTL_ON_* commands
  • Container: Update to Erlang/OTP 26.2, Elixir 1.16.1 and Alpine 3.19
  • Container: Update this custom ejabberdctl to match the main one
  • make-binaries: Bump OpenSSL 3.2.1, Erlang/OTP 26.2.2, Elixir 1.16.1
  • make-binaries: Bump many dependency versions

Commands API

  • print_sql_schema: New command available in ejabberdctl command-line script
  • ejabberdctl: Rework temporary node name generation
  • ejabberdctl: Print argument description, examples and note in help
  • ejabberdctl: Document exclusive ejabberdctl commands like all the others
  • Commands: Add a new muc_sub tag to all the relevant commands
  • Commands: Improve syntax of many commands documentation
  • Commands: Use list arguments in many commands that used separators
  • Commands: set_presence: switch priority argument from string to integer
  • ejabberd_commands: Add the command API version as a tag vX
  • ejabberd_ctl: Add support for list and tuple arguments
  • ejabberd_xmlrpc: Fix support for restuple error response
  • mod_http_api: When no specific API version is requested, use the latest

Compilation with Rebar3/Elixir/Mix

  • Fix compilation with Erlang/OTP 27: don’t use the reserved word ‘maybe’
  • configure: Fix explanation of --enable-group option (#4135)
  • Add observer and runtime_tools in releases when --enable-tools
  • Update “make translations” to reduce build requirements
  • Use Luerl 1.0 for Erlang 20, 1.1.1 for 21-26, and temporary fork for 27
  • Makefile: Add install-rel and uninstall-rel
  • Makefile: Rename make rel to make prod
  • Makefile: Update make edoc to use ExDoc, requires mix
  • Makefile: No need to use escript to run rebar|rebar3|mix
  • configure: If --with-rebar=rebar3 but rebar3 not system-installed, use local one
  • configure: Use Mix or Rebar3 by default instead of Rebar2 to compile ejabberd
  • ejabberdctl: Detect problem running iex or etop and show explanation
  • Rebar3: Include Elixir files when making a release
  • Rebar3: Workaround to fix protocol consolidation
  • Rebar3: Add support to compile Elixir dependencies
  • Rebar3: Compile explicitly our Elixir files when --enable-elixir
  • Rebar3: Provide proper path to iex
  • Rebar/Rebar3: Update binaries to work with Erlang/OTP 24-27
  • Rebar/Rebar3: Remove Elixir as a rebar dependency
  • Rebar3/Mix: If dev profile/environment, enable tools automatically
  • Elixir: Fix compiling ejabberd as a dependency (#4128)
  • Elixir: Fix ejabberdctl start/live when installed
  • Elixir: Fix: FORMATTER ERROR: bad return value (#4087)
  • Elixir: Fix: Couldn’t find file Elixir Hex API
  • Mix: Enable stun by default when vars.config not found
  • Mix: New option vars_config_path to set path to vars.config (#4128)
  • Mix: Fix ejabberdctl iexlive problem locating iex in an OTP release

Full Changelog

https://github.com/processone/ejabberd/compare/23.10…24.02

ejabberd 24.02 download & feedback

As usual, the release is tagged in the Git source code repository on GitHub.

The source package and installers are available in ejabberd Downloads page. To check the *.asc signature files, see How to verify ProcessOne downloads integrity.

For convenience, there are alternative download locations like the ejabberd DEB/RPM Packages Repository and the GitHub Release / Tags.

The ecs container image is available in docker.io/ejabberd/ecs and ghcr.io/processone/ecs. The alternative ejabberd container image is available in ghcr.io/processone/ejabberd.

If you consider that you’ve found a bug, please search or fill a bug report on GitHub Issues.

The post ejabberd 24.02 first appeared on ProcessOne.

by Jérôme Sautret at July 18, 2024 15:55

ejabberd 24.07

🚀 Introducing ejabberd 24.07: Bugfix Release

This ejabberd 24.07 is mostly a bugfix release for the recent 24.06, and also includes a few improvements.

ejabberd 24.07

If you upgrade ejabberd from a previous release, please check the WebAdmin Config Changes.

A more detailed explanation of those topics and other features:

WebAdmin API permissions configuration

The ejabberd 24.06 release notes announced the Improved WebAdmin with commands usage, and mentioned some api_permissions configuration details, but it was not explicit enough about this fact: with the default ejabberd configuration, an admin was allowed to log in to WebAdmin from any machine, but was only allowed to run commands from the loopback IP address! The WebAdmin showed the page sections, but they were all empty. In addition, there was a bug that showed similar symptoms when entering the WebAdmin from one host and then logging in as an account in another host. Both problems and their solutions are described in #4249.

Please update your configuration accordingly, adding permission from web admin to execute all commands to accounts logged in with admin privilege:

api_permissions:
  "webadmin commands":
    from: ejabberd_web_admin
    who: admin
    what: "*"

Of course you can customize that access as much as you want: only from specific IP addresses, only to certain accounts, only for specific commands…

New option update_sql_schema_timeout

The new option update_sql_schema_timeout allows the schema update process to use longer timeouts. The default value is set to 5 minutes.

This also makes batch of schema updates to single table use transaction. This should help in not leaving table in inconsistent state if some update steps fail (unless you use MySQL where you can’t rollback changes to table schemas).

Acknowledgments

We would like to thank the contributions to the source code, documentation, and translation provided for this release by:

And also to all the people contributing in the ejabberd chatroom, issue tracker…

ChangeLog

This is a more detailed list of changes in this ejabberd release:

Core

  • ejabberd_options: Add trailing @ to @VERSION@ parsing
  • mod_http_api: Fix problem parsing tuples when using OTP 27 json library (#4242)
  • mod_http_api: Restore args conversion of {"k":"v"} to tuple lists
  • mod_matrix_gw: Add misc:json_encode_With_kv_lists and use it in matrix sign function
  • mod_muc: Output muc#roominfo_avatarhash in room disco info as per updated XEP-0486 (#4234)
  • mod_muc: Improve cross version handling of muc retractions
  • node_pep: Add missing feature item-ids to node_pep
  • mod_register: Send welcome message as chat too (#4246)
  • ejabberd_hooks: Support for ejabberd hook subscribers, useful for mod_prometheus
  • ejabberd.app: Don’t add iex to included_applications
  • make-installers: Fix path in scripts in regular user install (#4258)
  • Test: New tests for API commands

Documentation

  • mod_matrix_gw: Fix matrix_id_as_jid option documentation
  • mod_register: Add example configuration of welcome_message option
  • mix.exs: Add ejabberd example config files to the hex package
  • Update CODE_OF_CONDUCT.md

ext_mod

  • Fetch dependencies from hex.pm when mix is available
  • files_to_path is deprecated, use compile_to_path
  • Compile all Elixir files in a library with one function call
  • Improve error result when problem compiling elixir file
  • Handle case when contrib module has no *.ex and no *.erl
  • mix.exs: Include Elixir’s Logger in the OTP release, useful for mod_libcluster

Logs

  • Print message when starting ejabberd application fails
  • Use error_logger when printing startup failure message
  • Use proper format depending on the formatter (#4256)

SQL

  • Add option update_sql_schema_timeout to allow schema update use longer timeouts
  • Add ability to specify custom timeout for sql operations
  • Allow to configure number of restart in sql_transaction()
  • Make sql query in testsuite compatible with pg9.1
  • In mysql.sql, fix update instructions for the archive table, origin_id column (#4259)

WebAdmin

  • ejabberd.yml.example: Add api_permissions group for webadmin (#4249)
  • Don’t use host from url in webadmin, prefer host used for authentication
  • Fix number of accounts shown in the online-users page
  • Fix crash when viewing old shared roster groups (#4245)
  • Support groupid with spaces when making shared roster result (#4245)

Full Changelog

https://github.com/processone/ejabberd/compare/24.06…24.07

ejabberd 24.07 download & feedback

As usual, the release is tagged in the Git source code repository on GitHub.

The source package and installers are available in ejabberd Downloads page. To check the *.asc signature files, see How to verify ProcessOne downloads integrity.

For convenience, there are alternative download locations like the ejabberd DEB/RPM Packages Repository and the GitHub Release / Tags.

The ecs container image is available in docker.io/ejabberd/ecs and ghcr.io/processone/ecs. The alternative ejabberd container image is available in ghcr.io/processone/ejabberd.

If you consider that you’ve found a bug, please search or fill a bug report on GitHub Issues.

The post ejabberd 24.07 first appeared on ProcessOne.

by Jérôme Sautret at July 18, 2024 15:50

Erlang Solutions

Meet the team: Nico Gerpe

Welcome to our first-ever “Meet the Team” series!  In this first edition, we’ll be shining the spotlight on Nico Gerpe, the Business Unit Lead for the Americas team at Erlang Solutions. 

Nico discusses his role at Erlang Solutions, his latest explorations in the IoT and machine learning space and most importantly- fun Argentinian summer traditions!

Meet the Team Nico Gerpe

About Nico

What is your role at Erlang Solutions and where are you based?
My role is Business Unit Lead for the Americas team and I am based out of Buenos Aires, Argentina.

What are the current priorities for the Americas team? Are there any specific markets you are focusing on?
​​​Our priorities are growing our practices related to IoT, ML and DevOps on top of our main consultancy area of business. Our services and products benefit customers the most when they have already begun their digital journey and face challenges with their current tech stack. We help them overcome these obstacles and support their growth.

Which specific areas of IoT and machine learning are you planning to explore?
With regards to IoT, we are quite flexible and knowledgeable in managing multiple distributed devices, securing connections and handling vast areas of intercommunication. When it comes to machine learning, we are focusing on data processing/learning and computer vision.

Have you noticed any recent changes in the IoT and machine learning markets that have caught your attention?
Machine learning is evolving beyond training models. It is a way to consolidate and share data from multiple sources, creating significant value. What captured my attention was that it naturally gave me the solution as to how our IoT and ML practices were connected, to provide a comprehensive solution to our customers.

Do you have any fun plans for summer?
Going to the beach for at least a week.

Are there any fun summer Argentinian traditions during summertime?
A commonly accepted plan for any given Sunday is to gather at a house and light up a barbecue while enjoying the swimming pool. Eat late lunch, around 2 pm ish, for about 2 hours starting with picada, which is a mix of sausages, fries, pickles and white bread. Then a proper lunch consisting of barbecued cow, pork and/or chicken meat with salad options. After eating for almost two hours, we have a round of coffee and go back to the swimming pool. To sit back again and eat cake, candies, cookies, etc for another hour or so.

Final thoughts

That’s a wrap for our chat with Nico! 

The Americas team at Erlang Solutions is diving into some exciting areas of IoT and machine learning, helping businesses tackle their tech challenges and grow. 

From managing distributed devices to advancing in computer vision, there’s a lot to look forward to. Stay tuned for more fun and insightful conversations with our amazing team in the next editions of our “Meet the Team” series.

If you’d like to chat about anything IoT, drop the team a line.

The post Meet the team: Nico Gerpe appeared first on Erlang Solutions.

by Erlang Solutions Team at July 18, 2024 11:06

July 16, 2024

ProcessOne

ejabberd 24.06

🚀 Introducing ejabberd 24.06: Deep Work Release!

This new ejabberd 24.06 includes four months of work, close to 200 commits, including several minor improvements in the core ejabberd, and a lot of improvements in the administrative parts of ejabberd, like the WebAdmin and new API commands.

Brief summary

  • Webadmin rework
  • Improved documentation
  • Architecture and API improvements

If you upgrade ejabberd from a previous release, please review those changes:

A more detailed explanation of those topics and other features:

Support for Erlang/OTP 27 and Elixir 1.17

ejabberd support for Erlang/OTP 27.0 has been improved. In this sense, when using Erlang/OTP 27, the jiffy dependency is not needed, as an equivalent feature is already included in OTP.

The lowest supported Erlang/OTP version continues being 20.0, and the recommendation is using 26.2, which is in fact the one included in the binary installers and container images.

Regarding Elixir, the new 1.17 works correctly. The lowest Elixir supported version is 1.10.3… but in order to benefit from all the ejabberd features, it is highly recommended to use Elixir 1.13.4 or higher with Erlang/OTP 23.0 or higher.

SQL schema changes

There are no changes in the SQL schemas in this release.

Notice that ejabberd can take care to update your MySQL, PostgreSQL and SQLite database schema if you enable the update_sql_schema toplevel option.

That feature was introduced for beta-testing in ejabberd 23.10 and announced in the blog post Automatic schema update in ejabberd.

Starting in this ejabberd 24.06, the update_sql_schema feature is considered stable and the option is enabled by default!

UNIX Socket Domain

The sql_server top-level option now accepts the path to a unix socket domain, expressed as "unix:/path/to/socket", as long as you are using mysql or pgsql in the option sql_type.

Commands changed in API v2

This ejabberd 24.06 release introduces ejabberd Commands API v2. You can continue using API v1; or if you want to update your API client to use APIv2, those are the commands that changed and you may need to update in your client:

Support for banning an account has been improved in API v2:
ban_account stores the ban information in the account XML private storage, so that command requires mod_private to be enabled
get_ban_details shows information about the account banning, if any.
unban_account performs the reverse operation, getting the account to its previous status.

The result value of those two commands was modified to allow their usage in WebAdmin:
kick_user instead of returning an integer, it returns a restuple.
rooms_empty_destroy instead of returning a list of rooms that were destroyed, it returns a restuple.

As a side note, this command has been improved, but this change doesn’t affect the API:
join_cluster has been improved to work not only with the ejabberdctl command line script, but also with any other command frontend (mod_http_api, ejabberd_xmlrpc, ejabberd_web_admin, …).

New commands

Several new commands have been added, specially useful to generate WebAdmin pages:

Improved WebAdmin with commands usage

WebAdmin screenshot

ejabberd already has around 200 commands to perform many administrative tasks, both to get information about the server and its status, and also to perform operations with side-effects. Those commands have its input and output parameters clearly described, and also documented.

This release includes a set of functions (make_command/2 and /4, make_command_raw_value/3, make_table/2 and /4) to use all those commands to generate HTML content in the ejabberd WebAdmin: instead of writing again erlang code to perform those operations and then write code to format it and display as HTML… let’s have some frontend functions to call the command and generate the HTML content. With that new feature, writing content for WebAdmin is much easier if a command for that task already exists.

In this sense, most of the ejabberd WebAdmin pages have been rewritten to use the new make_command feature, many new pages are added using the existing commands. Also a few commands and pages are added to manage Shared Roster Groups.

WebAdmin screenshot

WebAdmin commands permissions configuration

Most WebAdmin pages use commands to generate the content, and access to those commands can be restricted using the api_permissions toplevel option.

The default ejabberd.yml configuration file already defines "admin access" that allows access from loopback IP address and accounts in the admin ACL to execute all commands except stop and start. So, no changes are required in the default configuration file to use the upgrade WebAdmin pages.

Now ejabberd_web_admin is another valid command frontend that can be specified in the from section. You can define fine-grained restrictions for accounts in WebAdmin, for example:

api_permissions:
  "webadmin commands":
    from:
      - ejabberd_web_admin
    who: admin
    what:
      - "*"
      - "![tag:oauth]"

WebAdmin hook changes

There are several changes in WebAdmin hooks that now provide the whole HTTP request instead of only some of its elements.

You can update your code easily, see:

  • webadmin_page_node: instead of Path, Query and Lang, gets Request
-webadmin_page_node(Acc, Node, Path, Query, Lang) ->
+webadmin_page_node(Acc, Node, #request{path = Path, q = Query, lang = Lang}) ->
  • webadmin_page_hostnode: instead of Path, Query and Lang gets Request
-webadmin_page_hostnode(Acc, Host, Node, Path, Query, Lang) ->
+webadmin_page_hostnode(Acc, Host, Node, #request{path = Path, q = Query, lang = Lang}) ->
  • webadmin_user: instead of just the Lang, gets the whole Request
-webadmin_user(Acc, User, Server, Lang) ->
+webadmin_user(Acc, User, Server, #request{lang = Lang}) ->
  • webadmin_menu_hostuser: new hook added:
+webadmin_menu_hostuser(Acc, Host, Username, Lang) ->
  • webadmin_page_hostuser: new hook added:
+webadmin_page_hostuser(Acc, Host, Username, Request) ->

internal command tag and any argument/result

During the development of the WebAdmin commands feature, it was noticed the necessity to define some commands that will be used by WebAdmin (or maybe also by other ejabberd code), but should NOT be accessed by command frontends (like ejabberdctl, mod_http_api, ejabberd_xmlrpc).

Such commands are identified because they have the internal tag.

Those commands can use any arbitrarily-formatted arguments/results, defined as any in the command.

Experimental make format and indent

If you use Emacs with erlang-mode, Vim with some Erlang indenter, VSCode, … they indent erlang code more or less similarly, but sometimes have some minor differences.

The new make format uses rebar3_format to format and indent files, with those restrictions:

  • Only formats a file if it contains a line with this string, and formats only starting in a line with @format-begin

  • Formatting can be disabled later in the file by adding another line that contains @format-end

  • Furthermore, it is later possible to enable formatting again in the same file, in case there is another piece of the file that should be automatically formatted.

Alternatively, the new make indent indents files using Emacs, it also replaces tabs with blankspaces and removes ending spaces. It can only indent one piece of code per file, the lines that finds between:

%% @indent-begin
...
%% @indent-end

New MUC room logging hooks

mod_muc_room now uses hooks instead of function calls to mod_muc_log, see #4191.

The new hooks available, in case you want to write an ejabberd module that logs MUC room messages:

  • muc_log_check_access_log(Acc, Host, From)
  • muc_log_get_url(Acc, StateData)
  • muc_log_add(Host, Type, Data, RoomJid, Opts)

Support for code automatic update

When running ejabberd in an interactive development shell started using relive, it automatically compiles and reloads the source code when you modify a source code file.

How to use this:

  • Compile ejabberd with Rebar3 (or Mix)
  • Start ejabberd with make relive
  • Edit some ejabberd source code file and save it
  • Sync (or ExSync) will compile and reload it automatically

Rebar3 notes:

  • To ensure Sync doesn’t act on dependencies that would produce many garbage log lines, the src_dirs option is used. However, now it only works if the parent directory is named “ejabberd”

  • Sync requires at least Erlang/OTP 21, which introduced the new try-catch syntax to retrieve the stacktrace

Mix note:

ejabberd Docs now using MkDocs

Several changes in ejabberd source code were done to produce markdown suitable for the new ejabberd Docs site, as announced two months ago: ejabberd Docs now using MkDocs

Acknowledgments

We would like to thank the contributions to the source code, documentation, and translation provided for this release by:

And also to all the people contributing in the ejabberd chatroom, issue tracker…

Improvements in ejabberd Business Edition

Customers of the ejabberd Business Edition, in addition to all those improvements and bugfixes, also get:

Pushy.me

  • Add support for the Pushy.me notification service for Mobile App

Android Push

  • Add support for the new FCMv1 API for Android Push
  • Improve errors reporting for wrong options in mod_gcm

Apple Push

  • Update support for Apple Push API
  • Add support for p12 certificate in mod_applepush
  • Add tls_verify option to mod_applepush
  • Improve errors reporting for wrong options in mod_applepush

Webpush

  • Properly initialize subject in Webpush

Push

  • Add new API commands setup_push, get_push_setup and delete_push_setup for managing push setup, with support for Apple Push, Android Push, Pushy.me and Webpush/Webhook

ChangeLog

This is a more detailed list of changes in this ejabberd release:

Core

  • econf: Add ability to use additional custom errors when parsing options
  • ejabberd_logger: Reloading configuration will update logger settings
  • gen_mod: Add support to specify a hook global, not vhost-specific
  • mod_configure: Retract Get User Password command to update XEP-0133 1.3.0
  • mod_conversejs: Simplify support for @HOST@ in default_domain option (#4167)
  • mod_mam: Document that XEP-0441 is implemented as well
  • mod_mam: Update support for XEP-0425 version 0.3.0, keep supporting 0.2.1 (#4193)
  • mod_matrix_gw: Fix support for @HOST@ in matrix_domain option (#4167)
  • mod_muc_log: Hide join/leave lines, add method to show them
  • mod_muc_log: Support allowpm introduced in 2bd61ab
  • mod_muc_room: Use ejabberd hooks instead of function calls to mod_muc_log (#4191)
  • mod_private: Cope with bookmark decoding errors
  • mod_vcard_xupdate: Send hash after avatar get set for first time
  • prosody2ejabberd: Handle the approved attribute. As feature isn’t implemented, discard it (#4188)

SQL

  • update_sql_schema: Enable this option by default
  • CI: Don’t load database schema files for mysql and pgsql
  • Support Unix Domain Socket with updated p1_pgsql and p1_mysql (#3716)
  • Fix handling of mqtt_pub table definition from mysql.sql and fix should_update_schema/1 in ejabberd_sql_schema.erl
  • Don’t start sql connection pools for unknown hosts
  • Add update_primary_key command to sql schema updater
  • Fix crash running export2sql when MAM enabled but MUC disabled
  • Improve detection of types in odbc

Commands API

  • New ban commands use private storage to keep ban information (#4201)
  • join_cluster_here: New command to join a remote node into our local cluster
  • Don’t name integer and string results in API examples (#4198)
  • get_user_subscriptions: Fix validation of user field in that command
  • mod_admin_extra: Handle case when mod_private is not enabled (#4201)
  • mod_muc_admin: Improve validation of arguments in several commands

Compile

  • ejabberdctl: Comment ERTS_VSN variable when not used (#4194)
  • ejabberdctl: Fix iexlive after make prod when using Elixir
  • ejabberdctl: If INET_DIST_INTERFACE is IPv6, set required option (#4189)
  • ejabberdctl: Make native dynamic node names work when using fully qualified domain names
  • rebar.config.script: Support relaxed dependency version (#4192)
  • rebar.config: Update deps version to rebar3’s relaxed versioning
  • rebar.lock: Track file, now that rebar3 uses loose dependency versioning
  • configure.ac: When using rebar3, unlock dependencies that are disabled (#4212)
  • configure.ac: When using rebar3 with old Erlang, unlock some dependencies (#4213)
  • mix:exs: Move xmpp from included_applications to applications

Dependencies

  • Base64url: Use only when using rebar2 and Erlang lower than 24
  • Idna: Bump from 6.0.0 to 6.1.1
  • Jiffy: Use Json module when Erlang/OTP 27, jiffy with older ones
  • Jose: Update to the new 1.11.10 for Erlang/OTP higher than 23
  • Luerl: Update to 1.2.0 when OTP same or higher than 20, simplifies commit a09f222
  • P1_acme: Update to support Jose 1.11.10 and Ipv6 support (#4170)
  • P1_acme: Update to use Erlang’s json library instead of jiffy when OTP 27
  • Port_compiler: Update to 1.15.0 that supports Erlang/OTP 27.0

Development Help

  • .gitignore: Ignore ctags/etags files
  • make dialyzer: Add support to run Dialyzer with Mix
  • make format|indent: New targets to format and indent source code
  • make relive: Add Sync tool with Rebar3, ExSync with Mix
  • hook_deps: Use precise name: hooks are added and later deleted, not removed
  • hook_deps: Fix to handle FileNo as tuple {FileNumber, CharacterPosition}
  • Add support to test also EUnit suite
  • Fix code:lib_dir call to work with Erlang/OTP 27.0-rc2
  • Set process flags when Erlang/OTP 27 to help debugging
  • Test retractions in mam_tests

Documentation

  • Add some XEPs support that was forgotten
  • Fix documentation links to new URLs generated by MkDocs
  • Remove ... in example configuration: it is assumed and reduces verbosity
  • Support for version note in modules too
  • Mark toplevel options, commands and modules that changed in latest version
  • Now modules themselves can have version annotations in note

Installers and Container

  • make-binaries: Bump Erlang/OTP to 26.2.5 and Elixir 1.16.3
  • make-binaries: Bump OpenSSL to 3.3.1
  • make-binaries: Bump Linux-PAM to 1.6.1
  • make-binaries: Bump Expat to 2.6.2
  • make-binaries: Revert temporarily an OTP commit that breaks MSSQL (#4178)
  • CONTAINER.md: Invalid CTL_ON_CREATE usage in docker-compose example

WebAdmin

  • ejabberd_ctl: Improve parsing of commas in arguments
  • ejabberd_ctl: Fix output of UTF-8-encoded binaries
  • WebAdmin: Remove webadmin_view for now, as commands allow more fine-grained permissions
  • WebAdmin: Unauthorized response: include some text to direct to the logs
  • WebAdmin: Improve home page
  • WebAdmin: Sort alphabetically the menu items, except the most used ones
  • WebAdmin: New login box in the left menu bar
  • WebAdmin: Add make_command functions to produce HTML command element
  • Document ‘any’ argument and result type, useful for internal commands
  • Commands with ‘internal’ tag: don’t list and block execution by frontends
  • WebAdmin: Move content to commands; new pages; hook changes; new commands

Full Changelog

https://github.com/processone/ejabberd/compare/24.02…24.06

ejabberd 24.06 download & feedback

As usual, the release is tagged in the Git source code repository on GitHub.

The source package and installers are available in ejabberd Downloads page. To check the *.asc signature files, see How to verify ProcessOne downloads integrity.

For convenience, there are alternative download locations like the ejabberd DEB/RPM Packages Repository and the GitHub Release / Tags.

The ecs container image is available in docker.io/ejabberd/ecs and ghcr.io/processone/ecs. The alternative ejabberd container image is available in ghcr.io/processone/ejabberd.

If you consider that you’ve found a bug, please search or fill a bug report on GitHub Issues.

The post ejabberd 24.06 first appeared on ProcessOne.

by Jérôme Sautret at July 16, 2024 10:23

July 11, 2024

Ignite Realtime Blog

Openfire 4.8.3 Release

The Ignite Realtime community is pleased to announce the release of Openfire 4.8.3. This release contains an important fix for thread lock situation described with OF-2845. If you have noticed clients getting logged out or unable to connect with Openfire 4.8.1 or 4.8.2, please do try this release and report in the community forums if your issue is persisting.

The changelog denotes a few other issues addressed with this release. You can find download artifacts available with the following sha256sum values.

b86bf8c01ede9cb2ae4f43dfd2f49239d9af2d73f650c7c2d52e5a936035e520  openfire-4.8.3-1.noarch.rpm
3f6da6c89ce701d974f6a1afe5ac0245f7112c5d165934eb1a85a749a1f040e2  openfire_4.8.3_all.deb
4fce60210033216556881fd9c988bea3ce30c0ed845f4dec3d4284ee835e8208  openfire_4_8_3.dmg
28b64c144001b0f6fb6eb4705d0bb1a92581774369378196182b8d35237b83be  openfire_4_8_3.exe
43d3b042357a5c975785f3f223490e3dd18b1f499c206be6cd0857172cc005fc  openfire_4_8_3.tar.gz
a09752fbe1226724d466028036fc65d31fe88e60a0efb27a87f1e10ab100fbb1  openfire_4_8_3_x64.exe
5c0638f150ccb61471b4b5152743b6d18cbe008473f454ed0091a13d7b80cb85  openfire_4_8_3.zip

For those of you curious, here are the 4.8.2 artifact download statistics (released 8 days ago)

Variant Filename Downloads
Linux RPM openfire-4.8.2-1.noarch.rpm 195
Debian openfire_4.8.2_all.deb 635
Mac openfire_4_8_2.dmg 56
Windows 32bit openfire_4_8_2.exe 241
Windows 64bit openfire_4_8_2_x64.exe 840
Tarball openfire_4_8_2.tar.gz 135
Zip Archive openfire_4_8_2.zip 72
Total 2,174

Thanks for your interest and usage of Openfire.

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

7 posts - 6 participants

Read full topic

by akrherz at July 11, 2024 16:07

July 06, 2024

The XMPP Standards Foundation

The XMPP Newsletter June 2024

XMPP Newsletter Banner

XMPP Newsletter Banner

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

XMPP and Google Summer of Code 2024

The XSF has been accepted as a hosting organisation at GSoC in 2024 again! These XMPP projects have received a slot and have kicked-off with coding:

XSF and Google Summer of Code 2024

XSF and Google Summer of Code 2024

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: August 1-4th 2024 — Portland State University
  • XMPP Sprint in Berlin: On Friday, 12th to Sunday, 14th of July 2024.
  • Berlin XMPP Meetup[DE / EN]: Monthly meeting of XMPP enthusiasts in Berlin, every 2nd Wednesday of the month
  • 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 Videos

Debian and XMPP in Wind and Solar Measurement talk at MiniDebConf Berlin 2024.

XMPP Articles

XMPP Software News

XMPP Clients and Applications

XMPP Servers

  • Tigase XMPP Server 8.4.0 was released - Most notable features are support for Portable Import/Export Format (XEP-0227), ability to configure users with push devices to show as away, ability to moderate MUCs and support for xmppbl.org.
  • ejabberd 24.06: Deep Work Release! - With four months of work, close to 200 commits, including several minor improvements in the core ejabberd, and a lot of improvements in the administrative parts of ejabberd, like the WebAdmin and new API commands.
    ejabberd WebAdmin interface

    ejabberd WebAdmin interface

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.

  • Chat notification settings
    • This document defines an XMPP protocol extension to synchronise per-chat notification settings across different clients.
  • WebXDC
    • This document defines an XMPP protocol extension to communicate WebXDC widgets and their state updates.

New

  • Version 0.1.0 of XEP-0491 (WebXDC)
    • 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

  • Version 0.2.0 of XEP-0421 (Anonymous unique occupant identifiers for MUCs)
    • Make explicit that one can’t just hash the real JID.
    • Expand security considerations.
    • Add schema.
    • Fix some examples captions and casing (mw)
  • Version 1.1.1 of XEP-0153 (vCard-Based Avatars)
    • XEP-0054 says “Email addresses MUST be contained in a <USERID> element”. (egp)
  • Version 1.2.2 of XEP-0107 (User Mood)
    • Fixed typo (XEP Editor (dg))

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 XEP moved to Stable this month.

Deprecated

  • No XEP deprecated this month.

Rejected

  • No XEP 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 an 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, cal0pteryx, emus, Federico, Gonzalo Raúl Nemmi, Jonas Stein, Kris “poVoq”, Licaon_Kter, Ludovic Bocquet, Mario Sabatino, melvo, MSavoritias (fae,ve), nicola, 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

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.

July 06, 2024 00:00

July 04, 2024

ProcessOne

Breaking Down the Costs of Large Messaging Services

I will comment on an interesting article from Meredith Whittaker and Joshua Lund breaking down the cost of running a large-scale messaging platform.

It estimates that the cost to operate Signal messaging will reach 50 million dollars per year in 2025.

🔗 Privacy is Priceless, but Signal is Expensive

As of the end of 2023, the cost breakdown for running a large messaging platform like Signal was as follows:

  • Storage: $1.3 million per year (9.3%). It is interesting to note that Signal does not store message history on the server. Message history is stored on the client.
  • Servers: $2.9 million per year (20.7%). Cost of cloud servers to support the messaging service.
  • Registration Fees: $6 million per year (42.9%). This is the cost required to validate phone numbers and perform other validations.
  • Total Bandwidth: $2.8 million per year (20.0%).
  • Additional Services: $700,000 per year (5.0%). Uptime monitoring, outage alerts, redundant capacity for disaster recovery purposes, maintenance contracts, etc.

Infrastructure Costs (as of November 2023): Approximately $14 million per year, to support between 40 and 50 million monthly active users.

And this is just for the infrastructure costs ! You need to add all the associated costs to operate an organization employing more than 50 people.

This article is interesting on several accounts:

  • If you want to run a messaging platform at scale, we can help you with that, but be sure to properly assess your operating costs as well. Ensure your ambition aligns with your business model.
  • This also shows the impact of the centralized approach vs a federated model. With a centralized model, the organization running the platform has to assume all the costs for operating the platform. In a federated model like XMPP, the costs can be split across the whole network.

The technical design of a messaging service significantly impacts the operational costs of the platform. Therefore, it’s crucial to make business model and technical choices simultaneously and be flexible to adapt to platform growth, as they are two sides of the same coin. Aligning these decisions ensures that both financial sustainability and technical feasibility are achieved.

The post Breaking Down the Costs of Large Messaging Services first appeared on ProcessOne.

by Mickaël Rémond at July 04, 2024 15:53

Erlang Solutions

The Strategic Advantage of Outsourcing with Erlang and Elixir

We’re in the midst of some rapid technological changes (AI, IoT, machine learning etc) and businesses are facing new obstacles. There is now a demand to balance company time and budgets amid all day-to-day responsibilities. Because of this, outsourcing services have become a strategic move for many. 

Let’s look into how Erlang and Elixir programming languages help with business outsourcing. We’ll discuss their expertise in security, scalability and flexibility and how they support business goals.

Understanding the importance of outsourcing

Before we get into its benefits, it’s important to understand the growing importance of outsourcing tech for businesses. Gartner describes outsourcing as a way to “deliver IT-enabled processes, application services, and infrastructure solutions for business outcomes.” 

According to the global Business Process Outsourcing (BPO) market, outsourcing reached $280.64bn in 2023 and is projected to grow 9.6% from 2024 to 2030.

This rise is driven by digital transformation, a focus on cost optimisation, and the increasing demand for specialised services. Companies are focusing more on efficiency and agility for long-term success. Outsourcing provides that much-needed flexibility. They are able to leverage top-tier expertise, without the need for full-time in-house commitment. 

Improved compliance and security

All businesses have sensitive data. To manage this, it must be understood that compliance and security go hand in hand. Compliance is all about adhering to standards and regulations within a given sector. These sectors are external laws (regulatory compliance) and internal policies (corporate compliance). Some of the most common include:

External laws:

  • General Data Protection Regulation (GDPR) – European Union regulation.
  • Payment Card Industry Data Security Standard (PCI DSS) – Global standards for credit card information.
  • Health Insurance Portability and Accountability Act (HIPAA) – U.S. law for health data privacy and security.
  • Sarbanes-Oxley Act (SOX) – U.S. law for financial reporting and auditing standards for public companies.
  • California Consumer Privacy Act (CCPA) – California state law, improving consumer privacy rights.
  • Personal Information Protection Law (PIPL) – Chinese law, regulating the protection of personal information.

Internal policies:

  • Data Security Policies – Guidelines to secure sensitive information within organisations.
  • IT Security Standards – Standards for maintaining the security of IT systems and networks.
  • Access Control Policies – Policies to define access rights to data and systems, based on roles and responsibilities.
  • Data Retention and Disposal Policies – Rules that govern the retention and secure disposal of data.
  • Incident Response Plans – Procedures for responding to and mitigating data breaches or security incidents.

These are all designed to safeguard organisational data and systems from breaches and misuse.

Leveraging functional programming for enhanced security

An important benefit of Erlang and Elixir and functional languages lies in their flexibility. They focus on code clarity and predictability, which is important for providing enhanced security. So even if your business is operating on the most complex of systems, both languages allow for clear and easy testing. This allows developers to identify and rectify any system vulnerabilities effectively.


Another feature of a functional programming language is immutability, meaning it cannot change once created. For businesses, it ensures that data integrity is maintained, preventing any unauthorised changes to the system.

Encryption support

Both languages excel in handling concurrent connections and processes. This is crucial for environments where multiple devices are needed to communicate simultaneously, without performance bottlenecks.

Erlang and Elixir are equipped with powerful libraries that support industry-standard encryption protocols. It allows developers to implement strong encryption mechanisms quickly and effectively. This safeguards precious business data against unauthorised access and breaches.

Their strengths collectively ensure that business devices can communicate securely and reliably. Business data is supported and protected without compromise. To learn more about encryption support, take a look at our five tips to ensure business security.

Cost management 

According to Deloitte, the top reason (70%) for business outsourcing is cost reduction. Outsourcing ensures that you are only paying for the services you need when you need them, leading to cost management and savings. 

Businesses are paying external providers to:

  • Maintain their systems and carry out required tasks 
  • Save them money on upfront costs – especially when starting a new business or project. 
  • Advise on the most cost-effective systems and configure their systems to better suit your needs.

Concerns over training expenses, workspaces, and further equipment are also alleviated, as your team already has the necessary resources to maintain your systems.

Cost-effectiveness in Elixir 

Elixir’s expressive syntax and the high developer productivity of Phoenix and LiveView can deliver more with less code, in less time, and with smaller teams. Its modern language features, such as pattern matching and powerful metaprogramming capabilities, enhance developer efficiency and reduce the complexity of codebases. The concurrency model inherited from Erlang allows for efficient handling of many simultaneous tasks, which can lead to cost savings on infrastructure. Also, its vibrant community and extensive libraries allow for rapid development and quick problem-solving. This is another great pro for businesses as it further reduces development time and associated costs.

Cost-effectiveness in Erlang

Erlang’s lightweight process model allows developers to handle numerous simultaneous operations with minimal resource consumption. This leads to significant infrastructure cost savings. 

The language’s robust error-handling capabilities and “let it crash” philosophy simplify the development of reliable, self-healing systems, reducing the need for extensive debugging and maintenance efforts. Erlang’s mature ecosystem and extensive libraries also enable developers to quickly implement complex features, decreasing development time and allowing smaller teams to achieve more with less. This overall efficiency translates into lower long-term operational and development costs for businesses.

Specialised Erlang and Elixir expertise 

Businesses that outsource their tech stack get value for money in expertise. Outsourcing provides a range of skills and knowledge of a dedicated team.

Expertise is one of the largest benefits of outsourcing your Erlang and Elixir. Erlang in particular has been around for over two decades, so businesses have the added benefit of known reliability and an established reputation.

The rise of Elixir in the programming language space has been impressive, to say the least. It leverages the strengths of the Erlang Virtual Machine (BEAM). So while it hasn’t been around for as long as Erlang, it has inherited the same fault-tolerant, concurrent and distributed computing capabilities.

The expertise of developers alleviates dealing with complex technical issues, resulting in improved operational efficiency, cost savings, and a stronger competitive edge in the market.

Focus on core business activities

Businesses outsource to concentrate on their competencies and strategic initiatives. They are reducing time-consuming tasks, which allows their internal teams to focus on core business activities. 

This enhanced focus can lead to higher productivity, improved quality, and scope for accelerated innovation.

Erlang and Elixir support

Here are just some examples of how Erlang and Elixir support business focus:

Scalability and performance

Both languages are designed to handle levels of concurrency with ease. This allows businesses to seamlessly build and maintain applications, in line with increasing demand. It frees up time to focus on growth instead of worrying about the limitations of infrastructure.

For more on the benefits of scalability, you can check out our post on scalable systems. 

Fault tolerance

Erlang and Elixir have built-in features for fault tolerance, such as supervision trees and isolated processes. This allows applications built within either language to recover almost from failures. It reduces downtime and allows businesses to run smoothly without manual intervention.

Model of a supervision tree 

Rapid development

Elixir in particular shines in this department. Leveraging its productivity on Erlang’s underlying BEAM virtual machine, it provides a much more readable syntax and metaprogramming, allowing for faster development cycles which in turn, enables a faster time to market.

Maintainable code

We have already touched on the functional nature of both Erlang and Elixir. It encourages clear, modular, and maintainable code. This allows businesses to easily update and extend their applications, reducing the risk of bugs and improving the overall long-term maintainability.

Making a case for outsourcing

We’ve shown how utilising Erlang and Elixir can provide a host of strategic advantages for businesses. These languages provide expertise, enhanced security, cost-effective solutions, and scalability that allow businesses to offload day-to-day activities to concentrate on the bigger picture. If you’d like to learn more about how to make the most of your existing Erlang and Elixir tech stack, feel free to drop the team a line.

The post The Strategic Advantage of Outsourcing with Erlang and Elixir appeared first on Erlang Solutions.

by Erlang Solutions Team at July 04, 2024 10:59