Soap over Email, why isnt this big?

July 29, 2008

I was turning over in my mind how one could start a peer to peer application without some kind of centralized directory, or protocol like PNRP that seems to have problems if certain ports are blocked, and isn’t supported on all devices. XMPP is a pretty interesting solution, and I’m sure we’ll start to see a lot of interesting applications on the android platform utilizing the native XMPP application bridge that android seems to have, but XMPP doesn’t seem to have any guarantees (at least as far as I’ve seen) on whether missed messages will be queued (or how long they will be kept) which makes it a rather ornery transport if you have clients that are only sometimes connected, and, say, want to synchronize data.

Then it occurred to me, that email is a pretty good solution to addressability and reachability problems on the internet. So I set out to see what people were doing with email as a transport layer. Turns out this is rather a hard thing to search for. I have stumbled upon a SOAP 1.2 note on a SOAP email binding, which seems interesting, but as it’s a note, I’m not sure anyone has implemented based on it.

.NET CF 3.5 seems to have both a WindowsMobileMailBinding (for windows mobile) and an ExchangeWebServiceMailBinding for windows, which seem really neat, but are tied to exchange server (which users of some random P2P app don’t necessarily have access to).

So here’s the question:

Why aren’t people all over this? Email is pretty pervasive, with free email accounts aplenty, so why don’t more applications use it as a data transport?

Speculations:

  1. There isn’t a clean solution to separate data transport emails from regular across email platforms?
  2. There are concerns about whether application generated messages could be considered spam?
  3. There is a worry about application messages being marked as spam and dropped?
  4. People think XMPP and PNRP, etc, are good enough for creating P2P meshes?
  5. Too complicated to configure and support?
  6. Against the TOS of some email accounts to send application data?

Anyone have any info/theories?


Distributed Applications, where are we?

July 15, 2008

I would like to put together a serverless distributed application, probably for devices. We’ve moved along pretty far in this field recently, but I’m not sure exactly where we stand.

Most forward in my mind is the problem of synchronizing data, when there is no gaurantee when or how often the nodes of the application will be connected. We want to avoid hosting a dedicated server specifically to act as a datastore for this information. This has a host of complications and startup costs. What else are our options? It seems like the use of XMPP as a data transport has come along, whereby you can use an XMPP service such as google talk to punch through NATs and ride around firewalls and deliver messages to the nodes in our application.

This approach is fine in terms of locating our nodes (as long as services like google talk are ok with application data being transported over their networks, this is rather unclear to me). But it doesn’t really handle the problem of missed messages, and XMPP, by default, does not make any kind of delivery gaurantees, I believe. So we may be able to layer on top of this to make the delivery reliable, but it seems things will get pretty complicated, and what about the case where we have a mobile device application where we will only very rarely connect and synchronize data, how likely is this client to be connected when other clients are connected so that they can “catch up”. Especially with devices like the iPhone, that have no ability to run background tasks to maintain a connection to a service. I belive some xmpp servers will store missed messages for a certain time, but I’m unsure how reliable this is.

Thinking about this though, I thought of the perfect solution, but I’m unsure as to whether it aligns with the terms of service of the services in question. What if our application posts structured data to a blog? Each node could even have its own blog, and synchronization can involve querying these blogs for posts that have not yet been seen. It seems like this would be straightforward with most of the blogging apis available for the major blog hosts out there. But this type of use would seem to fall in some sort of grey area, and may be against the TOS of these services. Anyone know?

Its an interesting generalization to think about though. When we use a blogging site, we are publishing human readable information to the internet, with the help of an online service. But could we not generalize this such that we allow users of an application to publish machine readable information to the internet, with the help of an online service? And if the structure of this information were to conform to an open specification, many applications would be able to make use of it, and add to it. Anyone know if there is an online service that is tailoring itself to this kind of interaction?

I guess another solution is some kind of cloud computing, but we still have an issue where if clients are so infrequently connected, it may be rather hard to keep the data store synchronized.