I'm not sure where the best place to post this is, so I posted it
here. I figured that it matches the topic. This is pasted from my blog
post:

<http://danopia.net/posts/12>

You can check my instance of Sails out at <http://wave.danopia.net/>
(provided it's up ;) and my GitHub project is at <http://github.com/
danopia/ruby-on-sails>.

Any comments, here or on the blog, are  appreciated.
---------------------------------------------------

Ruby on Sails is a project that I started about a week ago
(10/19/2009). It is a homebrew Google Wave provider. The short history
of the project has had many setbacks, including IRB dropping
characters when I paste in packets, me having to write a custom Ruby
ProtoBuffer parser, and a few rewrites of old code that already was
old and badly designed (in a week-old project that was written from
scratch!).

Some highlights of the project:

   1. The communication between the provider and any "clients" (aka
servers that interact directly with true clients, such as the Rails
app) is done with DRb. Sails doesn't contain more than 10 lines of
code concerned with connections to the provider and sending data out.
   2. It has a reusable ProtoBuffer class that can be used by any Ruby
project needing to parse/encode Google ProtoBuffers. (This code will
probably be packaged into a gem when I get the time.)
   3. The package includes a little telnet server that just dumps the
list of waves to the terminal, along with the complete history.
Although this is probably broken right now due to my switch to a new
Playback Class last night for history, it shows how easy it is to
interact with a Sails server.
   4. Federation! Yes, that's right, it's federated. Not without its
bugs, though. As of this post, it could successfully receive deltas
from FedOne, ask for the full history of a wave, show the wave in a
WebUI, and send signed deltas back the remote FedOne to apply. It also
successfully hosted a wave that remote FedOnes could work with, but
this broke recently and even a rollback of my Sails repo didn't fix
it. I heard that it's an issue with the latest FedOne mercurial
commits.
   5. Short, or at least shorter than FedOne. The main file is 865
lines (including blanks/comments) as of this post; the code that
interacts with XMPP is <400 lines; all the logic from the WebUI is 75
lines. The little Telnet server is 50 lines, 15 of which actually
involve printing the wave list to the console.
   6. Accounts: This is why it uses the Authlogic gem and SQLite. When
you log in, though, the WebUI lists EVERY wave, not just yours. This
is on purpose. It would be a lot more boring otherwise.
   7. YAML configuration file, which can even store wave "fixtures"
that are parsed into the provider on startup.
   8. Not written by Google. This project is done by a single high-
schooler in his off-time between homework. It shows that you really
don't need a few hundred people to write a provider.

Also, as far as I can tell, this is the only non-Google-written server
that has semi-working federation. Pygowave isn't federated yet, which
is why I can say that. If some other federated third-party server
exists, feel free to cite it in a comment. I'd like to play with it.

Finally, you can check my instance of Sails out at http://wave.danopia.net/
(provided it's up ;) and my GitHub project is at 
http://github.com/danopia/ruby-on-sails.
If you are testing federation, please note that the server is
currently configged to use @wave.danopia.net. It would be interesting
to see what happens when one adds an @danopia.net to their wave,
unless it just accepts it without any errors.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Wave 
Protocol" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/wave-protocol?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to