Ever since the Strikethrough of '07 -- actually, ever since I realized that LJ was something of an attractive nuisance of basket in which to store eggs, way back when -- I've been thinking about how one would go about turning LJ, the software, from a client/server model to a peer-to-peer model. That is, how to make LJ distributed
(
Read more... )
(1) Extend some existing blog software (LJ, WordPress, whatever) so that the author of a blog posting can declare that only certain users--where OpenID is used to determine a user's identity--can read the posting, and that the filtering of what postings a user sees happens not just for the regular Web page, but for the RSS/Atom feed as well. (I.e., if you turn your browser to sidereasjournal.com/atom.xml, you get redirected to an OpenID login page, and you can only see the actual XML after you log in.)
(2) Extend some existing blog-aggregator software (the kind that runs on the desktop, rather than Google Reader or Bloglines, for obvious reasons--Sage, Liferea, whatever) so that you can log into it with OpenID and then it will pass along your OpenID credentials whenever it crawls your list of feeds.
(3) (Bonus!) Do the same thing for some servers and clients that support the Atom Publishing Protocol.
Framed in these terms, I think the project is do-able, although I, like you, don't have the time or knowledge to pull it off.
Reply
To make a desktop aggregator work like LJ's you would need to extend it to handle cuts and it would have to share ACLs with your site, anyway. (Filters == ACLS on LJ, after all. Now, it could be seen as a feature to break away from LJ's model on that, but if the point of the exercise is to give people independent LJs....)
Reply
I've never looked at the LJ code base so I don't know how hard it would be to change from a username-based model to an OpenID-based model for ACLs.
As a proof of concept, it would probably be easier to add OpenID-based filtering to blosxom than LJ, because blosxom is built around a simple Perl CGI script.
Reply
You really think so? But then you have to write all the infrastructure for managing those ACLs, which LJ already has. Likewise, I haven't seen the code, and maybe it is all complete spaghetti....
Reply
Unfortunately, comment filtering in blosxom is also done the old-fashioned way--there's a text file full of comments for each article, and if you want to delete a comment you just edit the text file and, umm, hope that nobody you care about tries to add a comment while you're editing. Unsurprisingly, blosxom blogs seem particularly vulnerable to comment spam, which is why I don't use blosxom any more. But I digress.
Anyway, I hope that whatever protocol is used for LJdist servers to communicate with one another can also be adopted by other blog engines.
Reply
Reply
Other than that one case, which is really a separable "application", is there any reason the servers would talk to each other at all?
Reply
Yeah, I've been thinking about exactly that problem, and what seems to me to be a related problem with RSS polling, which is that it's profligate of resources.
Why not make the servers *push* instead of pull? Instead of using RSS to badger all the other sites you're subscribed to, why not make LJdist "publish" on write to "subscribed" LJdist peers. So when I hit "Post" on my LJdist, all the LJdists I've friended get a HTTP GET notifying them to update. Or even an HTTP POST, "here's your copy of my post". We'd be sticking all those posts into a db table anyway, right?
Reply
It's been suggested that this is something Jabber/XMPP is suited for, but you still need servers for that (on the other hand, LJ includes a jabber server, so LJdist could too, and might actually be the right way to express that.) Thinking through the overhead involved... doing GET-based pings probably ends up cheaper :-)
Also, it turns out that with proper use of ETAG/If-Modified-Since, rss-polling isn't *that* expensive (though it will be more expensive than what singleton-LJ does now which is purely internal.)
Reply
There are some practical issues as well, of course. For instance, it turns a synchronous process (posting an entry) into an asynchronous one (posting and *publishing* an entry), because the amount of time required to push it out to all subscribers is essentially arbitrary. (Since you can't count on the response time of those HTTP POSTs to other peoples' servers.) So it's just plain more work to code it, probably involving a swarm of background worker threads publishing the entries that have been updated. Not rocket science, but not trivial...
Reply
Reply
Reply
Reply
Hence, I've always assumed that an LJdist-like system would be rewritten from scratch for that purpose. I might be wrong, but I'd be a little surprised...
Reply
Leave a comment