CouchOne, has been hosting a curious CouchApp on his personal site: Twebz. Twebz is a "decentralized Twitter client." We were curious about what that meant, so I did an interview with Anderson about the project. He says it's just a demonstration of what CouchApps are capable of. But it also hints at what CouchDB is really trying to accomplish: a radical re-architecting of the Web into a more decentralized system. Read on for the full interview.J Chris Anderson, CFO of
Klint Finley: Let's start at the top: what exactly is Twebz? It's described as a "decentralized Twitter client." What exactly does that mean?
J Chris Anderson: The aim is to allow you to interact with Twitter when Twitter is up and you are online. But if Twitter is down for maintenance or you are in the middle of nowhere, you can still tweet. And when you can reach Twitter again, it will go through.
If lots of folks are using it, then they can see each other's tweets come in even when Twitter is down.
Mostly the goal was to show the way on how to integrate CouchDB with Web services and APIs.
It seems like it could be really useful for people in situations where Internet access is spotty, though.
Definitely. It's not production software yet, lots of rough edges. But it could be cleaned up and packaged like a normal desktop Twitter client easily.
Do you plan on releasing it?
Not currently - I did it when I was around the house right after my daughter was born. So it's really just to show other developers how to build these things.
So I guess the idea is that you'd run a local copy and it would connect with other instances of Twebz running on other people's machines and everyone's client would try to connect to Twitter when possible?
Yes. The hard part is ensuring that someone else can't trick your client into tweeting something as you that you didn't write. So I had to do some JSON cryptography stuff to protect against that.
I was going to ask about that - so your Twitter credentials are passing through other people's machines?
No, your credentials are private to your machine. Potentially someone could send you a tweet that looked like it's supposed to be from/by you. The crypto makes sure that the Twitter-posting code can't be fooled by that.
So if you did release this, and people started using it, and then one day Twitter decided "We're done. We're going to go raise pigs in the Ozarks," Twebz would actually still be up and running fine basically forever and everyone could keep reading each other's Tweets.
Yep. And as a side effect you have a complete personal Twitter archive of the folks you follow.
There's even a feature to pull in the complete history of a user, so you can get the back fill of your closest friends if you want.
The full history is what is used to power these types of word clouds for a user. Aside from the autocomplete, I think the word clouds are the best feature. It subtracts the global frequency of each term from the per-user frequency of a term. So for each user you see the terms that are distinctive to them.
How does the autocomplete work?
Autocomplete uses CouchDB map reduce to build a prefix index. Then CouchDB sorts the matches by popularity when each time you type a letter into the search box. So it may start out: aardvark apple alligator (as things that start with "a"). But CouchDB will sort it so you get apple first, as that's the most popular. It was inspired by Google Instant.
If people want to try it, the code and instructions are here.
It says on GitHub that it doesn't work yet.
That's the same as on the site - it certainly isn't ready for the faint of heart. But someone comfortable hacking node.js and CouchApp would be able to dig in and run it.
I wish I had time to clean it up for release, but this week will continue to be busy with all that actual business stuff I've got to do.
Could CouchDB and Node be used in conjunction to create some sort of decentralized darknet? Something along the lines of Freenet?
Node is a good fit for CouchDB because Couch encourages asynchronous background processes, but people also use Ruby / Python / Java for the same purposes. But yes, eventually the plan is that CouchDB will make Web applications a lot more robust because they will no longer depend on a centralized point of failure. E.g., even if Twitter goes out of business, people can continue to share messages.
The turnover of Web 2.0 startups is so fast that I think users get discouraged from signing up for services. Why bother with a new photo share if there's a chance it won't be around in a year? But when those are CouchApps, users can continue to use them even if no one is maintaining them, which makes it more rational to invest time in using them. Imagine if Pownce or Dodgeball were still being run by fans.
Have you seen CouchAppspora?(Disclosure: CouchAppspora contributor Tyler Gilles is a ReadWriteWeb employee.)
Yeah, I like that project because the social aspects of it get to the core of the stuff that "comes for free" with the CouchApp platform.
For another example of how CouchDB is useful in low-connectivity settings, check out this case study on how Better Health Outcomes through Mentoring and Assessments is using CouchDB in rural Zambia.