phone

    • chevron_right

      Erlang Solutions: Naming your Daemons

      news.movim.eu / PlanetJabber • 2 May, 2024 • 4 minutes

    Within Unix systems, a daemon is a long-running background process which does not directly interact with users. Many similar processes exist within a BEAM application. At times it makes sense to name them, allowing sending messages without requiring the knowledge of their process identifier (aka PID). There are several benefits to naming processes, these include:

    1. Organised processes: using a descriptive and meaningful name organises the processes in the system. It clarifies the purpose and responsibilities of the process.
    2. Fault tolerance: when a process is restarted due to a fault it has to share its new PID to all callees. A registered name is a workaround to this. Once the restarted process is re-registered there is no additional action required and messages to the registered process resume uninterrupted.
    3. Pattern implementation: a Singleton, Coordinator, Mediator or Facade design pattern commonly has one registered process acting as the entry point for the pattern.

    Naming your processes

    Naturally, both Elixir and Erlang support this behaviour by registering the process. One downside with registering is requiring an atom. As a result, there is an unnecessary mapping between atoms and other data structures, typically between strings and atoms.

    To get around this is it a common pattern to perform the registration as a two-step procedure and manage the associations manually, as shown in below:

    
    #+begin_src Elixir
    {:ok, pid} = GenServer.start_link(Worker, [], [])
    register_name(pid, "router-thuringia-weimar")
    
    pid = whereis_name("router-thuringia-weimar")
    GenServer.call(pid, msg)
    
    unregister_name("router-thuringia-weimar")
    #+end_src
    
    
    

    Figure 1

    Notice the example uses a composite name: built up from equipment type, e.g. router, state, e.g. Thuringia, and city, e.g. Weimar. Indeed, this pattern is typically used to address composite names and in particular dynamic composite names. This avoids the issue of the lack of atoms garbage collection in the BEAM.

    As a frequently observed pattern, both Elixir and Erlang offer a convenient method to accomplish this while ensuring a consistent process usage pattern. In typical Elixir and Erlang style, this is subtly suggested in the documentation through a concise, single-paragraph explanation.

    In this write- up, we will demonstrate using built-in generic server options to achieve similar behaviour.

    Alternative process registry

    According to the documentation, we can register a GenServer into an alternative process registry using the via directive.

    The registry must provide the following callbacks:

    register_name/2 , unregister_name/1 , whereis_name/1 , and send/2 .

    As it happens there are two commonly available applications which satisfy these requirements: gproc and Registry . gproc is an external Erlang library written by Ulf Wiger, while Registry is a built-in Elixir library.

    gproc is an application in its own right, simplifying using it. It only needs to be started as part of your system, whereas Registry requires adding the Registry GenServer to your supervision tree.

    We will be using gproc in the examples below to address the needs of both Erlang and Elixir applications.

    To use gproc we have to add it to the project dependency.

    Into Elixir’s mix.exs :

    #+begin_src Elixir
      defp deps do
        [
          {:gproc, git: "https://github.com/uwiger/gproc", tag: "0.9.1"}
        ]
      end
    #+end_src
    
    

    Figure 2

    Next, we change the arguments to start_link , call and cast to use the gproc alternative registry, as listed below:

    #+begin_src Elixir :noweb yes :tangle worker.ex
    defmodule Edproc.Worker do
      use GenServer
    
      def start_link(name) do
        GenServer.start_link(__MODULE__, [], name: {:via, :gproc, {:n, :l, name}})
      end
    
      def call(name, msg) do
        GenServer.call({:via, :gproc, {:n, :l, name}}, msg)
      end
    
      def cast(name, msg) do
        GenServer.cast({:via, :gproc, {:n, :l, name}}, msg)
      end
    
      <<worker-gen-server-callbacks>>
    end
    #+end_src
    

    Figure 3

    As you can see the only change is using {:via, :gproc, {:n, :l, name}} as part of the GenServer name. No additional changes are necessary. Naturally, the heavy lifting is performed inside gproc .

    The tuple {:n, :l, name} is specific for gproc and refers to setting up a “l:local n:name” registry. See the gproc for additional options.

    Finally, let us take a look at some examples.

    Example

    In an Elixir shell:

    #+begin_src Elixir
    iex(1)> Edproc.Worker.start_link("router-thuringia-weimar")
    {:ok, #PID<0.155.0>}
    iex(2)> Edproc.Worker.call("router-thuringia-weimar", "hello world")
    handle_call #PID<0.155.0> hello world
    :ok
    iex(4)> Edproc.Worker.start_link({:router, "thuringia", "weimar"})
    {:ok, #PID<0.156.0>}
    iex(5)> Edproc.Worker.call({:router, "thuringia", "weimar"}, "reset-counter")
    handle_call #PID<0.156.0> reset-counter
    :ok
    #+end_src
    

    Figure 4

    As shown above, it is also possible to use a tuple as a name. Indeed, it is a common pattern to categorise processes with a tuple reference instead of constructing a delimited string.

    Summary

    The GenServer behaviour offers a convenient way to register a process with an alternative registry such as gproc . This registry permits the use of any BEAM term instead of the usual non-garbage collected atom name enhancing the ability to manage process identifiers dynamically. For Elixir applications, using the built-in Registry module might be a more straightforward and native choice, providing a simple yet powerful means of process registration directly integrated into the Elixir ecosystem.

    Appendix

    #+NAME: worker-gen-server-callbacks
    #+BEGIN_SRC Elixir
      @impl true
      def init(_) do
        {:ok, []}
      end
    
      @impl true
      def handle_call(msg, _from, state) do
        IO.puts("handle_call #{inspect(self())} #{msg}")
        {:reply, :ok, state}
      end
    
      @impl true
      def handle_cast(msg, state) do
        IO.puts("handle_cast #{inspect(self())} #{msg}")
        {:noreply, state}
      end
    #+END_SRC
    

    Figure 5

    The post Naming your Daemons appeared first on Erlang Solutions .

    • chevron_right

      Erlang Solutions: Technical debt and HR – what do they have in common?

      news.movim.eu / PlanetJabber • 25 April, 2024 • 3 minutes

    At first glance, it may sound absurd. Here we have technical debt, a purely engineering problem, as technical as it can get, and another area, HR, dealing with psychology and emotions, put into one sentence. Is it possible that they are closely related? Let’s take it apart and see.

    Exploring technical debt

    What is technical debt, anyway? A tongue-in-cheek definition is that it is code written by someone else. But there is more to it – it is code written years ago, possibly by someone who has left the company. Also, every major piece of software is written incrementally over many years. Even if it started with a very detailed, well-thought-through design, there inevitably came plenty of modifications and additions which the original design could not easily accommodate.

    Your predecessors sometimes had to cut corners and bend over backwards to achieve desired results in an acceptable amount of time. Then they moved on, someone else took over and so on.

    What you now have is a tangled mess, mixing coding styles, techniques and design patterns, with an extra addition of ad-hoc solutions and hacks. You see a docstring like “temporary solution, TODO: clean up”, you run git blame and it is seven years old. It happens to everybody.

    The business behind technical debt

    Technical debt is a business issue. You can read about it in more detail in our previous post .

    technical debt

    Source: Medium

    The daily tasks of most developers are fixing bugs and implementing new features in existing code. The more messy and convoluted the code is, the more time it takes every time one has to read it and reason about it. And it is real money: according to McKinsey Report , this burden amounts to 20%-40% of an average business’ technology stack. Engineers are estimated to spend up to 50% of their time struggling with it.

    So what can businesses do to get their code in check? Here are some suggestions:

    • Taking a step back
    • Reassessing the architecture and techniques
    • Making more informed choices
    • Rewriting parts of the code to make it consistent and understandable, removing unused code and duplications

    Unfortunately, this is very rarely done, since it does not bring any visible improvements to the product – clients are not interested in code quality, they want software that does its job. Improving the code costs real money, while the increase in developer productivity is impossible to quantify.

    Technical debt also has another property – it is annoying. And this brings us nicely to the second topic.

    Happy HR, Happier devs

    What is HR about? In part, it is about the well-being of employees. Every employer wants good people to stay in the company. The most valuable employee is someone who likes their job and feels good about the place. HR departments go to great lengths to achieve this.

    But, you can buy new chairs and phones, decorate the office, buy pizza, organise board games evenings – all this is mostly wasted if the following morning your devs show up in their workplace only to say “Oh no, not this old cruft again”, embellishing that statement with a substantial amount of profanities.

    Now I tell you this: Nothing makes developers happier than allowing them to address their pain points. Ask them what they hate the most about the codebase and let them improve it, the way they choose to, at their own pace. They will be delighted.

    You may ask how I know. Firstly, I’m a dev myself. Secondly, I’m fortunate enough to be currently working for a company that took the steps and did exactly that:

    Step 1: Set up a small “tech debt” team

    Step 2: Collected improvement proposals from all developers

    Step 3: Documented them

    Step 4: Defined priorities

    Currently, the technical debt team or the proposers themselves are gradually putting these proposals into action, one by one. The code is getting better. We are becoming more productive. And if we’re happy, isn’t HR?

    Calling upon the compassionate and proactive HR professionals out there: talk to your CTOs, tell them you all are after the same thing – you want these frustrated, burned-out coders happy, enthusiastic and more productive, and that you have an idea of how to achieve this.

    Chances are they will be interested.

    The post Technical debt and HR – what do they have in common? appeared first on Erlang Solutions .

    • wifi_tethering open_in_new

      This post is public

      www.erlang-solutions.com /blog/technical-debt-and-hr-what-do-they-have-in-common/

    • chevron_right

      ProcessOne: ejabberd Docs now using MkDocs

      news.movim.eu / PlanetJabber • 25 April, 2024 • 1 minute

    The ejabberd Docs website did just get a major rework: new content management system, reorganized navigation, improved markdown, and several improvements!

    Brief documentation timeline

    ejabberd started in November 2002 (see a timeline in the ejabberd turns 20 blog post). And the first documentation was published in January 2003, using LaTeX, see Ejabberd Installation and Operation Guide . That was one single file, hosted in the ejabberd CVS source code repository, and was available as a single HTML file and a PDF.

    As the project grew and got more content, in 2015 the documentation was converted from LaTeX to Markdown , moved from ejabberd repository to a dedicated docs.ejabberd.im git repository, and published using a Go HTTP server in docs.ejabberd.im , see an archived ejabberd Docs site .

    New ejabberd Docs site

    Now the ejabberd documentation has moved to MkDocs+Material, and this brings several changes and improvements:

    Site and Web Server:

    • Replaced Go site with MkDocs
    • Material theme for great features and visual appeal, including light/dark color schemes
    • Still written in Markdown, but now using several MkDocs, Material and Python-Markdown extensions
    • The online site is built by GitHub Actions and hosted in Pages, with smaller
      automatic deployment time
    • Offline reading: the ejabberd Docs site can be downloaded as a PDF or zipped HTML, see the links in home page

    Navigation

    • Major navigation reorganization, keeping URLs intact so old links still work (only Install got some relevant URL changes)
    • Install section is split into several sections: Containers, Binaries, Compile, …
    • Reorganized the Archive section, and now it includes the corresponding Upgrade notes
    • Several markdown files from the ejabberd and docker-ejabberd repositories are now incorporated here

    Content

    • Many markdown visual improvements, specially in code snippets
    • Options and commands that were modified in the last release will show a mark, see for example API Reference
    • Version annotations are shown after the corresponding title, see for example sql_flags
    • Modules can have version annotations, see for example mod_matrix_gw
    • Links to modules, options and API now use the real name with _ character instead of - (compare old #auth-opts with #auth_opts ). The old links are still supported, no broken links.
    • Listen Modules section is now better organized
    • New experimental ejabberd Developer Livebook

    So, please check the revamped ejabberd Docs site, and head to docs.ejabberd.im git repository to report problems and propose improvements.

    The post ejabberd Docs now using MkDocs first appeared on ProcessOne .
    • wifi_tethering open_in_new

      This post is public

      www.process-one.net /blog/ejabberd-docs-now-using-mkdocs/

    • chevron_right

      Ignite Realtime Blog: Smack 4.4.8 released

      news.movim.eu / PlanetJabber • 4 April, 2024

    We are happy to announce the release of Smack 4.4.8, our XMPP-client library for JVMs and Android. For a high-level overview of what’s changed in Smack 4.4.8, check out Smack’s changelog

    Smack 4.4.8 contains mostly small fixes. However, we fixed one nasty bug in Smack’s reactor causing an, potentially endless, busy loop. Smack’s new connection infrastrucutre makes heavy use of the reactor, that enables tausands of connections being served by only a handful of threads.

    As always, this Smack patchlevel release is API compatible within the same major-minor version series (4.4) and all Smack releases are available via Maven Central .

    We would like to use this occasion to point at that Smack now ships with a NOTICE file. Please note that this adds some requirements when using Smack as per the Apache License 2.0 . The content of Smack’s NOTICE file can conveniently be retrieved using Smack.getNoticeStream() .

    1 post - 1 participant

    Read full topic

    • chevron_right

      Erlang Solutions: A Guide to RabbitMQ

      news.movim.eu / PlanetJabber • 4 April, 2024 • 5 minutes

    Looking to learn more about the basics of RabbitMQ? This powerful message broker plays a key role in modern, distributed systems.

    This post will break down its fundamentals and highlight its importance in the world of modern, distributed systems.

    An introduction to RabbitMQ

    RabbitMQ emerged from the need to create a scalable, robust messaging system that was able to handle high volumes of communications between applications, all while maintaining both data and performance.

    It is now a popular open-source messaging broker, with queue software written in Erlang. One of its key strengths is its ability to support and adhere to Application Programming Interface (API) protocols, for example, AMQP, HTTP AND STOMP.

    What are APIs you ask?

    They define the rules and conventions that allow for the interaction and communication of different software. For developers, APIs are the go-between that allows them to access a software or services functionality, without the need for a full understanding of the ins and outs of that particular system.

    In turn, these protocols offer a standard method of transmitting commands and data. The result? Seamless integration and interoperability between different systems.

    Let’s circle back to one previously mentioned protocol, the Advanced Message Queuing Protocol or AMQP. This protocol was made to ensure that messages are reliably delivered between applications, no matter where the platform it is running on is located. AMQP has precise rules for the delivery, formatting and confirmation of messages. This ensures that every message sent through an AMQP-based system, like RabbitMQ, reaches its intended location.

    Here’s an illustration better explaining the AMQP system:

    WLNyVn79-YOLOKFPxdXPwWcUNMU1zDFfgD7XJC7wTvD5CP6wDwME9yhMQ4Ji0sIJzRnIQ6wVfvX1r_nLpkzu9KI1o4tqdlSgRZesJ97N5KDCudIx5O1lW_jmbc6Nw2CQt6cnVPY67JMw_5-DqWR3E00

    Source: The Heart of RabbitMQ

    What is RabbitMQ used for?

    Developers use RabbitMQ to efficiently process high-throughput and reliable background jobs and facilitate the integration and communication between applications. It is also great at managing complex routing to consumers by integrating various applications and services.

    RabbitMQ is also a great solution for web servers that require a rapid-request response. It also effectively distributes workloads between workers, handling over 20,000 messages per second. It can manage background jobs and longer-running tasks, for example, PDF conversion and file scanning.

    How does RabbitMQ work?

    Think of RabbitMQ as a middleman. It collects messages from a producer (publisher) and passes them on to receivers (consumers). Using a messaging queue, it then holds messages until the consumers can process them.

    Here’s a better overview of these core systems:

    Producer (publisher) It sends messages to a queue for processing by consumers.
    Queue Where messages are transferred and stored until they can be processed.
    Consumer (receiver) It receives messages from queues and uses them for other defined tasks.
    Exchange The entry point for the messaging broker. It uses routing rules to determine which queues should receive the message.
    Broker A messaging system that stores produced data. Another application can connect to it using specific details, like parameters or connection strings, to receive and use that data.
    Channel Channels offer a lightweight connection to a broker via a shared Transmission Control Protocol (TCP) connection.

    kp3v0PXLxkDsL_nKMPs8IR55TsPsb5fRgzFaIVNVFuzStdjWTEhGBTNOEs-4SXuFEKvhuV-BQGGuOE2E7Ndp-p9xqoe82naibtoT1TeXP8_y_-7dSVatVyQN_W6r30q36-mb7Lzh7jLJv6v_BdH2ve8

    Source: RabbitMQ tutorials

    Key features of RabbitMQ

    As one of the most powerful and flexible messaging systems, RabbitMQ offers several key features, including:

    Security: Various security features in RabbitMQ are designed to protect systems from unauthorised access and potential data breaches. With authentication and authorisation support, administrators can control which users or applications have access to certain queues or exchanges. It also supports SSL/TLS encryption , to ensure clear communication between brokers and clients.

    Reliability: Reliable message delivery by supporting features, such as message acknowledgement and persistent message storage.

    Scalable and fault-tolerant: RabbitMQ provides features for building scalable and fault-tolerant messaging systems. It also supports clustering, whereby adding more nodes to the cluster allows the system to handle higher message volumes. It’s then able to distribute the workload across multiple nodes, making for efficient utilisation of resources. In the case of a node failure, other nodes in the cluster can continue to handle messages without interruption.

    Extended features: RabbitMQ is not limited to the AMQP protocol, but is very versatile and can support a host of others, such as MQTT and STOMP.

    Enterprise and the Cloud : RabbitMQ is lightweight and easy to deploy on the public as well as private clouds using pluggable authentication authorisation.

    Tools and Plugins: RabbitMQ offers a host of tools and plugins , ideal for integration and wider support.

    Common use cases for RabbitMQ

    We’ve already highlighted the versatility of RabbitMQ in modern distributed systems. With its robust features and flexible architecture, here are some most common use cases:

    Legacy applications: RabbitMQ integrates with legacy systems by using available or custom plugins. You can connect consumer apps to legacy apps for example, connecting JMS apps using the Java Message Service (JMS) plug-in and JMS client library.

    Distributed systems: RabbitMQ serves as a messaging infrastructure in distributed systems. It fosters asynchronous communication between different components, facilitating the scalability and decoupling of the system.

    IoT applications: When used in Internet of Things (IoT) applications, RabbitMQ can handle the exchange of messages between devices and backend systems, allowing for reliable and efficient communication, control and real-time monitoring of IoT devices.

    Chat applications: For real-time communication in chat applications, RabbitMQ manages messaging exchanges between users, facilitating group chat and instant messaging functionalities.

    Task/job queues: RabbitMQ manages task queues and distributes work across multiple workers. This means that tasks are processed efficiently and at scale, reducing bottlenecks and utilising resources.

    Event-driven architectures: RabbitMQ is great for carrying out event-driven architectures.

    It allows various system components to respond to events and seamlessly interact with each other.
    Microservices communication: A common use of RabbitMQ is enabling asynchronous and reliable communication between microservices. Messages are delivered, even if some services are unavailable.

    To conclude

    As businesses seek to adopt distributed architectures and microservices-based applications, RabbitMQ remains a go-to choice for improved adaptability and seamless integration across systems. If you’d like to discuss how RabbitMQ can improve your applications, get in touch with the Erlang Solutions team.

    The post A Guide to RabbitMQ appeared first on Erlang Solutions .

    • chevron_right

      Isode: Harrier 4.0 – New Capabilities

      news.movim.eu / PlanetJabber • 4 April, 2024 • 1 minute

    Harrier is our Military Messaging client. It provides a modern, secure web UI that supports SMTP, STANAG 4406 and ACP 127. Harrier allows authorised users to access role-based mailboxes and respond as a role within an organisation rather than as an individual.

    You can find out more about Harrier here .

    Server Administration and Monitoring

    Harrier 4.0 adds a Web interface for server administrators to configure Harrier. Key points:

    • Secure bootstrap
    • Sensible defaulting of parameters to facilitate startup
    • Per domain and global configuration options
    • Security features, including TLS, HSM, S/MIME and Security Labels/Security Policy
    • Full configuration of all Harrier options and capabilities

    In addition to configuration, the Web user interface provides a monitoring capability to show server activity and key operational parameters.

    UI Enhancements

    A number of improvements made to the Harrier UI including:

    • Variable size compose windows, retaining user preferences and stacking multiple windows
    • HTML Message editing:
      • Font bold/italic/underline/colour
      • Lists and Bullets
      • Reply to HTML messages
    • Undo and redo in message editor
    • Organizations in from selection has configurable default and alphabetic sort.
    • Active role shown on browser tab. Facilitates working with multiple roles in different tabs.
    • Extended message search capabilities to include:
      • Filter by precedence
      • Free text search in choice of: body; subject; SIC; action; info; from

    Security Enhancements

    The following security enhancements added:

    • Per domain S/MIME signing policy (never/if possible/always). Model is administrator choice rather than user selection.
    • Policy control of using S/MIME header signing.
    • Policy choice to alert users to unsigned messages.
    • Policy choice to allow encryption.
    • Policy choice of encryption by enveloping or triple warp.
    • Message Decrypt on initial access. The primary goal of S/MIME encryption is end to end protection. Some clients leave messages encrypted, which can lead to problems over time if keys become unavailable or are changed. Decryption prevents these issues. Note that for triple wrap, the inner signature is retained.

    Other Enhancements

    • Server option to force user confirmation of message send (audit logged). Important in some scenarios to confirm message responsibility.
    • Option to configure multiple address books in different directories.
    • Revalidation of recipients before message release.
    • Timezone option to be Zulu or Local.
    • wifi_tethering open_in_new

      This post is public

      www.isode.com /company/wordpress/harrier-4-0-new-capabilities/

    • chevron_right

      XMPP Providers: laberzentrale.de

      news.movim.eu / PlanetJabber • 30 March, 2024 • 1 minute

    Listed since Dec 31, 2023 · Website: unknown
    Service
    Cost: unknown
    No legal notice available
    Bus factor : unknown
    Organization: unknown
    Server
    Server / Data location: unknown
    Professional hosting : unknown
    Green hosting
    Server software: ejabberd 23.01-1

    Account

    You cannot register on this provider (at any time)
    An email address is not required for registration
    No CAPTCHA must be solved for registration
    You cannot reset your password
    Messages are stored for an unknown time or less than 1 day

    File Sharing ( HTTP Upload )

    Allows to share files up to an unknown size or less than 1 MB
    Shared files are stored up to an unknown size or less than 1 MB
    Stores files for an unknown time or less than 1 day
    Compatibility / Security
    Compatibility 100
    Security ( C2S ) unknown
    Security ( S2S ) unknown
    Contact
    Email -
    Chat -
    Group chat -

    Provider Category

    D

    Categories explained
    Why not category "A"
    • No support via XMPP chat or email
    • Not free of charge or unknown
    • Registration is not available (at any time)
    • Legal notice is missing
    • Sharing files is allowed up to an unknown size or less than 1 MB
    • Shared files are stored for an unknown time or less than 1 day
    • Shared files are stored up to an unknown size or less than 1 MB
    • Messages are stored for an unknown time or less than 1 day
    • No professional hosting or unknown
    • Server location is unknown
    • Provider is too young or not listed long enough
    laberzentrale.de badge
    Embed badge

    This provider does not offer a Provider File .

    Latest change: Jan 30, 2024 · Something changed?

    Providers are checked for updates on a daily basis.

    Badge copied!
    • wifi_tethering open_in_new

      This post is public

      providers.xmpp.net /provider/laberzentrale.de/

    • chevron_right

      XMPP Providers: lightwitch.org

      news.movim.eu / PlanetJabber • 30 March, 2024

    Available since Nov 3, 2017 · Website: EN
    Service
    Cost: Free of charge
    Legal notice: EN
    Bus factor : unknown
    Organization: unknown
    Server
    Server / Data location: 🇮🇹
    Professional hosting
    No green hosting
    Server software: Metronome 4.0.3

    Account

    You can register on this provider directly via: You can register on this provider via a web browser
    Register (EN)
    An email address is not required for registration
    No CAPTCHA must be solved for registration
    You can reset your password: EN
    Messages are stored for 30 days

    File Sharing ( HTTP Upload )

    Allows to share files up to 1024 MB
    Shared files are stored up to an unlimited size
    Stores files for 7 days
    Compatibility / Security
    Compatibility 90
    Security ( C2S ) unknown
    Security ( S2S ) unknown
    Contact
    Email -
    Chat -
    Group chat EN

    Provider Category

    C

    Categories explained
    Why not category "A"
    • Compatibility is insufficient
    lightwitch.org badge
    Embed badge

    This provider does not offer a Provider File .

    Latest change: Mar 29, 2024 · Something changed?

    Providers are checked for updates on a daily basis.

    Badge copied!
    • wifi_tethering open_in_new

      This post is public

      providers.xmpp.net /provider/lightwitch.org/

    • chevron_right

      XMPP Providers: macaw.me

      news.movim.eu / PlanetJabber • 30 March, 2024

    Available since Mar 14, 2019 · Website: EN
    Service
    Cost: Free of charge
    Legal notice: EN
    Bus factor : 1 person
    Organization: Private person
    Server
    Server / Data location: 🇺🇸
    Professional hosting
    Green hosting
    Server software: ejabberd 23.10

    Account

    You can register on this provider directly via:
    An email address is not required for registration
    A CAPTCHA must be solved for registration
    You can reset your password: EN
    Messages are stored for an unlimited time

    File Sharing ( HTTP Upload )

    Allows to share files up to 104 MB
    Shared files are stored up to an unlimited size
    Stores files for an unlimited time
    Compatibility / Security
    Compatibility 100
    Security ( C2S ) unknown
    Security ( S2S ) unknown
    Contact
    Email EN EN
    Chat EN EN
    Group chat EN

    Provider Category

    A

    Categories explained
    macaw.me badge
    Embed badge

    This provider offers a Provider File .

    Latest change: Feb 2, 2024 · Something changed?

    Providers are checked for updates on a daily basis.

    Badge copied!