<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Erlang Solutions</title>
    <description>The latest articles on DEV Community by Erlang Solutions (@erlangsolutions).</description>
    <link>https://dev.to/erlangsolutions</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F16126%2F745b0d53-a9b0-4fe9-894a-bc0619159f48.png</url>
      <title>DEV Community: Erlang Solutions</title>
      <link>https://dev.to/erlangsolutions</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erlangsolutions"/>
    <language>en</language>
    <item>
      <title>Code BEAM America [virtual]</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Thu, 23 Sep 2021 07:41:37 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/code-beam-america-virtual-43ha</link>
      <guid>https://dev.to/erlangsolutions/code-beam-america-virtual-43ha</guid>
      <description>&lt;p&gt;Created by developers, Code BEAM America is dedicated to bringing the best minds in the Erlang and Elixir communities together to SHARE. LEARN. INSPIRE.&lt;/p&gt;

&lt;p&gt;Over 3 half days you will learn from 50+ cutting-edge talks and our in-depth training program, how BEAM languages  are used in production and revolutionising areas like eCommerce, Engineering, IoT, Gaming, Blockchain, Fintech, Security, Machine Learning and more! &lt;/p&gt;

&lt;p&gt;As always, community and social interaction will be at the core of the event to enable everyone to connect and interact to share the same experience as with our physical conferences. We offer the opportunity to mingle and meet naturally during coffee breaks and after show virtual party.&lt;/p&gt;

&lt;p&gt;FIND OUT MORE &lt;a href="https://codesync.global/conferences/code-beam-sf-2021/"&gt;https://codesync.global/conferences/code-beam-sf-2021/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Win a ticket to RabbitMQ Summit 2021</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Wed, 07 Jul 2021 14:47:19 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/win-a-ticket-to-rabbitmq-summit-2021-21n3</link>
      <guid>https://dev.to/erlangsolutions/win-a-ticket-to-rabbitmq-summit-2021-21n3</guid>
      <description>&lt;p&gt;We're proud to be bringing together the biggest names in tech to champion RabbitMQ, the most deployed open source message broker in the world. We have a limited number of free tickets to giveaway as guests of Erlang Solutions. If you'd like to join us, alongside speakers, sponsors and attendees from AWS, Github, Bloomberg and many more sign up for your chance &lt;a href="https://www.surveymonkey.co.uk/r/7DJL2PX"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>messagebroker</category>
      <category>rabbitmq</category>
      <category>conference</category>
    </item>
    <item>
      <title>New webinar: Introducing Caramel - OCaml on the BEAM</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Thu, 26 Nov 2020 16:26:04 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/new-webinar-introducing-caramel-ocaml-on-the-beam-3kn4</link>
      <guid>https://dev.to/erlangsolutions/new-webinar-introducing-caramel-ocaml-on-the-beam-3kn4</guid>
      <description>&lt;p&gt;New webinar: Hear from the creator of Caramel, Leandro Ostera. He'll demonstrate the benefits of running OCaml on the BEAM, and the ambitious roadmap that allows developers to make the most of Erlang's runtime and error handling alongside OCaml's type-checker. Register at &lt;a href="https://www2.erlang-solutions.com/webinar-registration-2"&gt;https://www2.erlang-solutions.com/webinar-registration-2&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Free Ask Me Anything Session with the speakers of Code Mesh</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Fri, 30 Oct 2020 14:17:37 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/free-ask-me-anything-session-with-the-speakers-of-code-mesh-2dea</link>
      <guid>https://dev.to/erlangsolutions/free-ask-me-anything-session-with-the-speakers-of-code-mesh-2dea</guid>
      <description>&lt;p&gt;Hey All,&lt;/p&gt;

&lt;p&gt;On Monday 2 November we will be hosting a free Ask Me Anything session with a number of the speakers for Code Mesh. Including Ron Pressler, who is the technical lead for Project Loom, which aims to add delimited continuations, fibers and tail-calls to the JVM.&lt;/p&gt;

&lt;p&gt;The event will be hosted by Francesco Cesarini, Found of Erlang Solutions and O’Reilly published author of Designing for Scalability with Erlang/OTP and Erlang Programming&lt;/p&gt;

&lt;p&gt;Register for free at &lt;a href="https://www2.codesync.global/code-mesh-v-ask-me-anything-registration"&gt;https://www2.codesync.global/code-mesh-v-ask-me-anything-registration&lt;/a&gt;&lt;/p&gt;

</description>
      <category>conferences</category>
      <category>meetups</category>
      <category>learning</category>
    </item>
    <item>
      <title>The complete guide to Instant Messaging and in-application chat.</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Tue, 13 Oct 2020 16:13:59 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/the-complete-guide-to-instant-messaging-and-in-application-chat-ji4</link>
      <guid>https://dev.to/erlangsolutions/the-complete-guide-to-instant-messaging-and-in-application-chat-ji4</guid>
      <description>&lt;p&gt;Now more than ever, Instant Messaging is vital to help businesses, teams, and each other, stay connected.&lt;/p&gt;

&lt;p&gt;Our MongooseIM team has been building enterprise chat applications for over a decade. To help you and your users stay connected, they've put together everything you need to know about Instant Messaging before building a chat application.&lt;/p&gt;

&lt;p&gt;The guide compares the benefits and drawbacks of building your own chat application versus buying a product-as-a-service and looks at what the most desired features of a chat application are.&lt;/p&gt;

&lt;p&gt;Read the guide at &lt;a href="https://www2.erlang-solutions.com/completeguidetoinstantmessaging3"&gt;https://www2.erlang-solutions.com/completeguidetoinstantmessaging3&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  XMPP #Chat #InstantMessaging #DigitalSolutions
&lt;/h1&gt;

</description>
      <category>xmpp</category>
      <category>chat</category>
    </item>
    <item>
      <title>JIT compiler for the BEAM</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Tue, 06 Oct 2020 14:46:06 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/jit-compiler-for-the-beam-3n4p</link>
      <guid>https://dev.to/erlangsolutions/jit-compiler-for-the-beam-3n4p</guid>
      <description>&lt;p&gt;Last month, our colleague Lukas Larson launched the JIT compiler for the BEAM VM. The JIT compiler offers a performance boost of anything from 30% to 130% increase in the number of iterations per second. In our latest blog, Lukas demonstrates the performance testing of the JIT Read more at &lt;a href="https://www2.erlang-solutions.com/jitblog2"&gt;https://www2.erlang-solutions.com/jitblog2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beamvm</category>
      <category>erlang</category>
      <category>elixir</category>
    </item>
    <item>
      <title>New webinar: How Elixir Made Me A Better Java Programmer </title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Thu, 01 Oct 2020 14:12:20 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/new-webinar-how-elixir-made-me-a-better-java-programmer-mk2</link>
      <guid>https://dev.to/erlangsolutions/new-webinar-how-elixir-made-me-a-better-java-programmer-mk2</guid>
      <description>&lt;p&gt;We're excited to announce that Juliana Helena will be joining us on the webinar this month. &lt;/p&gt;

&lt;p&gt;She'll be expanding on the talk she gave at ElixirConf US early in September. The webinar will focus demonstrate that learning a new, purely functional programming paradigm forces you to examine the way you approach programming. In doing so, it can help you identify habits that can be improved and introduce you to new ways of thinking about problems. This fresh perspective is invaluable for all future development you do, regardless of what language you are working with.&lt;/p&gt;

&lt;p&gt;Register at &lt;a href="https://www2.erlang-solutions.com/elixirtojavawebinar3"&gt;https://www2.erlang-solutions.com/elixirtojavawebinar3&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webinar</category>
      <category>elixir</category>
      <category>java</category>
    </item>
    <item>
      <title>3 Massive Upcoming Virtual Tech Conferences</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Wed, 29 Jul 2020 15:46:38 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/3-massive-upcoming-virtual-tech-conferences-3jhf</link>
      <guid>https://dev.to/erlangsolutions/3-massive-upcoming-virtual-tech-conferences-3jhf</guid>
      <description>&lt;p&gt;Hey team,&lt;/p&gt;

&lt;p&gt;We're onboard to help out with three of our favourite conferences who have now gone virtual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code BEAM V
&lt;/h2&gt;

&lt;p&gt;10-11 of September. This is the speaking line up that was originally organised for Code BEAM STO, now delivered online. Speakers include Viktória Fördős (Cisco NSO Core), Christopher Price (Ericsson Head of Software Technology), Robert Virding (Co-Creator of Erlang &amp;amp; Erlang Solutions, Senior Systems Architect) just to name a few. Early Bird tickets are available but closing soon. See the full speaking line up and buy tickets &lt;a href="https://www2.codesync.global/codebeamvreddit1"&gt;here.&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  ElixirConf EU Virtual
&lt;/h2&gt;

&lt;p&gt;7-8 October. Our first ElixirConf EU Virtual in June had over 400 attendees, and the feedback was overwhelmingly positive. The second edition of ElixirConf EU Virtual will feature the same brilliant line-up of speakers that we had organised for this year’s physical event - only virtually. We’ve organised one of the most exciting events we’ve ever had with talks from Chris McCord, Linda Achieng' Otieno, Sigu Magwa, Marlus Saraiva and heaps more. See the full speaking line up and buy tickets &lt;a href="https://www2.elixirconf.eu/elixirconfeuoctred"&gt;here.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code MESH V
&lt;/h2&gt;

&lt;p&gt;Code Mesh is London’s leading alternative tech conference, designed to be a melting pot for curious, inquisitive innovators. The conference connects programmers who believe in finding best-of-class solutions to any problem. Going virtual means their cross-language community goes global, allowing Code Mesh V to connect and inspire even more people. Very Early Bird tickets sell out within 24h every year, but you can join the &lt;a href="https://www2.codesync.global/code-mesh-v/waiting-list-2020"&gt;waiting list here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you’d like to be part of the first ever global Code Mesh V event and inspire the cross-language community of ambitious programmers the &lt;a href="https://eventil.com/events/code-mesh-v/cfp"&gt;call-for-talks&lt;/a&gt; and &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdhiLA9iciqIQvPTFDEO_TgLwoTr6eOabD_yoKIHUWs9t_f-Q/viewform"&gt;call-for-tutorials&lt;/a&gt; are now open.&lt;/p&gt;

</description>
      <category>erlang</category>
      <category>elixir</category>
      <category>functional</category>
    </item>
    <item>
      <title>Lessons learned from a decade consulting XMPP clients</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Fri, 26 Jun 2020 14:00:27 +0000</pubDate>
      <link>https://dev.to/erlang_solutions/lessons-learned-from-a-decade-consulting-xmpp-clients-53n8</link>
      <guid>https://dev.to/erlang_solutions/lessons-learned-from-a-decade-consulting-xmpp-clients-53n8</guid>
      <description>&lt;p&gt;Over the last ten years, we have helped A LOT of companies add value to their products using &lt;a href=""&gt;MongooseIM&lt;/a&gt; or XMPP based chat applications. This has allowed us to partner with, and get insights from companies spanning almost every industry and company size. You may wonder how much variety and complexity a team who specialises in scalable Instant Messaging is exposed to, but the truth is, the only thing that ties these projects together is MongooseIM, our scalable, customisable XMPP server. Once we dive deeper into the needs of our clients, we usually find deployments need new features, tailored to their specific need, to help them achieve their most critical business objectives.    &lt;/p&gt;

&lt;p&gt;Customisation is what sets the work we do apart. We make sure that your Instant Messaging is fit for purpose. Even when XMPP or MongooseIM offer a rich enough chat experience, there are other details we mare are right to deliver a reliable solution. This includes taking into consideration your workload and usage scenarios to ensure that you have the scalability to guarantee uptime.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can we create or improve a chat experience for your business and its customers?
&lt;/h3&gt;

&lt;p&gt;Building and maintaining a chat application is a continuous process. We join our customers at many different stages, and depending on their needs, we can help in different ways. Let's take a closer look at some examples.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Building a bespoke solution.
&lt;/h3&gt;

&lt;p&gt;We can become an embedded part of the team that builds the service. This allows us to architect and build the solution together from scratch. From the very first day, we learn about the unique properties of the customer and how instant messaging helps them to achieve their goals. As a result, we can use our expertise to make sure the system is built perfectly, from the start, before any less-than-ideal decisions are made. An added benefit of this for our customers is that their team gets to see how we go about architecting and designing a best-practice system. That way, there is a natural knowledge sharing of every step in the process, so when the product is launched and in-use, your team is familiar with how to operate and maintain your system. When possible, this is the perfect option for both the organisations we work with and us.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Improving and optimising before release.
&lt;/h3&gt;

&lt;p&gt;We can't always be there from the start. Sometimes, there is a proof of concept application ready which needs improving, often because there is a technical issue that needs to be solved before the release.&lt;br&gt;
At this stage, it's still possible to help design the architecture of the entire chat system. We can also deploy it to the production environment and make sure it can cope with the increasing load introduced by new users. There are a number of common problems we help solve for companies looking to optimise their chat before release.   &lt;/p&gt;

&lt;p&gt;One of the most common reasons companies need help at this stage is that developers who have less experience with XMPP have implemented inadequate solutions which have already been solved by the existing, public XEP - XMPP extension.&lt;br&gt;&lt;br&gt;
We also often see problems arising when a custom extension is built on top of an existing one, which, when done incorrectly, can cause significant complications. &lt;br&gt;
In the lead up to the release of a chat solution companies often need help with custom integrations.&lt;br&gt;&lt;br&gt;
This is especially true for companies adding real time chat to an existing product. In many cases, this can be done outside of the MongooseIM code, on the other hand, it's usually more scalable and efficient if it can be run within MongooseIM. Not every company has the need to hire full-time Erlang developers, especially for implementing a few integrations. Our team are experienced, ready and happy to help with custom integrations to ensure the reliability and scalability of the release.      &lt;/p&gt;

&lt;p&gt;To ensure success when working with an existing product that has yet to be released, we often need to take a step back and look at the product, its goals and its failures holistically. From there we can suggest the best solution. This may mean we need to rethink the existing implementation and change or reshuffle some of the code. In extreme cases, we may need to throw away large chunks of the existing solution to ensure the release is successful. This is the last resort and a decision that is taken collaboratively in the name of reaching an optimal solution.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Increasing the scalability of your chat to allow you to handle more users.
&lt;/h3&gt;

&lt;p&gt;Your instant messaging is deployed and running. Your product is growing successfully. It should be a time to celebrate, but often increased adoption or use of a chat application comes with increased scalability issues. These need to be sorted fast and future-proofed to avoid giving your users a poor experience and damaging the growth you've worked hard to achieve.   &lt;/p&gt;

&lt;p&gt;Our role is to find the bottlenecks and fix them. We study the architecture, the server setup, configuration, enabled extensions and customised code. Then, we decide on the best possible solution together, in collaboration with our clients.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Improving or customising your chat application.
&lt;/h3&gt;

&lt;p&gt;All right, the app is deployed, and users are chatting, so far so good. How can joining forces with us make things even better? There are many reasons companies will come to us to improve an existing instant messaging solution.   &lt;/p&gt;

&lt;p&gt;Many of our customers come to us to develop unique functionalities that are necessary for their success. We help by designing the extension on the protocol level and implementing it on the server.&lt;br&gt;
The public XEPs only cover use cases which are generic and where other people deploying chat services based on XMPP can also use them. So, if your chat needs a specific functionality, we're always happy to help.   &lt;/p&gt;

&lt;p&gt;We also have projects where MongooseIM replaces another XMPP server. This is common when clients discover that the MongooseIM alternative technology they have chosen did not meet their expectations. A common reason for this is that out of the box functionalities can turn out to be black boxes that make it impossible to carry out necessary customisations or improvements.  &lt;/p&gt;

&lt;p&gt;Another common reason to switch to MongooseIM is to improve scalability when an existing solution reaches its capacity. In this case, we play the role of surgeons, carefully implementing a transplant to put MongooseIM at the heart, improving scalability but keeping the rest of the system running smoothly.   &lt;/p&gt;

&lt;h2&gt;
  
  
  Tips to avoid common mistakes when using open-source MongooseIM:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choose your XEP, and choose wisely.
&lt;/h3&gt;

&lt;p&gt;X in XMPP stands for eXtensible. This means it might not be the simplest protocol, but there's hardly a chat feature it doesn't cover. There is a set of core RFCs on top of which custom extensions (XEPs) are built. There are usually no issues with the core functionality that is covered in RFCs. They are adopted by many client libraries and servers. XEPs are often isolated from each other, independent from the core functionalities. They add extra features or capabilities to the core of XMPP. Here comes the biggest challenge:  deciding which XEP to choose (you can find more details in our &lt;a href="https://www.erlang-solutions.com/blog/xmpp-protocol-use-cases-and-guide-erlang-solution-blog.html"&gt;XMPP use-cases&lt;/a&gt; guide). From our experience, developers starting their adventure with XMPP may have a hard time finding a suitable XEP. This can sometimes accidentally lead to your choice creating difficulties or limitations. Some examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Too many extensions are enabled on the server-side, but not used by the client app.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Certain XEPs like XEP-0012: Last Activity put extra load on the server, even when the client's application is not using them. Enabling only used extensions helps to scale the MongooseIM cluster.   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An outdated or rejected extension is used.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Often, different products with instant messaging functionality store the messages on the server. For this, there is extension XEP-0313: Message Archive Management. The majority of servers and client libraries have implemented the XEP for several years already. It replaces an old, more complicated and now deprecated XEP-0136: Message Archiving. Sometimes, developers choose the deprecated extension over the new one.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A custom extension is built even if an existing XEP covers the required functionality.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For instance, if a user wants to know if someone is active in a chat conversation. To achieve that, some extra XMPP stanzas need to be sent. Developers, me included, are creative creatures, and sometimes we rush to reinvent the wheel. In this particular case, XEP-0085: Chat State Notifications fulfils this need.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce unknowns
&lt;/h3&gt;

&lt;p&gt;When preparing for a wave of users using instant messaging functionality, we need to remember to load test. It's very crucial to run load tests to know the capacity of your production setup. To my surprise, this is often neglected. Many people want an answer to the following simple question: "how many resources do I need to handle X number of users, sending Y messages per second". There are too many factors and variables to accurately answer this question. To have a better idea about the capacity, you can run load tests simulating user behaviours. It usually starts with developing the scenario. After making sure that monitoring is in place, the load testing can start. Now we can learn how the system behaves and what to expect in the production environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summing it up
&lt;/h3&gt;

&lt;p&gt;It is very important:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;to know what functionalities are needed and enabled on the server
&lt;/li&gt;
&lt;li&gt;to verify if a custom extension is already covered in a XEP
&lt;/li&gt;
&lt;li&gt;to only build a custom extension if necessary
&lt;/li&gt;
&lt;li&gt;to run load tests to find the capacity and be better prepared for the real traffic
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of the above may not be rocket science; many services run on MongooseIM without our help.&lt;br&gt;&lt;br&gt;
If you are up to the challenge, good, we are always happy to see our product in use.&lt;br&gt;&lt;br&gt;
But, when your time is critical, or if you stumble upon a problem you can't fix, we're happy to help. If hacking through 80K lines of unknown code is not your cup of tea, we can guide you through it. Stay safe and have fun adding real-time communication to your product, if required.    &lt;/p&gt;

&lt;h2&gt;
  
  
  You may also like:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/products/mongooseim.html"&gt;MongooseIM&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/training/online-training.html"&gt;Online Erlang and Elixir training&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/products/mongooseim.html"&gt;Our RabbitMQ services&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/resources/webinars.html"&gt;Our next webinar&lt;/a&gt;
&lt;/h3&gt;

</description>
      <category>xmpp</category>
      <category>messaging</category>
    </item>
    <item>
      <title>Webinar: Data scraping made easy in Elixir </title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Tue, 23 Jun 2020 10:38:59 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/webinar-data-scraping-made-easy-in-elixir-1e0d</link>
      <guid>https://dev.to/erlangsolutions/webinar-data-scraping-made-easy-in-elixir-1e0d</guid>
      <description>&lt;p&gt;Following up from his talk at ElixirConf EU Virtual, our colleague Oleg Tarasenko will be joining us on the webinar to dive deeper into Crawly, the web scraping framework he created in Elixir.&lt;/p&gt;

&lt;p&gt;In this webinar he will discuss what web scraping is, why it is valuable and how Crawly makes it easy.&lt;/p&gt;

&lt;p&gt;The webinar will demonstrate a real example using the Elixir Radar job board.&lt;/p&gt;

&lt;p&gt;Register at &lt;a href="https://www2.erlang-solutions.com/crawlywebinar2"&gt;https://www2.erlang-solutions.com/crawlywebinar2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Businesses are investing in data. The big data analytics market is expected to grow to $103 billion (USD) within the next five years. It’s easy to see why, with everyone of us on average generating 1.7 megabytes of data per second.&lt;/p&gt;

&lt;p&gt;As the amount of data we create grows, so too does our ability to inherent, interpret and understand it. Taking enormous datasets and generating very specific findings are leading to fantastic progress in all areas of human knowledge, including science, marketing and machine learning.&lt;/p&gt;

&lt;p&gt;Learn how to gather valuable data with web scraping in Elixir. Register for our webinar at &lt;a href="https://www2.erlang-solutions.com/crawlywebinar2"&gt;https://www2.erlang-solutions.com/crawlywebinar2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webinar</category>
      <category>elixir</category>
      <category>webscraping</category>
      <category>parser</category>
    </item>
    <item>
      <title>Why Elixir is the Programming Language You Should Learn in 2020</title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Mon, 15 Jun 2020 10:02:59 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/why-elixir-is-the-programming-language-you-should-learn-in-2020-5g00</link>
      <guid>https://dev.to/erlangsolutions/why-elixir-is-the-programming-language-you-should-learn-in-2020-5g00</guid>
      <description>&lt;p&gt;What should you look for when choosing to learn a new programming language? The answer might vary depending on what your project or career goals are, but as a basic starting point, you want a language that:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is fun and easy to use &lt;/li&gt;
&lt;li&gt;Has the ability to meet modern user demands &lt;/li&gt;
&lt;li&gt;Has rewarding career progression &lt;/li&gt;
&lt;li&gt;Has an active and supportive community &lt;/li&gt;
&lt;li&gt;Has a range of helpful tooling &lt;/li&gt;
&lt;li&gt;Has frameworks to allow full-stack development &lt;/li&gt;
&lt;li&gt;Has easily accessible documentation &lt;/li&gt;
&lt;li&gt;Ensures you grow as a programmer. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Over the course of the article, we'll show you how Elixir rates in relation to all of the above dot points. Before we start, it's worth letting you know a little bit about me. I like to consider myself a polyglot developer. Over the years I have worked with Elm, Lua, Rust, Dart, Go, Kotlin, Scala, C, C++, Perl, Ruby, PHP, Python, Java, JavaScript, Erlang and Elixir. If I were to only pick one language to learn as a brand new developer in 2020, it would be Elixir.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Why Elixir is fun and easy to use
&lt;/h3&gt;

&lt;p&gt;Fun might not be the only important consideration, but it is one that should not be underestimated. Elixir's syntax shares a lot of similarities with Ruby; both are high-level, readable, fun programming languages. As a senior developer from Pinterest once said of his decision to transition to Elixir:&lt;br&gt;&lt;br&gt;
""I thought, 'Wow, it's as fun as Ruby, but it has some chops — it actually performs really well.'"&lt;br&gt;&lt;br&gt;
Personally, I love the ability to write less code. It is a language that is expressive enough to be understandable and fast to read. For example, using the Tesla library, I could implement integration with a provider like Paypal in 20 lines of code. I will be happy to schedule a hands-on workshop or a 1-on-1 call if there is a need for dive into this library.  &lt;/p&gt;

&lt;h3&gt;
  
  
  How Elixir has the ability to meet modern usage demands
&lt;/h3&gt;

&lt;p&gt;We all heard of the digital transformation, right? As populations grow, and more services move online there is increased pressure on systems to be able to handle huge spikes with billions of concurrent users.&lt;br&gt;&lt;br&gt;
Elixir runs on the BEAM VM. A system built for concurrency. As a result, it can handle these user spikes with ease. For those interested in what concurrency is, and how it works, we have a blog comparing the JVM and BEAM VM, which explains it well.&lt;br&gt;&lt;br&gt;
Pinterest and Bleacher Report are just two of widely popular and big companies who moved to Elixir in order to help solve issues of scalability. In the case of Bleacher Report, one of our clients, they were able to move from 150 servers, down to 5 servers. Not only did they reduce there physical infrastructure requirements, they were also able to handle more traffic with faster times. A language that can be relied upon for scalable, fault-tolerant will always be sought out by high profile companies.    &lt;/p&gt;

&lt;h3&gt;
  
  
  Elixir’s rewarding career progression
&lt;/h3&gt;

&lt;p&gt;Elixir is a growing language which is being adopted at a significant rate. As a result, Elixir developers have the opportunity to work for wide spectrum of  companies such as PepsiCo, Pinterest, Lonely Planet or MBTA. And the list is continuing to grow. &lt;a href="https://www.erlang-solutions.com/blog/which-new-companies-are-using-erlang-and-elixir-mytopdogstatus.html"&gt;Check out this list for companies added in the last 12 months alone.&lt;/a&gt;   &lt;/p&gt;

&lt;h3&gt;
  
  
  The supportive and active Elixir community
&lt;/h3&gt;

&lt;p&gt;As you might expect with any new technology or programming language, the Elixir community started out small.&lt;br&gt;&lt;br&gt;
Nowadays Elixir has a thriving community that continues to grow, with fantastic events such as &lt;a href="https://virtual.elixirconf.eu/"&gt;ElixirConf&lt;/a&gt; in Europe and in the US, EMPEX, Code Elixir LDN and Gig City Elixir, as well as Meetups all around the world. This community means the language is continuing to grow and evolve with new tooling, and that there is always someone to provide inspiration or help find solutions to a problem.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Elixir’s range of useful tooling
&lt;/h3&gt;

&lt;p&gt;Tooling makes languages more versatile and tasks easier. They mean that you don't have to reinvent the wheel with every new use case. Elixir already has a number of powerful tools, including Phoenix LiveView which enables developers to build real-time, front-end web applications without writing a line of JavaScript or Crawly which makes web crawling and Data Scraping in Elixir easy. Not only does Elixir have a wide-variety of tooling available, but as we mentioned earlier, there is also a passionate community of people continually creating new tools and improving the ones available.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Elixir frameworks allow for full-stack development
&lt;/h3&gt;

&lt;p&gt;Given its scalability performance and its origins in Erlang, it is no surprise that Elixir is a popular backend choice. As mentioned above, Phoenix LiveView has provided an easy, time-efficient and elegant way for Elixir developers to produce front-end applications. Finally, the Nerves framework allows for embedded software development on the hardware end. As a result, Elixir is a language that can be adopted right throughout the tech stack. This doesn't just make it an attractive choice for businesses; it also opens up the door for where the language can take you as a developer.    &lt;/p&gt;

&lt;h3&gt;
  
  
  Elixir’s easily accessible documentation
&lt;/h3&gt;

&lt;p&gt;A language and community where documentation is valued is one that makes knowledge sharing easy. The high standard of documentation in the Elixir community makes it easier for you to learn the language, but also, make it easier for anyone to contribute to its improvement and growth.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Learning Elixir can make you a better programmer in other languages
&lt;/h3&gt;

&lt;p&gt;There are a number of &lt;a href="https://www.freecodecamp.org/news/my-intro-to-elixir-how-learning-another-programming-language-can-make-you-a-better-developer-d967e568191c/"&gt;stories&lt;/a&gt;, from &lt;a href="https://medium.com/swlh/how-learning-elixir-made-me-a-better-programmer-4e2a73639aec"&gt;people&lt;/a&gt; who come from object-oriented languages, who found that the process of learning Elixir made them a &lt;a href="https://mixandgo.com/learn/why-you-too-should-learn-elixir"&gt;better programmer&lt;/a&gt; in their language of choice. Learning a new purely functional programming paradigm forces you to examine the way you approach programming. In doing so, it can help you identify habits that can be improved and introduce you to new ways of thinking about problems. This fresh perspective is invaluable for all future development you do, regardless of what language you are working with. For our friends using Ruby, this is particularly true, as the Elixir syntax will be familiar to you, allowing you an easy transition into functional, concurrent programming.   &lt;/p&gt;

&lt;p&gt;Everyone will have different motivation and considerations for what programming language to choose. But these are the reasons I would recommend you learn Elixir in 2020, for the years ahead.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Ready to get started in Elixir?
&lt;/h3&gt;

&lt;p&gt;There are many ways to start. First, you should head to the &lt;a href="https://elixir-lang.org/getting-started/introduction.html"&gt;getting started page of the official Elixir website&lt;/a&gt;. We also offer a number of &lt;a href="https://www.erlang-solutions.com/resources/download.html"&gt;free downloadable packages for Elixir.&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Secondly, we offer a variety of Elixir training, including our &lt;a href="https://www.erlang-solutions.com/training/elixir-programming-training-for-beginners-online.html"&gt;Elixir Programming Training For Beginners.&lt;/a&gt;&lt;br&gt;&lt;br&gt;
To get started in the community &lt;a href="https://elixirforum.com/"&gt;ElixirForum&lt;/a&gt; is a great place to start, as well as searching the #Elixirlang and #MyElixirStatus hashtags on Twitter.     &lt;/p&gt;

&lt;h2&gt;
  
  
  You may also like:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://virtual.elixirconf.eu/"&gt;ElixirConf EU Virtual&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/training/online-training.html"&gt;Online Elixir training&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/blog/how-online-training-can-achieve-the-same-results-as-face-to-face-training.html"&gt;How we developed a face-to-face feel for virtual training&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang-solutions.com/resources/webinars.html"&gt;Our next webinar&lt;/a&gt;
&lt;/h3&gt;

</description>
      <category>elixir</category>
      <category>education</category>
      <category>programming</category>
    </item>
    <item>
      <title>Using RabbitMQ for microservice architecture success - Guest Blog by API Fortress  API </title>
      <dc:creator>Erlang Solutions</dc:creator>
      <pubDate>Thu, 12 Mar 2020 10:45:26 +0000</pubDate>
      <link>https://dev.to/erlangsolutions/using-rabbitmq-for-microservice-architecture-success-guest-blog-by-api-fortress-api-398j</link>
      <guid>https://dev.to/erlangsolutions/using-rabbitmq-for-microservice-architecture-success-guest-blog-by-api-fortress-api-398j</guid>
      <description>&lt;p&gt;&lt;a href="https://apifortress.com/"&gt;API Fortress&lt;/a&gt; is an automated continuous testing platform for APIs that can be deployed in-house or on the cloud. Thier list of clients includes GoPro, Getty Images and MuleSoft (just to name a few). We had the pleasure of speaking to their CTO and co-founder, &lt;a href="https://medium.com/@simone.pezzano"&gt;Simone Pezzano&lt;/a&gt; to discuss the journey they underwent to choosing RabbitMQ for their microservices architecture, why they felt it was the right tool for the job and how they've used its capabilities to build a succesful platform. The result is great example of how and why to move to RabbitMQ for a long-term harmonious micro-service architecture with improved performance. &lt;/p&gt;

&lt;h3&gt;
  
  
  API Fortress and RabbitMQ - The discovery phase
&lt;/h3&gt;

&lt;p&gt;The initial concept of API Fortress was born in 2014. They were working with APIs for various companies, and realized that there was no system to test and monitor the APIs without writing a test suite in code. After searching the market, they realized there was a definite need for a better, more modern approach to testing and monitoring, so they started building our platform.&lt;br&gt;&lt;br&gt;
In the early days, as they were gaining customers, they gathered critical insight about the most common testing and monitoring use cases. One of the top use cases involved a transition from legacy monolithic systems to a more contemporary microservices architecture. This trend had dovetailed with the explosion of APIs and API management platforms like Apigee, Mulesoft, Mashery, WSO2, and Kong, etc.&lt;br&gt;&lt;br&gt;
In 2016, they decided to undergo that change, and converted their platform into an entirely microservices-based architecture. During that process, they realized that it was very important that the platform leverage a tool capable of seamlessly orchestrating asynchronous messaging across heterogeneous components. This tool would need to indicate the importance of each message, pointing to whether the message represented a notification or an important task to execute. During setup, it would need to help us scale our microservices-based platform as much as needed horizontally for a multi-tenant cloud system but with negligible overhead, which was highly desirable for our situation. Additionally, it would need the tool to be able to deploy with our platform on-premises.&lt;br&gt;&lt;br&gt;
Their search for the right tool led them to RabbitMQ. Not only would RabbitMQ let them reach the goals of API Fortress, several unique features of RabbitMQ opened a whole new set of possibilities. In fact, they planned several key architectural improvements based on the new capabilities found in RabbitMQ, including:   &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RabbitMQ’s powerful message routing settings allowed us to better shape the flow of events throughout our platform. By increasing the efficacy of each message, we reduced the complexity caused by message replication, and subsequent remedial actions in case of failure.&lt;/li&gt;
&lt;li&gt;Standardized AMQP protocol and STOMP support allowed us to create message queues that were not just internal, but also usable by our customers when reacting to certain events with their internally built software in any language.&lt;/li&gt;
&lt;li&gt;High configurability of Queues and Exchanges using the default client libraries in RabbitMQ allowed us to delegate 100% of the setup operations to the pieces of software that actually use the queues, reducing the uncertainty introduced by custom maintenance sequences.&lt;/li&gt;
&lt;li&gt;The costs and skill requirements for day-to-day maintenance dropped to virtually zero.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;RabbitMQ provided all of these features and more with unparalleled stability and a minimal resource footprint. Whether powering our cloud platform with thousands of messages being exchanged, or our Docker on-premises deployment, RabbitMQ is the component helping to drive our platform’s success.  &lt;/p&gt;

&lt;h3&gt;
  
  
  The API Fortress Architecture
&lt;/h3&gt;

&lt;p&gt;To help better understand how RabbitMQ solved many past problems for API Fortress, but then also opened our architecture to new possibilities, we can take a deeper dive into how RabbitMQ infiltrates into all aspects of the API Fortress platform in the following:    &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y5MuRzcN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/hv9Uj37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y5MuRzcN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/hv9Uj37.png" alt="load testing diagram" width="1000" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While it may seem a little intimidating in its complexity, the key factor to understand is that RabbitMQ literally coordinates the majority of all API Fortress microservices. Without going into too much detail, here are several factors that should be highlighted on that point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microgateway-to-Storage
&lt;/h3&gt;

&lt;p&gt;RabbitMQ gives a quick solution to allow the microgateway to not care how the messages are delivered by simply asking RabbitMQ to take care of the payloads. This approach allows the Storage Microservice to only accept as much load as it can possibly bear, leveraging RabbitMQ's QoS as it writes the payloads to the database.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Scheduler-to-Engines
&lt;/h3&gt;

&lt;p&gt;Tests may fail to execute properly when accepted by one of the engines, however, the .ack-.nack system in RabbitMQ makes sure that if it happens, the test can immediately be requeued to execute later. Combined with the the QoS system, we can accurately decide how much load each engine is allowed to accept, making sure the platform does not get congested. To add some extra spice to this, each message from the scheduler can be configured with a given execution priority, which is a very desirable option, especially when thousands of tests are scheduled every five minutes, and some of them are more time-sensitive than others. Finally, as tests get accepted and acknowledged at a somewhat relatively slow rate, RabbitMQ Flow Control can apply back pressure to the Scheduler so that the queue maintains a reasonable size.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Engines-to-Downloaders
&lt;/h3&gt;

&lt;p&gt;Downloaders are microservices that perform I/O operations on behalf of an engine. While this communication is generally solved with an HTTP call, some downloaders may live on-premises behind a firewall. RabbitMQ comes to the rescue offering us two solutions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An RPC-like functionality that allows an entity (in this case, the engine) to ask for something (to the downloader) and then expect a response&lt;/li&gt;
&lt;li&gt;A STOMP connector that allows us to expose a dedicated queue as a websocket.
The combination of these two features allows us to deploy the downloader on-premises, initiating a stable channel from the inside of the third-party datacenter and bypassing inbound firewall rules.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Engines-to-Notification
&lt;/h3&gt;

&lt;p&gt;Multiple aspects of a test execution may need to be notified to users in a variety of ways. In our system, the Mailer sends emails while the Connector triggers Web Hooks. Third-party notification systems can also be added in the mix, with the internal notification system completing the picture. RabbitMQ Fan-out exchanges allow multiple notification systems to subscribe to the messages they're interested in and just receive them as they are made available.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Notification-to-Engine
&lt;/h3&gt;

&lt;p&gt;Sometimes, notification systems may need certain types of extra information to complete their jobs, e.g., email recipients. Because, by design, they don't have access to the database, notification systems leverage the same RPC-like system we previously mentioned to ask the Engines for the information they're missing without the need to discover what engines are available, where they live, and how healthy they are, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  In Conclusion
&lt;/h3&gt;

&lt;p&gt;API Fortress undertook the same journey as many of their customers. Everyday, thousands of customers leverage the API Fortress platform as they transform from a monolithic architecture to microservices. By leveraging RabbitMQ, much like their customers who are working towards event-driven architectures and other patterns, they have established the foundation to grow and expand their capabilities without sacrificing performance.&lt;br&gt;&lt;br&gt;
To learn more about the automation of continous API testing, check out the &lt;a href="https://apifortress.com/"&gt;API Fortress website.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Speak to us about how we can help with RabbitMQ
&lt;/h3&gt;

&lt;p&gt;Our world-leading RabbitMQ team offers a variety of options to suit your needs. We have everything from health checks, to support and monitoring, to help you ensure an efficient and reliable RabbitMQ system. If you're inspired to look at how RabbitMQ can help you improve your microservice architecture or move away from monolith legacy systems, &lt;a href="https://www2.erlang-solutions.com/rabbitmqdev2"&gt;talk to our RabbitMQ experts.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or, if you’d like to have full visibility of your RabbitMQ system from an easily readable dashboard, why not take advantage of the &lt;a href="https://www2.erlang-solutions.com/devwombat"&gt;free trial of our WombatOAM monitoring solution.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rabbitmq</category>
      <category>microservices</category>
    </item>
  </channel>
</rss>
