After about 3 months yet another GSOC has come to an end. This is the part of the program that I am sure almost every accepted student would feel sad about. End of those weekly meetings, end of those long chats with your mentors, and a lot more fun.
So my project was about adding support for Link Local (read Serverless) messaging (an XMPP Extension – 174) to Smack’s API. Though I didn’t complete everything that was expected as a part of my proposal but the basic implementation of this API is ready and working. Using the current API you can establish an XMPPLLConnection that is capable of announcing its presence over a local network and able to receive incoming connections and then communicate over a TCP connection. This was verified with the help of Gajim (an XMPP client for linux.) I made a video that demonstrates this process and shows messages being received over a Link Local Connection with the help of my API.
Even though officially the program has come to an end, I will actively contributing to Smack in future and will extend the current functionality to what I had written in my proposal, along side my Mentor Florian Schmaus.
Finally, the Google Summer of Code 2015 concluded. Over 1,000 students - including myself - used the summer to develop amazing open-source software, making our daily life better.DNSSEC for minidns
I successfully finished my project, to include support DNSSEC in minidns, a popular DNS client library for Java with support for Android. Just to summarize my previous posts, here is a list of things developed during the summer:
To ensure correctness of all features, I also added a lot of unit tests to minidns. Due to this I was able to find some relevant bugs in minidns. Unfortunately, some of the optionally desired features did not make it into usable state until today. I will further work on adding the following after this years GSoC:
I’d like to say a warm thank you, to everyone involved with the organisation of the GSoC at XSF (which acted as my host organization) or supported me at my project. This includes, but is not limited to:
This tutorial is regarding using Converse.Js to read values and write values to devices, and also retrieve history of fields.Getting Started
Follow the instructions given here
Use this converse.js file instead of the one given in above link.Start with logging into an XMPP account
Log into your xmpp account.
Contacts will be displayed with an Icon to their left.
These icons determine the type of contacts (Sensor Devices, Control Devices or Contacts)
Open a Chatbox with a Device.
We have used Command Feature to implement the functions.
It works for Sensor as well as Control Devices.
The command for reading a value is ‘/read’.
It will display the fields stored in the device along with their present values. Like this :
It works for Control Devices.
First perform a Read to know the FieldNames.
The command for writing a Value to a FieldName is ‘/write FieldName Value’.
Now you can again perform a Read to check if the Value for that FieldName is changed. Like this :
History Retrieval for a Field
It works for Sensor as well as Control Devices for Fields that store their History.
The command to retrieve Hisotry of a FieldName is ‘/history day/week/month/year FieldName’.
Output for the same looks like this:
Hope you like playing around with it :)
This tutorial is regarding using IEA Cordova Mobile Application, which can be used to read values and write values to devices, and also retrieve history of fields.Getting Started
Hope you like playing around with it :)
Storing momentary data for Sensor Devices by a node that sends back History data stored by the Logger.Work
With this I conclude the modules made in ‘Prototyping IoT Tools’ Project for GSoC 2015. Will focus a little on Code Clean up and tutorials for the same.
Next monday is the soft pencils down date and the firm pencils down is scheduled for next friday.
I completed the support for DANE and did further testing. With DANE support being added, we can finally start adding DNSSEC and DANE to applications. Hooray.
The list of open TODOs:
Hopefully the first three points will be finished until monday, allowing me to focus on tests on documentation the last four days (as suggested by Google).
This version is an important milestone because it’s the first version which is written solely for Java 8!
In particular that means, it leverages many of the new Java 8 goodies, most notably the new Date/Time API, Functional Interfaces (e.g. Predicate) and Lambda Expressions and paves the way for future improvements (e.g. Stream API) to keep the library modern.
The legacy Date API (java.util.Date/Calendar/TimeZone) has been replaced by the new java.time package, i.e. Instant, OffsetDateTime and ZoneOffset.
Event Listeners have been replaced by java.util.function.Consumer, which really saved a lot of similar interfaces and thanks to lambdas there isn’t even a syntactical difference.New Features A special release highlight is the support for the Jabber Component Protocol, which allows you to write External Components for an XMPP server. So the library isn’t exclusively usable for client development anymore, but now also for server component development! More about that in a future blog post.
Further new features are:
The updated documentation can be found here.
Support for XEP-0198: Stream Management is nearly done, but still needs some polishing, so it’s postponed to the next version.
Thanks for everybody who provided feedback and bug reports! I’m happy to hear more from you!
Logging momentary Data of a Sensor device using another resource of the same Jid.Work
A newcomer's introduction and journey into to the world of XMPP.
Helpful for beginners who are just starting to use XMPP.
For last couple of weeks I have been working on the XMPPLLConnection and Stream management. I have learned about Java NIO (read Non-Blocking I/O). Successfully implemented it in some test tasks given by my mentor and also implemented it to an extent in my project source code.
I have been testing my code for incoming connection requests with the help of Gajim on a VM. However there seems to be a problem with Gajim (This is what I have felt after trying some things suggested by David and Florian on the IRC channel #smack.) Whenever I get a Socket connection request from Gajim I send back a Stream Open packet to it but it immediately Resets the TCP connection by sending an RST packet. I have so far checked that there are no firewalls turned on for my network, I have made sure that the StreamOpen stanza is being written to the stream and is being sent to Gajim’s IP from which the request comes in.
All the above investigation was done with the help of WireShark.
However it fails to establish a TCP connection for some reason. I am still trying to figure out what’s going on.
We have started preparing our Advanced Erlang ejabberd Workshop that will take place on the 17th of november 2015 in Paris.
The main focus of the workshop will be to showcase the use of ejabberd for broadcasting messages and alerts. The goal is to demonstrate that you can truly unlock the power of XMPP by implementing more than one-to-one messaging.Session 1: Building advanced broadcast messaging service with XMPP and ejabberd
Talk 1: ejabberd State of the art to implement one-to-many chat services (Mickaël Rémond)
I will be presenting all the methods available in ejabberd and XMPP to build large scale groupchat system that meet the challenge of modern messaging. In a world where browser-based chat and mobile messaging applications are the dominant clients for large XMPP networks, building groupchat system on top of XMPP is not as straightforward as it should be. However, XMPP and ejabberd have adapted themselves to these new requirements.
The talk will cover and compare various XMPP extensions that are used today for distribution one-to-many messages:
I will then explore a conversation-based, presence-less approach to enable group discussion in ejabberd and XMPP. This will be an opportunity to present our work-in-progress extension to enable Skype or WhatsApp like group conversations.
Talk 2: Broadcasting with XMPP PubSub. Building efficient and scalable message broadcast services (Christophe Romain and Jérôme Sautret)
The goal will give you a broad overview of ejabberd PubSub extensible implementation. It will explains how you can benefit from the multiple plugins available to configure a scalable Pubsub deployment for your own specific needs.
This talk will be also a good opportunity to give an overview of ejabberd PubSub API and introduce participants to PubSub plugin development.
Talk 1: Managing large scale ejabberd infrastructures: Dealing with operational challenges (Christophe Romain)
The talk will present experimental technics to push Erlang application deployment further. It will shows in the specific case of ejabberd how you can use those methods to manage and upgrade large scale XMPP services without downtime.
The workshop will take place in Paris on November 17th, 2015. You can join us for a fixed affordable price of 100 euros (exc. VAT). You can register on Eventbrite: ejabberd Workshop – November 2015.
A question which comes up very often is the following:
Can I use MatriX with Unity 3d?
Of course you can. Many of our customers are using it with great success in their Unity projects.
Unity is based on Mono. MatriX is designed for cross platform and works on all major .NET platforms, including Mono.
Many Unity developers have some problems to get started with MatriX on Unity.
This post should be a small tutorial and address some of the issues you may be facing during your Unity development.
1) Download the correct MatriX dll (Mono build). MatriX builds are not universal, which means you need to download and reference the MatriX library for Mono.
The Mono build can be found at the latest binary downloads here:
when you browse to MatriX => Mono
2) The System.Xml.Linq.dll seems to be not a standard Unity reference. Download it as well and add it to your assets. Otherwise Unity may throw an exception when you run your project.
3) Depending on your Unity version you may get compiler errors on iOS. When you use the latest Unity version this should be no problem. On older Unity versions this problem is related to obfuscation. To resolve this please contact us directly.
4) The iOS stripping feature causes problems. It does not work when reflection gets used. The core Xml serializing engine in MatriX is build on reflection using a factory pattern. You either have to remove stripping from your complete project, or exclude the MatriX classes.
Here is an example of a linker.xml file excluding all MatriX classes:
It looks like disabling all stripping in Unity is not enough and the linker.xml file above must exist.
5) Some of our users reported that connecting to an XMPP server does not work inside the Unity editor because of some networking problems of the IDE. When the code gets executed or published on a device it works fine. This is a restriction of Unity and not related to MatriX.
If you run into any other problems please contact us directly. We do our best to solve them.
Ludovic Dubost, XWiki founder, explains what he has learned in more than 10 years running his company. Mickaël and Ludovic discuss what it is like to be both a programmer and a founder. Ludovic discuss what you have to do to stay relevant in a quickly evolving and highly competitive environment.
We hope you will enjoy this open discussion between two programmers, Open Source product builders and company founders.