brad's life [entries|archive|friends|userinfo]
Brad Fitzpatrick

[ website | bradfitz.com ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

It's looking to be a fun year... [Jan. 17th, 2008|08:03 pm]
[Tags|, , , ]

Yahoo does OpenID...
http://openid.yahoo.com/

Blogger does OpenID... (including RP)
http://bloggerindraft.blogspot.com/2007/11/new-feature-openid-commenting.html
http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html

AOL/AIM speaking XMPP!?!
http://florianjensen.com/2008/01/17/aol-adopting-xmpp-aka-jabber/

What's next, dogs and cats living together?

Craziness.
Link12 comments|Leave a comment

LJ Talk activity (or, ejabberd vs djabberd) [Oct. 16th, 2006|12:40 pm]
[Tags|, , , ]

I've been watching our LJ Talk ganglia stats and also comparing them to the Jabber.org status (which runs ejabberd).

Our memory usage, even with a known memory leak, is way better. ejabberd seems to take 184 kB/connection, while djabberd is currently using 34 kB/connection. (which includes leaked data .... when it starts it's closer to 5 kB/connection)

In a week or two it looks like our connected clients will overtake jabber.org's too, at least with our current rate of growth. They currently peak at ~10,000 users. Our peak, currently at 4,000 users, keeps climbing each day, from a peak of just 1,000 a few days ago.

At least it's really easy now to track down memory leaks, using Devel::Gladiator and $^P |= 0x200, and Devel::Peek::CvGV .....

All objects in memory ...
Large dump.... )

So that'll give me something to do on the plane, too.
Link11 comments|Leave a comment

Portland [Jun. 9th, 2006|07:24 pm]
[Tags|, ]
[Current Location |Portland, Oregon]

Flew to Portland last night to work with Jive Software all today on an XMPP Interop test suite. Fun times. Cool people, cool company, cool office, cool city. Their Foobar has a kegerator + tap. Owned.

Sitting in Pioneer Courthouse Square now drinking coffee, in range of 18 access points.




Not sure what the plan is tonight. Finish my book here in the square, drop backpack off somewhere, and hit the town I imagine.
Link9 comments|Leave a comment

DJabberd status: incoming s2s works [Mar. 7th, 2006|06:35 pm]
[Tags|, , , , ]

We now support dialback (the old pre-XMPP s2s peer verification system), so now jabber.org (which I believe runs ejabberd) can connect to us and pass messages.

Will tackle my SSL s2s problem later. I bought the ORA OpenSSL book and many mysteries have been answered. All is now clear.

I need to do outbound s2s next.

Then I can do the "routing"/queueing system and rename all the hooks to be more consistent/useful. And adding lots more hooks at different stages.

Fun.
Link8 comments|Leave a comment

DJabberd Status Update [Mar. 5th, 2006|12:31 am]
[Tags|, , , ]

Hackathon today. Lots of people were working on Plagger while Artur and I were working on DJabberd (sorry, no good website yet).

We cleaned up the code a bunch, formalized the plugin system, added a bunch of new hooks, fixed a bunch of bugs, etc.

Notably as a caller you don't have to declare which plugins implement which hooks anymore. Plugins declare that themselves. (My example executable in my previous announcement where I had to define auth_hooks vs roster_hooks was just the result of laziness....)

Also, a new employee (Jonathan Steinert) has been going through the RFCs, naming each requirement inline, and then one of our tests parses the annotated RFCs and annotated source code and makes sure we comply with each requirement in the RFC.

Been reading the RFCs in bed tonight (as has Artur (in his own bed)), getting ready for another hacking session probably tomorrow where we want to work more on server-to-server and roster/presence stuff, shifting from RFC 3920 into 3921.

Fun stuff. Once we get it mostly compliant and get an SQLite roster/auth plugin we'll more formally announce/release it on CPAN.
Link7 comments|Leave a comment

Modular Jabber Server: DJabberd [Mar. 2nd, 2006|11:42 pm]
[Tags|, , , ]

UPDATE 2006-04-12: This ancient post is still the top Google hit, so go here for new information DJabberd website.
I've been hacking on a Jabber server lately and getting other people at the company also hacking on it with me. Tonight Artur and I did SSL support and fixed a ton of bugs and missing features. Started to work on s2s/dialback, now that we have SSL, but got tired, and I have jury duty in the morning.

The idea of the server is that it's a dummy shell / base class that you either subclass and/or instantiate a bunch of hook handlers for. (in the spirit of mod_perl, qpsmtpd, etc...)

It'll be usable for:
-- my personal jabber server, on "fitzpat.com" (maybe), but for other dorks
-- our company-internal jabber server, using LDAP auth (an auth plugin)
-- LiveJournal (lots of machines in one logical domain)

The main pluggable phases now are auth and roster management, and you can subclass to handle new stanzas, or to change message routing behavior, etc.

So far we have plugins for:
-- DJabberd::Roster::LiveJournal
-- DJabberd::Auth::StaticPassword
-- DJabberd::Auth::AllowedUsers
-- DJabberd::Auth::LiveJournal

So it's flexible.

Here's the main executable:

my $server = DJabberd->new(
           daemonize => $daemonize,
           s2s       => 1,
           auth_hooks => [
                DJabberd::Auth::AllowedUsers->new(policy => "deny",
         allowed => [qw(brad crucially bradfitz bob test)]),
                DJabberd::Auth::StaticPassword->new(password => "password"),
               #DJabberd::Auth::LiveJournal->new(server => "livejournal.com"),
             ],
            roster_hooks => [ DJabberd::Roster::LiveJournal->new(
                       server => "livejournal.com")
             ],
     );
$server->run;

Also, all the hook chains are processed async, so you have as much time in your handlers as you want, and you can call the callbacks with your response whenever, without stalling the event loop. Or you can be lazy and synchronous for small sites.

Before I started working on it, Artur and I looked into ejabberd, jabberd2, and some other things. They're just not extensible enough. We started to add pluggable roster management to them, but it was getting painful.

One day Artur comes in and says, "Dude, why don't we write our own?" I started to reply that it'd be hard, but I stopped myself and was like, "oh, right... just an event loop that feeds incoming data to a SAX parser..."

Turns out CPAN is full of bad XML code, bad Jabber code, and really bad SSL code. So it wasn't quite as easy as it should've been, but it wasn't that bad. To be fair, a lot of CPAN is good, but crap always outnumbers quality.

Don't go looking at the code yet. It's horrid at the moment, while we rearrange/tinker/etc. But I'll be posting more about it as it mature.
Link22 comments|Leave a comment

Jabber server status [Feb. 17th, 2006|03:35 pm]
[Tags|, , ]

Done:
-- Authentication (digest)
-- Authentication plugin against LiveJournal
-- Inter-user messaging (single node server)

Not done:
-- roster stuff
-- multi-node (but I have a plan which ignores this whole issue: not doing multi-node... making the subclasses deal with it! subclasses of the server must deal with routing messages. then LJ does something fancy, and small users use single-node)
-- server-to-server (shouldn't be that hard?)

Really fun: Jesse and I logged in using our LiveJournal usernames/passwords and chatted, complete with HTML! :P
Link6 comments|Leave a comment

Quick update [Feb. 17th, 2006|12:01 am]
[Tags|, , , , ]

Today (yesterday): kinda wrote a Jabber server. Or a Jabber server base class, really, so you can subclass it and deal with auth, roster, presence, etc, all how you want.

Artur and I quickly evaluated all the open source Jabber servers a couple weeks ago and none were extensible enough for things besides auth. So yesterday he comes in and says, "Dude, why don't we write our own, how hard can it be?" Answer so far: not hard at all. A half day of hacking (and learning Perl XML stuff) and I got something working a lot more than I'd thought.

The server begins:

use strict;
use Getopt::Long;
use Carp;
use Danga::Socket;
use IO::Socket::INET;
use POSIX ();
use XML::SAX ();
use XML::SAX::Expat::Incremental 0.04;
use XML::XPath;
use XML::XPath::Builder;
use XML::Filter::Tee;

... So you know it's good! ;P

Tomorrow (today) day: Work on it more. Wrap up email.

Tomorrow (today) evening: Fly to Belize and put all dork stuff out of my mind for 10 days as I swim with the fishes. (literally)
Link6 comments|Leave a comment

navigation
[ viewing | most recent entries ]