Ignite Realtime Blog

4 Posts tagged with the gateway-plugin tag
7

Jivin' Gateways and More!

Posted by jadestorm Nov 11, 2007

You may or may not already be aware that I have been a full time member of the Jive family for a couple of weeks now! It's been quite interesting to see how different it is from my previous job in a university setting. It's been a lot of fun already and it's really exciting to have turned my favorite hobby into a career. =) My coworkers are great and I almost find myself wondering why I didn't do this earlier. ;)

So what am I going to be doing? Well, the development of the IM Gateway plugin is part of my job now. We'll be setting solid goals and release dates instead of it being dependent entirely on my free time. That and Openfire are my main focuses. I'm really excited about playing a more direct role in Openfire development! One of my first tasks will be to improve the unix installers for Openfire. They have been lacking love for a while now and I have a strong unix background to bring to the table. In one of the next releases of Openfire we'll have improved packages, unix scripts, and better support for more operating system distributions. Overall, good things to come! =)

You may have heard that I have taken over as lead developer of Spark. It's been a long time since I have been involved in client development and I actually miss it. My very first XMPP related project was a client. Now, as you've heard from the Ignite Realtime post preceding this one, Spark is a low priority. My focus with it in terms of work with Jive is bug fixes, maintenance, and paying customer requirements. Beyond that, I'll likely be working on it on my own time when I need a change of pace. I am a Mac user primarily, so you may see more Mac focused fixes at first. If nothing else I'm going to make sure Spark is something I enjoy using, which coincides to a lot of things that the community has reported/requested anyway. ;) I highly encourage folk who are interested to submit patches! The only caveat is that for patches of any size, I'll need you to sign contributor agreements, if you haven't already.

Now, since I'm involved in more than just the IM Gateway plugin now, I can't keep up with the forums as much as I did before. I try to spend some time each day looking over the forums, but with more than just the single forum, it's too much to keep up with entirely. Dawn is working hard on coming up with good ways to involve the community more and try to make sure things don't get missed! She has been speaking on this in the Jive Lounge, so please visit the lounge and contribute if you have some thoughts!

Anyway, I wanted to make sure folk understood that my role has changed and wave hi from within Jive! =) Any questions?

7 Comments Permalink
2

Reflections Through The Gate

Posted by jadestorm Aug 9, 2007

Monday, after a long period of heavy development, I finally put out version 1.1.0 of the IM Gateway plugin! A total of 85 issues from JIRA were closed along the way and I'm quite pleased with the results. Along the way there were a number of stumbling blocks where I would just about be ready to release and something major would come up, and I certainly did not want to release anything with serious issues going on. As development continued, more and more features became interesting to me and were implemented. Since 1.0's release, I've had a number of helpful folk step up and offer patches, testing, code, translations, and help with libraries I depend on. I want to take a moment to thank everyone who contributed in any way! You are all invaluable to me! There are a number of big plans coming for the next major release, but I wanted to highlight some of the things from 1.1.0's release and even comment on some of it!

First off, there's XMPP/Google Talk support. One might ask, why do you want XMPP support when there's s2s? That's a question that's been fought many times in the past and typically results in nothing being decided. Well I decided to implement it and then another helpful person (thanks Mehmet!) took my piddly start with it and turned it into a full on transport for the plugin. After implementing it I found myself using it with some accounts I had seen no reason to add to my Adium X config but decided hey, if I can handle it server side, then I'll just carry it around with me. Has been working out really well!

Then there's Gadu-Gadu support. This is a protocol I did not expect to ever implement. Why? Everything about it is Polish. I couldn't find my way around the web site enough to even download a copy of the client. However, I said early on that if someone would translate or help me download or generally help me get it set up and there was a good API out there, I'd do it. So thanks to Marcin for stepping up and helping me get this started! The API itself was amazingly enough the easiest API to work with yet!

And what about SIMPLE support? Thanks to Ravin and Patrick for writing this support as I wouldn't have even known where to begin! I still don't understnad SIP/SIMPLE. Who knows if I ever will. But the transport sure works with my OpenSER server! I'm hoping some folk will take a look at it so I can get a feel for what it does and does not work with and maybe I can work with them to tweak it to work correctly with various implementations.

Another interesting thing that was added is an XMLRPC interface so site administrators can write their own web front ends for users to register with the various transports. That way folk could use some various standard web look and feel for the registration, and/or their own authentication mechanism, or even just something they consider "nicer" for their users, and dodge around typical requirements of registering through a client or requiring the admin to do it for them.

A lot of the inner workings of the plugin were redone, making things a lot more efficient in terms of network traffic and overall coding structure. I don't know that anyone but me will appreciate the reworkings of the code, but hey. =)

One of the interesting things that came about is that I ended up as the lead developer for Martyr, a very cool IRC library. IRClib just wasn't getting it done for me so I tried out Martyr, adored it's structure, and offered to help improve it. It's already led to a far better IRC transport than what I had before.

Beyond that I want to thank the folk from nimbuzz for creating the wonderful project OpenYMSG (a fork of YMSG) that fixes a number of problems I kept running into in the past! Through their improvements Yahoo support in the IM Gateway plugin was promoted to being considered stable! On top of that they've helped me out some with JML, the library that handles MSN support. Great work folk!

Well that's enough of me, I'm excited about things to come though and I hope you all will join me in that excitement and continue to help me with testing, ideas, and whatever! =)

2 Comments Permalink
7

As many of you may have noticed. the IM Gateway plugin version 1.0 was released alongside Wildfire 3.2.3. (sorry guys, I can't call it Openfire until the official release is 3.3.0 ;) ) The release was quite a step for me as I've never actually released a 1.0 of anything! Typically I'll take the attitude of having to get everything perfect before I can release a 1.0. One of the things that Jive helped me realize is that I could label some of the problem children (Yahoo, ICQ) support as experimental and basically release a 1.0 with good solid support for the rest of the protocols. That hadn't occured to me before and I'm quite glad to see 1.0 out. Amazingly enough, there haven't been a lot of bug reports. I hope that everyone who is using it is enjoying it.

I must admit that pushing Yahoo and ICQ support to the side "hurt" a little. However the library I'm using for Yahoo isn't particularly stable and the ICQ support in joscar isn't entirely golden either, and I didn't want to see the release drawn out way into the future. I am pleased to say that the Yahoo library is getting some love as we speak and there's been improvements to the ICQ support submitted to the joscar team and I'm working on a couple of other improvements. I would consider myself highly familiar with the OSCAR (AIM and ICQ) protocol itself, but not at all for Yahoo. (I'm referring to the low level details of how the protocol itself works, in theory the libraries I use ought to hide the details from me) As it turns out, I'm getting more familiar with the MSN protocol as I ended up taking over as lead developer of Java-JML. Thankfully, I've got some help on that front as well. It's always nice to see help coming in from many angles!

So what's coming next? Well, my highest priority is to get ICQ fixed up. Once the Yahoo library improvements come about, I'll be aiming to solidify that as well. Of overall new features, I'm waffling between groupchat and file transfer. Groupchat is now the most voted for feature for the plugin. File transfer, on the other hand, is something I've never had an opportunity to get involved in, so generally I'm interested in learning how it works by diving into it. Buddy icons are also highly voted for. Such a seemingly pointless/unimportant feature, but I'm with you all; it's one of the features that gives me the biggest joy to see in a chat client. They're just so cute. ;D

Why did I title this Looking Throught The Fiery Gate? Well.. it's a gateway plugin.. it's in Openfire/Wildfire... yeah. ;)

7 Comments Permalink
9

The concept of transports is what brought me into the world of XMPP in the first place. At the time, I was tired of having to recall my usernames and passwords for AIM, ICQ, MSN, and Yahoo every time I switched to a new machine or IM client. The ability to store all of this information with a central account, on a server that I controlled, appealed to me on many levels. Upon setting up my own server and getting a couple of transports running, I discovered that XMPP itself is quite an interesting protocol. I wrote my own client soon after, and eventually got involved with writing my own transports for AIM and ICQ (PyAIMt and PyICQt, respectively).

Now, in the process of writing those transports, I continuously ran into frustrating scenarios where the transport just did not have enough access to the user's roster or session to do anything in a smooth manner. Some proposals came about, such as the unaccepted roster subsync proposal, and roster item exchange. The latter showed up, unfortunately, after it became a bit of a pain to incorporate its functionality into the existing code. Instead of sending roster items individually, the goal would be to gather them all up and send them in one big packet. The other bigger problem was that both this way and the old way would have had to continue being supported because I never did find a client that actually supported roster item exchange properly.

Unfortunately, all of the issues that come up affect end users, not administrators. I'm much more willing to inconvenience administrators than I am end users. ;) For example, without roster item exchange, upon registering with a transport, a user gets flooded with subscription requests for every contact on their contact list on the other service. Now I don't know about you, but for me that's a lot of contacts. On top of that, the transport has to try to keep track of what items the XMPP user already knows about. It's not hard for this to get out of sync.

So Matt came to me at one point and asked me to write a plugin for Wildfire that would perform the services of the external IM transports, but be much easier to set up and work more smoothly. At first I balked at the concept of taking on yet another project. However, the opportunity to have an excuse to learn Java and being able to use internals to work around some of the bigger issues I get irritated with in my python based transports by using Wildfire internals was very intriguing. Since then I've come to gain a respect for, and even enjoyment of, Java. I adore the slew of well written tools, the wonderful IntelliJ IDEA software, and the wealth of documentation and libraries available for it. I'm quite pleased with what I've been able to do with the plugin that I was not able to do before.

That said, the unfortunate thing about working with non-open source protocols is that:

  1. The protocols change without warning
  2. The owners of the protocols don't typically want you there in the first place
  3. Libraries written to handle the protocols are often incomplete
I've never really understood the resistance to others implementing and connecting to your service from non-official clients. I happen to believe in letting folk use whatever they want to use to communicate with each other. This means not only that I believe XMPP users should be able to communicate with AIM/ICQ/MSN/Yahoo/etc users using their own XMPP clients, but also that AIM/ICQ/MSN/Yahoo/etc users should be able to communicate with XMPP users using -their- own clients. I've never been one to quest for folk to "convert" to another protocol. So this is part of why I enjoy working with transports so much.

The IM Gateway plugin will continue to improve, on to version 1.0 and on further from there. I will try to improve the world of transports in general via new concepts (probably in the form of new XEPs). I will not forsake my external transports in the process as they also serve wonderful purposes. :) All in all, I'm pleased with how the future of things is looking and I can only hope others are as well.

I will be posting more here in the future as development progresses, both about the IM Gateway plugin, and about new concepts in the land of XMPP transports. As for the plugin itself, you can download the beta releases of it from Wildfire beta plugin page. I would also like to invite you to visit the IM Gateway Support forum and post any questions or concerns!

9 Comments Permalink