Powered By:
Clearspace
BlatherSource: Because development won't keep quiet

Daniel Henninger's BlatherBlog

7 Posts tagged with the imgateway tag
0

You may have seen, in the past, my podcast about External vs Internal Gateways.  In that podcast I talked about a number of benefits that internal gateways have over external gateways.

 

It's not all peaches and cream though.  You see, the problem with being so close to the internals of the server with internal gateways is that you tend to hear and trigger far more than you intend.  I'm going to pick on Openfire a little here since that's what the IM Gateway plugin is using.  Some of these may simply be something that should be fixed in Openfire.  Being one of the developers of Openfire, yes, I will investigate them when I can.  =)

 

One of the issues is, when a roster item changes, I actually get a number of listener events that tell me this occurred.  It's difficult to know what the proper event is.  In some cases, I'll get an event with no groups and then another event with groups.  Hard to know which one of those is true.    All things that I need to run through and make sure I'm doing things correctly.

 

Likewise, any time I tweak something about a roster item, I get events telling me it's changed.  Yes, I'm aware, I just did them.  =)  So in that case I need to ignore events.

 

It's all very strange actually.  I switched to listening for packets for real IQ packets coming from the client.  Guess what, there's a lot of IQ packets that come from the client.  So that's not really making things easier.  In XMPP, groups don't mean as much.  Removing and readding groups is nothing big.  In AIM and friends though, it's dire.  You remove groups and you've moved things around on your roster a lot.  This is primarily because in XMPP, you have a roster item, and an attribute of it is what groups are in it.  In AIM you have groups, and an attribute of a group is who's in it.  (for nitpickers, I'm referring to attribute here as "something the entity contains",  not attribute in the literal XML form of the word)

 

So if you were thinking, wow, internal gateways sound so easy!  Think again.  =)  There's a lot that goes on behind the scenes that's more difficult to deal with than you might expect.  So to sum it up, I'd like to simply say, there's pros and cons of both.  =)  Don't think an internal gateway is a magic bullet.

0 Comments 0 References Permalink
3

When Worlds Collide

Posted by Daniel Henninger Apr 2, 2007

You know, when you are working by yourself on an open source project, your schedule is your own.  If you decide you don't want to work on it for a couple of months, that's your perogative.  At some level there's no rules what-so-ever aside from not doing things that will drive folk away from being interested in your project (assuming you care).  One of the biggest things that drives the project, however, is what -you- want.  When you are working on an open source project where you are teamed up with others, there's some checks and balances over what you do and your partners do.  However, at the end of the day, it's the same type of situation, you all decide what the focus of the project will be.  I don't like to put it like this, but no one has a "right" to your time except for you.

 

When you start working with a company on an open source projects, things change.  There are deadlines that the company is pushing for help drive your own timeline.  There are things they'd like to see happen that you may or may not agree with.  Instead of saying "well unless you submit a patch, it's not happening", you tend to work something out instead.  It's an interesting adjustment to "normal open source projects".

 

Do I dislike either?  No.  In fact I've quite enjoyed the experience of it.  It's taught me a few things that I wasn't aware of.  Like I was rather blind to some of the requirements that corporations ask for.  Some of the things they ask for I would typically have thought "that's ridiculous" with some of my other projects, but here I see a lot of folk bringing the same issue up and I start to discover that the issue is more commonplace than I would have assumed.  I'm not citing any examples here.  Just suffice to say there's things that having a broader knowledge of the corporate world has made me reconsider some of the decisions I might have made with other projects in the past.

 

So many thanks to Jive Software for giving me this additional experience that I wouldn't have gotten probably with PyAIMt and PyICQt.  =)  It's been fun and I hope it continues to be fun!

3 Comments 0 References Permalink
0

The problem with personal projects is just that, when the person in question gets interested in another project or busy or whatever, development stops.  This is what the current status of PyAIMt and PyICQt is.  I am having a lot of fun with the IM Gateway plugin for Wildfire, and as a result I don't feel interested in putting any time into PyAIMt and PyICQt.  Are these two dead now?  No.  I still have "things I'd like to do with them" in my head.  It's just most likely we'll see a 1.0 version of the plugin before I touch PyAIMt and PyICQt again.

 

One thing that the IM Gateway plugin has brought me is that I'm now quite comfortable working with other folk on the same source code.  That said, I'm trying to weigh the pros and cons of enlisting help with PyAIMt and PyICQt.  There are quite a few folk that are interested in using it, a few folk who submit me patches from time to time, and certainly general interest in the transports.  So my question posed is...  Are there folk out there who are fairly experienced python programmers who would be interested in becoming active developers of PyAIMt and PyICQt?  I am not handing off the project and will continue to be the project lead, and will continue to put development time into them as time permits.  Anyway, I have not yet decided on this, I'd just like to hear from folk who might be interested in contributing.  If I see some interest that'll help drive my decision.  =D

 

On a semi-related note, I continue to find java with an IDE to be fun and interesting.  I think working with java without an IDE would be maddening due to how long it takes to compile and test things in the environment I'm using it in, and it's certainly saved me a ridiculous amount of time in debugging stupid typos and crap.  The IM Gateway plugin itself is going pretty well but unfortunately there's a lot of work that involves working on support libraries as well.  The original developer of Java-JML turned over development to me so I've been working on that.  That's pretty fun, I know more about the MSN protocol now than I ever expected I'd know.  The Yahoo library is ... kind of a pain actually.  =/  Right now Yahoo is the biggest source of issues for me.  Joscar for AIM/ICQ is a damn fine library, but I want to move to using a more simple API and I can't seem to figure out how I use Joscar's simpler API.    Perhaps I should like... ask them instead of just blogging about it.  I tried figuring it out from Adium X but yeah...  =)  That's kind of a weird setup.  I need to work on implementing the old school ICQ authentication because, unfortunately, the "new style" AIM auth only works with newer accounts.  (how bizarre)  I've still got a lot to work on with IRC as right now it's a mightily talkative transport and I doubt most folk want to see all of that.  =)  My biggest issue at the moment is that I'm fighting with AJAX support in the web interface.  Trying to use DWR... seems like it should work fine... doesn't.  I wanted to figure this out on my own but it looks like I shall be deferring to the Jive folk to get it taken care of.  So many things to do.

 

So anyway.  Thinking back, I remember that the thing I thought was so awesome about XMPP is that the entire spec was written out and 'open'.  My first endeavour was that I like the Zephyr system from MIT and thought, based off the open protocol, that it would be neat to implement zwgc and friends except to communicate to Jabber/XMPP.  This formed into JWGC.  Transports came later, etc etc.  The great thing is that the openness of the protocol leads to a great feeling of being able to write your own client/server/whatever to learn how it all works and go from there.  The bad thing is that the openness of the protocol leads to a great feeling of being able to write your own client/server/whatever to learn how it all works and go from there.  =)  Now, I don't think this truly is a bad thing, but it does lead to a -lot- of starter projects written and then ditched.  I often see folk come jadmin and jdev asking about where to start in writing their own client/server/whatever, and typically they get a response of "why not just contribute to an existing project?".  If the person's goal is to just learn, starting from the ground up is not a bad way to go.  If the person's goal is to get a server/client up and running that has X feature that all of the servers don't have, contributing is definitely the better way to go.  What's the fine line between writing your own and not writing your own?  I certainly can't answer that.  Note that I think asking "why not just contribute..." is a good way to go about it because that encourages the person to say "well I just want to learn", at which point ok, go for it.  Or it encourages us to help point the person in the right direction.

0 Comments 0 References Permalink
0

Future Improvements?

Posted by Daniel Henninger Oct 22, 2006

In working with the IM Gateway Plugin, there has been a pressure to try to improve the way transports are handled in general.  I've begun the process of seeing what could be done to improve things, but one of the big sticking points seems to be not having the transports in your actual roster.

 

Now many clients provide an option to simply hide transports from your roster.  IMO, this is not a bad way to handle it.  Leaves it up to the client to decide whether to hide things or not.  It also allows for the end user to decide whether or not to see the transports or not.  I, for example, like to be able to see the transports and how they reflect when I'm logged in, what my status is, etc.  (because, for example, AIM only does available and away, none of the other statuses, and this is neat to see in my roster because I know that AIM folk don't know that I'm set to do not disturb)  It also allows clients like Psi and such to provide me a way to right click and choose log out.  (equiv of sending a directed presence packet)

 

So how would you go about having a transport detect that you've logged in if it's not in your roster to be telling you so?  Well you can cheat for one.  The IM Gateway Plugin allows me to use internal listeners.  This solution, of course, isn't going to help external transports a lick.  But for the plugin, it's nice.  Another way might be to require some sort of ad-hoc command to log into legacy services.  Like instead of auto-logging in, you have to select "log me in".  But then how does it detect status changes and such?  More ad-hoc commands?  Eww!  How many freakin' ad-hoc commands does it take to screw in a lightbulb.    Another way could be to create some sort of 'trust' relationship with a transport.  So a transport could indicate to it's attached server that it wants to be notified of any presence changes.  Not so sure about that either.  I think that was already addressed a long time ago in regards to transports wanting to interact directly with a user's roster.

 

Long story short, I think this will be fine for the IM Gateway Plugin to ditch the roster, as it apparantly confuses some folk to see transports in their list, but I don't think this is viable for other transport implementations.

 

That said, some issues have come up that -should- help other transports.  I'd like to, for example, write up an XEP that focuses on how to handle user preferences.  I'm not talking things like, "what theme for your client" but rather things that are handled on the server end.  For example, mail notifications.  AIM has them.  Not everyone wants them.  User should be able to go in and choose "no or yes" for mail notifications.  =)  These are enabled or disabled on the transport end and a client shouldn't be expected to have to be bothered with ignoring lots of things it doesn't want in the first place.  This is basically an ad-hoc command type of thing, but I'd like to standardize it or make it a "best practices" type of thing.  That way client devs could fairly easily go "oh this one supports user prefs, I'll provide an easy link for that".  Something like that.

 

Another one is a XEP that I had intended to write a while ago... basically something similar to Jabberd2's component protocol where the transport itself can connect and tell the server what jid's it wants to be.  This means that the transport could say "Hey, I'm aim.jabber, chatrooms.aim.jabber, and fries.aim.jabber" and the server could go "oh ok, well you got 'em" or "bugger off, those are taken".  Wildfire actually implemented this in a slightly different way than Jabberd2, but I think the same XEP could address both just fine.  I believe I originally called this "Extended Component Protocol" or something like that.  Who knows.  It's been a while.

 

On a side note, I think I figured out what was causing problems with Java-JML.  Basically I kept getting a severed connection upon logging in.  Turns out I think that the server Java-JML has for "fast login" is not a good one.  Theoretically you are supposed to connect to a nexus first and it'll tell you a login server.  I'm doing that now.

 

BTW, Thanks to the Cenqua peeps for providing me with a Fisheye setup for Java-JML!  I'm going to link that off the Java-JML site in a bit here.  =)  I love me some Fisheye.

0 Comments 0 References Permalink
4

Today we released the first beta version of the IM Gateway plugin for Wildfire.  I'm quite excited to have a release out, but also a little pensive as I always am with a release.  This one I'm expecting quite a lot of bug reports on because well, it's an early beta and that is the way of things.  I wanted to get a version out soon-ish so that folk could play with it and could start getting me some solid bug reports to work from.  I never run into the same problems my users run into.    Always interesting to see things like...  "my friend is using ICQ version 1 and I can't receive messages from him!"

 

Anyway, I took a break from developing after fixing a last couple of bugs this weekend to make sure that I didn't get involved in something that would temporarily delay the release.  Spent some time on PyICQ-t in the meantime.  Upgraded it to use James's twistfix stuff and also to kill the pubsub support I was working on, since it wasn't useful anymore after the recent updates to PEP.  I would like to put out a new release of that soon.  My typical "get everyone on the same page" release.  Besides, right now they don't work with Twisted 2.4.  =/  (right now meaning, the current releases)

 

I have been feeling like crap for about a week so I think I may try to calm it down and just relax until I am better.  No sense in making myself sicker.  Besides, that will give folk time to comment.  In the meantime I will do something leisurely like.. get out a release of the Pys.  lol  Why is that leisurely?  Well because it's already done, it's just a matter of I need to put out the release.  PyAIMt will be somewhat different in that I need to port over my bazillion changes to it.  I may not dive into that until I'm feeling better.  Then again, honestly, it's kinda mindless work, so it might help to get my mind off being sick.

4 Comments 0 References Permalink
4

The Wildfire gateway plugin is coming along.  Not as fast as I'd like at the moment, but I keep running into minor stumbling blocks outside the context of the actual plugin (read: getting sick, that sort of thing).  That said, I'm switching internal libraries for MSN.  The one I was using does not behave well in a multi-user environment.  Furthermore, it had some kind of annoying debugging that there wasn't an easy way to turn off.  I've switched to a more recent looking library.  It was between that and another one whose documentation was all in... I believe Korean.  All things considered, the function call names were in english, so I could have muddled through, but if both look good, why not choose the one I can read.  We'll see how that goes.  This one requires a little more knowledge of the underlying concepts of MSN's IM.  It'll be fine.  =)

 

As for the Py's, I've done nothing with them for a bit now.  The pubsub stuff I was working on was causing some file system problems and, on top of that, the recent updates to pep makes my work semi-useless.  No worries, I'm glad to see it doable in a much nicer fashion.  James is working hard on some wonderful new revampings to the underlying code for PyMSNt that I'm looking forward to pulling on over to PyICQt and PyAIMt.  I will, however, watch and wait until things look like they're good to go.  I don't have a gauge for this, so I'll just post it aloud here...  do people want me to put out a PyICQ-t and PyAIM-t with all of my current updates that's an actual release?  (underlying code will be cleaned up to lose the pubsub stuff first if I do that)  Otherwise, I'll be waiting for some bigger updates.

 

It's interesting to note that looking at code in one language sometimes helps you clarify concepts in your head  in another.  Just the way joscar does a few things made me go "oohhhh  yeah I could do that with pyaim as well".  shrug  I thought it was neat...

4 Comments 0 References Permalink
2

Well, I think I'm finally getting over whatever sickness it is that I've had for the past week... I hope.  Not very condusive to working on things...  That said, a lot of developments have come up recently that I thought I would post about.  Fair warning, this is gonna be kinda random.  =)

 

PEP Improvements

 

I would just like to throw a shout out to the folk who have been working on PEP.  I love the latest bit of changes and believe they will make it soooo much easier to implement.  Woot!

 

Familiar on my Pocket PC

 

As per some advice from a previous post, I have been looking into getting Familiar and it's associated desktops on my Pocket PC (IPAQ 2200).  Lovely hardware.  Crappy software.  (Pocket PC OS.. think it's even of the Windows CE vintage)  Anyway, I soon found there are two main choices for desktops for Familiar, GPE and OPIE.  First off, I adore the IPAQ's serial console and also the Familiar bootloader (forget it's name) and Familiar itself.  There's something just neat about watching Linux booting on your little handheld device.  Now, I right now my IPAQ has stuff for installing Familiar 0.8.3 (I think?) with GPE, and a beta Familiar 0.8.4 (I think?) with GPE or OPIE.  0.8.3 works fairly well except that I don't particularly care for the GPE desktop environment.  I think it's a tad silly to deal with getting root and that sort of thing on a handheld device.  Likewise, some of the apps aren't particularly helpful/nice.  For example, I can't get either wireless card I have to work.  One SDIO, and one CompactFlash/PC Card/I'm not sure.  lol  No worries on the lack of support for them yet, but the weird thing is that when I go to the webbrowser, and type in a url, it does .. well like nothing.  No error message, no nothing.  I goes back to the main webbrowser window.  Nothing is particularly pretty.  Overall, it just feels like it's trying to be too Linux.  =)  Now OPIE, on the other hand, is gorgeous, acts like a handheld device "ought to", and is generally quite nice!  No love on the wireless card yet still, which is odd, but I'll get to that in a moment.  I'm very excited about getting OPIE on there in a functional manner.  Problem is, it's not real functional under Familiar 0.8.4whatever.  All known bugs according to their trackers, so no worries there, I'm sure things will be fine.  =)  Very much looking forward to full functionality!  As for the wireless cards, looks like there's no support for SDIO cards period.  So ignoring that, the compact flash wireless card...  the online docs say something about what driver I would need to use, but said driver isn't selectable.  Soo.... yeah.  Maybe that's a pending release of the OS type thing.  Either way, that'll be mega cool to have when things are ironed out.  I'll be keeping an eye on things.

 

Nokia 770

 

Well, I am finally the proud owner of a Nokia 770.  I went and purchased one on Friday.  Comp USA... I would just like to say that your inventory control system is "the crap".  While it isn't ideal, I don't like that your web site says that there's no copies of it in stock and yet the store actually has some.  HOWEVER, how in the hell is it that I call you and you say you don't have any in stock and yet we drive over there, the guy in the handhelds department turns around, looks it up in the computer, and sees one available.  ???  Are you all's computers not tied together or what?  Bah.  Anyway, the nice guy found it hiding in a cabinet and low and behold, it's mine.  I immediately upgraded to the latest OS.  I love that it's self-sufficient!  I don't have to tie it to a desktop to install things, or get it working, or anything.  It's wireless functionality rocks.  Hell it picks up devices around that I didn't know existed.  =D  It cheerfully ties to my phone for access.  Unnnnfortunately, our friends at Sprint have dinked over the LG PM-325 firmware in a way that makes it unable to behave properly as a modem.  It keeps connecting and then disconnecting after like 20 seconds or so.  There's a lot of nice bluetooth functionality in my phone that doesn't work with Sprint's own firmware on there.  I made the mistake of evaluating the phone based off LGs specs, not Sprint's implementation of it.  Bah.  Not much I can do about it.  Sprint doesn't even sell my phone anymore so...  yeah.  As a phone, I love it though.  Oh well on that front.  Anyway, it ties into my home network really well.  Amusingly enough, my friend who bought a 770 a couple of months ago's hardware address is exactly one less than mine.  =)  I've only had a few problems with opera so far.  But those are pretty much classic Opera-isms.  I found the wonder that is the application manager that ties into various repositories.  Installed lots of things to try out.  Gaim actually works quite well!  Well so does google talk.  ;D  I like it quite a bit.  It integrates with the feel of the platform quite well!  I've had a couple of odd crashes here and there, but it comes back pretty cheerfully from the crashes, so no big deal.  I've been experimenting with the PIM software that's GPE based.  Now, considering my feelings on GPE above, I wasn't expecting a lot, but for some reason, on the Nokia 770, it's all quite nice!  Weird.  I haven't investigated whether it can do syncml or anything along those lines.  It has a note pad.  It has a password manager that I was able to download.  .. it's possible that this could be replacing my palm.  I'm thinking about experimenting with it as a replacement next week to see how things flow.  If nothing else, it makes an awesome ... well what it is.  =)  An Internet Tablet.  I enabled swap on the RS MMC card that came with it and that works out well.  Yeah you notice the slowness when it starts hitting swap but ... well what else is new.  =)

 

Wildfire Gateway Plugin

 

A little while ago, Jive Software approached me about writing a java based plugin to Wildfire that would provide easy access to other IM protocols.  At first I didn't think I had time for that, but as it turns out, for the most part, people have already written good libraries for the protocols under Java.  Not quite so under Python.  ;D  Besides that, they offered to support the project a tad, and so I have been working on the plugin since.  In this case, it is a single plugin that provides access to AIM, ICQ, MSN, and Yahoo.  (IRC planned as well)  It's sorta functional in it's current state.  There's a couple of problems, and a couple of important lacks-of-functionality, but it's definitely coming right along.  The guys from Jive have been very helpful and I'm quite excited about it.  I'm hoping to have good solid base functionality soonish and a beta release.  I have some awesome testers helping find bugs.  There's a lot of things I'm able to do with the plugin that I'm "jealous" of with the python transports.  For example, being able to interact with the user's roster directly is awesome.  I don't have to store a copy of their buddy list, or worry about bombarding the user with a bunch of subscription requests, or worry about lack of support for group propagation, or lack of support for nickname propagation ...  overall it's just really nice to work with internals for this.  Does this mean I'm not touching my python transports anymore?  Not at all.  This plugin will only work with Wildfire and the python transports should work with everything.  Likewise, with the plugin I'm aiming to keep "fairly minimal" whereas with PyAIMt and PyICQt have very intensive support.  For example, with the plugin I'm not implementing 8 billion versions of how avatars are implemented.  =)  Anyway, stay tuned if you are interested.  On a very very bright note, my reward for doing this should be arriving on Monday and it will singlehandedly increase the speed at which I can develop all of my projects.  =)  Score!

 

I'm using quite a few nifty toolkits with the plugin.  JMML for MSN support.  JYMSG for Yahoo support.  JOSCAR for AIM/ICQ support.  I am forgetting the name of the IRC toolkit I was looking at, but there is one out there.  A lot of these are considered "not yet 1.0", but they appear to work fairly well.  JMML is used with the planetamessenger.org stuff, which seem rather cool.  JYMSG seems to be a tad stagnant, but works well.  JOSCAR is actively being developed as part of Adium X and a 1.0 is right around the corner.  There is a companion piece called oscar.jar, which I may switch to when it's released.  Why?  Well, it's much higher level than joscar, which matters less to me since I am quite familiar with the OSCAR protocol, but would benefit others who might be helping with the code.  I'd like to try to keep this as non-complex as possible.  IRC is going to be interesting.  As we all know, IRC is primarily chatroom type stuff.  I don't have any chatroom stuff written up for the plugin right now, but that's ok.

 

It's interested to see this implemented via java instead of python.  One of the things about the python transports is that I am having to implement the oscar protocol as I go.  With this, it's already there.  One thing I'm pretty excited about is being able to use this to help with the python transports.  I'll have two gateway-implemented interfaces with AIM/ICQ and I'll be able to watch the flow of things as they go through Wildfire and compare/contrast.

 

You know, I hadn't given Java much of a chance in the past.  It's quite nifty.  It seems a lot better than it was the last couple times I looked at it.  Perhaps Sun has had quite a good effect on it?  If so, go Sun.  =)  Having the guidance from the folk at Jive to get me started here and there has been wonderful as well.

 

Anyway, you can keep an eye on what I'm doing here if you are interested:

Gateway Plugin Repository

 

Blathersource

 

Man...  yeah.  I feel overwhelmed with the stupid crappy spammers, but I really need to fix things so I can stop them from bothering my site.  Perhaps I will do that tonight 'real quick like'.  I need to implement a couple of things to do it:

 

1. Add "either captchas or login" for posting anything.

2. Add ability to delete comments

3. Add ability to delete bug reports/feature requests

 

Hate.

2 Comments 0 References Permalink