In a previous post, I played around with monad do-notation in Scheme (well, Racket) to have a nicer syntax to play with asynchronous callbacks. This do-notation is actually quite fun to use with other monads as well. What’s interesting is that the same notation gets entirely different meanings and forms depending on which monad you use it with.
There are many interesting monads, and this post shows only a couple of simple ones in action in Scheme (for which you can find the code here). If you want a much better description and in-depth of these monads (and more), I highly recommend you read the awesome Learn You a Haskell for Great Good!
Steve O’Grady published another edition of his great popularity study on programming languages: RedMonk Programming Language Rankings: June 2015.
As usual, it is a very valuable piece. There are many take-away from this research. I will not go over Steve O’Grady findings, but what I found interesting is:
Open Source and license matters. For two of the hot languages, Erlang and Swift, we have seen important changes in licensing that may have an impact in the coming months.
There are 4 booming programming languages: Go, Swift, Rust and Julia. Go and Rust are competing for the same type of projects and developers. In a sense, with an open sourced Swift, it could reach the same target of system programming, even if it will be difficult to overshadow its mobile development roots. It will be interesting to see how those three languages evolves comparatively in the next research. Julia is a scientific language and evolves in its own niche space.
My current favorite, Elixir, is not progressing as fast as Rust, despite reaching version 1 and being developed at an incredible page under Jose Valim’s vision. My feeling is that it is still in developer projet inception phase and that it is winning the heart of Erlang developers first, and many Ruby developers. I expect it to grow slowly in the coming months, as Phoenix Web Framework matures.
The programming language space is still extremely interesting to see evolve and I am looking forward seeing what the developer community is doing with them. Actual projects are the language king makers. For example ejabberd has been critical for Erlang popularity. Docker project is boosting Go adoption. Let’s watch other big project to understand programming languages future.
A few unrelated topics on my reading list made me want to randomly experiment with a few things. I wanted to understand monads a bit better, see how they applied to callback-based asynchronous programming, and play around with macro programming in a Lisp dialect. This is a partial log of the theoretical-and-probably-not-directly-applicable-but-nevertheless-fun rabbit hole I dived into.
We are proud to be launching the Advanced Erlang Initiative, a new group of companies that use Erlang as a strategic technology to craft great products. Erlang ecosystems rely on those publishers that are producing person/years worth of code to build excellent products.
The Advanced Erlang Initiative recognises that those products in turn contribute to the fame of the Erlang platform. They help pushing the limits and contribute to the fame of our beloved programming language. Most of all, the Advanced Erlang Initiative acknowledges peoples energy and effort put in those great products to the good of every Erlang developer. We have created a forum for developers working with and contributing to those tools to meet and discuss their work.
The Advanced Erlang Initiative welcomes all developers that share our passion for Erlang, Elixir, the beam environment and our vision of technical excellence.
Our initiative is primarily centered around inexpensive highly technical workshops given around the world and educational videos on our Erlang products.
The first two members are:
We are happy to meet you on the newly launched website Advanced-Erlang
We are already taking registration for the first two workshops:
More to come soon !
Enjoy and see you there after the summer break !
ejabberd 15.06 includes over 100 changes since the last release two months ago. Among those changes it includes several major new features.New features
The focus of this release is archiving and easier configuration.Message Archive Management support
Message Archive Management (aka MAM, defined in XEP-313) is now the de facto standard for message archiving in XMPP world.
ejabberd now comes with its own full feature message archiving implementation:
– It support both version 0.2 and the more recent version 0.3 of the protocol.
– It support Mnesia internal storage and relational database backend (aka odbc, but actually use native drivers).
To enable it, simply add mod_mam in ejabberd modules configuration section, telling it to use your configured relational database.modules: ... mod_mam: db_type: odbc
Please, also check the sql directory to find about the table to add to your relational database. MAM relational storage is supported for MySQL, Postgres and SQLite.Configuration checking on launch
ejabberd is sometime difficult to configure, especially when you want to define complex setup. After having changed the configuration file to support YAML format, we now introduce a new feature to help you get your configuration right.
On ejabberd launch, you will now see report about possible misconfiguration, with explicit error message.
For example, suppose there is a typo on the registration_timeout option, you’ll get the following error in the log file:16:15:20.487 [error] unknown option 'registrtion_timeout' will be likely ignored
This can be of great help when trying to understand why an option is not taken into account.Windows installer
The Microsoft Windows installer is back, as a beta version. Windows is not a good platform to run a production ejabberd server, for various reasons. However, many users are developing on Windows or want to try ejabberd from their Windows Desktop. Building ejabberd on Windows is very complex, so we decided to finally update our packaging to bring latest ejabberd to Windows users. The installer is 64 bits only, it supports Windows 7 and Windows 8.
The installer is still considered experimental. For example, we did not yet sign the installer with Windows developer account to become a trusted developer. This may come depending on the feedback we get regarding our Windows version.
Please, send us your feedback and contributions!RPM and DEB packages
We have been providing for years a binary installer that includes everything you need to run ejabberd. It includes all the dependencies and a minimal version of Erlang, independently from the one installed on your system.
We now provide the same binary packaging as RPM and DEB for 64bit Linux. This is generated from the same source so it includes its own minimal version of Erlang and doesn’t have any dependencies on other packages. This is still a work in progress, it means that your feedback is welcome. The packages can be downloaded from ProcessOne ejabberd download page.
We hope that this is another step in making ejabberd simpler to deal with and even more ubiquitous. It should also help you stay up to date and always be able to run the latest ejabberd version.Improvements
We now have an installer for contributed modules since ejabberd 15.04. In that new release, we’ve improved automatic compilation of external modules, it’s now more robust and able to handle more complex modules.
Documentation now includes supported protocols with versions by parsing directly modules source code.Changelog overview
Here is a complete changelog. We’ll detail some of these changes in the coming days with follow up blog posts.Message archiving
As usual, the release is tagged in the Git source code repository on Github.
The source package and binary installers are available at ProcessOne.
If you suspect that you’ve found a bug, please search or fill a bug report on Github.
Since this morning, Apple has been changing the setting of the push sandbox. This is generally good news, but it means that if your push notification system is written in Erlang, using Erlang stock SSL module, it will not work.
If your are using Erlang SSL to send push notification to Apple, you will need to patch Erlang to avoid the following error:
The issue is that Erlang SSL implementation crashes on unknown hash and signature algorithms.
We have published a quick workaround for the issue on our own Erlang/OTP repository fork on Github and are hoping to help OTP team reproduce the issue to provide a long term more sustainable patch (as you need to disable completely unknown crypto hashes). In case you need it, the Erlang workaround is there: Do not crash on unknown hash and signature algorithms.
I hope this helps !Good news for our customers
All our customers are already on the safe side. If you are using ejabberd SaaS, ejabberd Business Edition or Boxcar Push Developer Platform, you are already on the safe side and ready for the production roll out.
It feels good, right ?
Enjoy your week-end !
Read Request is sent to a Device JID to retrieve Numeric Values from them, for instance Temperature related Values from a Temperature Sensor Device. This Week we will use it to retrieve numeric values from Devices and get them displayed in ChatBoxes.Work
2534 days after its last release, we are happy to announce the 2.0.0 release of the Whack API!
Whack is our Open Source XMPP (Jabber) component library for XMPP components. External components are processes that run outside of the Openfire's process but can connect to the server to add new functionality. Whack is an implementation of XEP-0114: Jabber Component Protocol.
This release brings a number of small improvements and bugfixes. Notably, Whack 2.0.0 is now based on the Tinder API.
Starting with the current release, Whack shall also be available through Apache Maven. The artifact coordinates of the core module are: org.igniterealtime.whack:core:2.0.0. The source code includes a number of small examples on how to use the library, which should have you up and running in no time!
This is my first post regarding the Google Summer of Code 2015 Serverless messaging project that I am doing under the XMPP Standards Foundation. I am working on the Smack Project that allows you to create Chat clients for Java and Android based applications with the help of an XMPP server.
So far I have added the functionality to announce presence over a Link Local connection on the network. Also to conceal your presence from the network. Currently I am testing this with some clients like Gajim that have support for XEP-174.
Disco Query is sent to a JID to check for features related to the JID. This Week we will use it to identify Devices and the IoT Features that they support.Work
Ugh. You probably know this. You’re working hard, but joyful on a certain project. At sometime during the day you boss comes in your office asking you to write a report on this or that. Not only you have to do these boring thing now, you’re also told to not “just put it off for the sake of writing more code”.
Well, of course your boss has good reasons to do so. Summarizing will not only help people around you understand what you do, what you want to achieve and what they can do to support you, but recapturing your own work might also gives you a new view on your work and in the end might make it even better. However in the moment where the report is due, it always seems unreasonable and useless, doesn’t it?What happened?
Last status post is already two weeks ago. There must be something to report!
This was more generic contribution to the minidns library. When it comes to the project topic, there is also progress to report.
A first DNSSEC specific code is already in the minidns-dnssec subproject in my working repository branch. With the recursive resolver being up and running, the base to work on the real DNSSEC part is done. So we can expect first DNSSEC features to arrive in short time.
This release contains some new features, most noteworthy:
A more comprehensive list can be found in the changelog.
Special thanks goes to Markus Karg, who has provided many good ideas and test results, issued bugs and suggested improvements!What’s next?Moving to Java 8
0.5.0 will be the last release for Java 7, future releases will be for Java 8.The reasons behind this decision are: