<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JoeCascio.net &#187; development</title>
	<atom:link href="http://joecascio.net/joecblog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://joecascio.net/joecblog</link>
	<description>Everyone is entitled to my opinion</description>
	<lastBuildDate>Fri, 27 Jan 2012 13:04:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>A couple of suggestions for Janetter</title>
		<link>http://joecascio.net/joecblog/2011/12/21/a-couple-of-suggestions-for-janetter/</link>
		<comments>http://joecascio.net/joecblog/2011/12/21/a-couple-of-suggestions-for-janetter/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 15:01:23 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=652</guid>
		<description><![CDATA[Last evening, I exchanged a few tweets with the folks at Janetter (@Janetter_jp), the Twitter client I just installed on my MacBook. Overall, I really like Janetter. It is a big improvement over Tweetdeck, which got bought a few months ago by Twitter, and now appears to have been put in stasis. The folks at Jane, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://joecascio.net/joecblog/wp-content/uploads/2011/12/logo.jpg" rel="lightbox[652]"><img class="alignleft size-medium wp-image-655" style="margin-left: 8px; margin-right: 8px;" title="logo" src="http://joecascio.net/joecblog/wp-content/uploads/2011/12/logo-300x74.jpg" alt="" width="300" height="74" /></a>Last evening, I exchanged a few tweets with the folks at Janetter (<a href="http://twitter.com/#!/janetter_jp">@Janetter_jp</a>), the Twitter client I just installed on my MacBook. Overall, I really like Janetter. It is a <em>big</em> improvement over Tweetdeck, which got bought a few months ago by Twitter, and now appears to have been put in stasis. The folks at Jane, Inc. (based in Osaka, Japan?) have really done a good job building a tool that reflects the way people really use Twitter. But of course, no work of software is ever &#8220;done&#8221; and as happy as I am with this lovely new program, there are a couple of things I want to suggest that might make it even better.</p>
<h3>Edit Tweets after they&#8217;ve been posted</h3>
<p>For some reason, people often don&#8217;t see errors in text they&#8217;re editing until the text is posted publicly. I think this has to do with the fact that publishing often changes the line breaks, font, background, foreground text color, formatting or whatever so that the error suddenly becomes apparent.</p>
<p>This happens to me once in a while when using Twitter. In Janetter, the edit box for composing a tweet stretches the text out in one long line. But after being posted and appearing in a stream column, it&#8217;s line-broken into 4 or sometimes more lines depending on column widths. Once posted of course, there&#8217;s no way to correct the error except by deleting the tweet and re-entering it.</p>
<p>Now, what would be really great is to be able to edit a tweet after you&#8217;ve posted it, like you can edit a post on Google+. Twitter doesn&#8217;t support this, but Janetter could make it <em>appear</em> that it was simply by putting an &#8220;edit&#8221; button or link on the posted tweet and letting you edit the tweet (ideally, in place in the column) and then reposting the tweet and deleting the old one, all in one step. The new tweet would appear at the top of the column with its correct, new post time and the old one would disappear, reflecting what was actually done behind the scenes. This doesn&#8217;t do anything you can&#8217;t do yourself manually, it just makes it more convenient by combining several steps into one and corresponds better to the user&#8217;s mental model of &#8220;where&#8221; the tweet is, so to speak. The picture below attempts to illustrate how I think it could work. Click on it to get the full-size version.</p>
<p style="text-align: center;"><a href="http://joecascio.net/joecblog/wp-content/uploads/2011/12/Screen-shot-2011-12-21-at-8.47.48-AM.png" rel="lightbox[652]"><img class="aligncenter size-full wp-image-662" title="Screen shot 2011-12-21 at 8.47.48 AM" src="http://joecascio.net/joecblog/wp-content/uploads/2011/12/Screen-shot-2011-12-21-at-8.47.48-AM.png" alt="" width="448" height="136" /></a></p>
<p>I wouldn&#8217;t expect Janetter to try to maintain the conversation links to the old tweet, or anything else that gets deleted along with the old tweet. That would make the problem much more complicated and probably impossible, given the twitter API. The user just gets what they get when they manually delete and repost now.</p>
<p>The people I know on Twitter would <em>love</em> this little convenience feature. How about you?</p>
<h3>Enable the ESC key to cancel photos and profile dialogs</h3>
<p>This is a consistency and convenience issue. I instinctually hit the ESC key to cancel dialogs and I think it&#8217;s always good to give the user the choice of using the keyboard over the mouse when possible. Please note I would <em>add</em> this key response to the current method of clicking outside the dialog and not replace it! It doesn&#8217;t have to be an either/or choice. Both can work, right?</p>
<h3>Mouse Rollover pauses column update</h3>
<p>One of the things that drives me crazy about all auto-updating Twitter clients is that they inevitably update just as I&#8217;m about to do something with a tweet. The tweet I&#8217;m interested in gets scrolled away, and I end up clicking on the wrong tweet!</p>
<p>Now, I know that clicking on a tweet in a column in Janetter will stop updating in that column, but that&#8217;s not exactly what I want. I only want updating to <em>pause </em>while the cursor is over that column and to restart automatically when the cursor moves off, OR when the cursor hasn&#8217;t moved for say, a minute. Here&#8217;s a simple illustration of how it might work. Again, click on the picture to make it full size.</p>
<p style="text-align: center;"><a href="http://joecascio.net/joecblog/wp-content/uploads/2011/12/Screen-shot-2011-12-21-at-9.53.44-AM.png" rel="lightbox[652]"><img class="aligncenter size-full wp-image-671" title="Screen shot 2011-12-21 at 9.53.44 AM" src="http://joecascio.net/joecblog/wp-content/uploads/2011/12/Screen-shot-2011-12-21-at-9.53.44-AM.png" alt="" width="536" height="359" /></a></p>
<p>Janetter has built a really good product. I hope they&#8217;ll consider these improvements. I happily offer myself as a development tester.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2011/12/21/a-couple-of-suggestions-for-janetter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QR codes debut in New London, Connecticut</title>
		<link>http://joecascio.net/joecblog/2011/01/23/qr-codes-debut-in-new-london/</link>
		<comments>http://joecascio.net/joecblog/2011/01/23/qr-codes-debut-in-new-london/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 13:42:09 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=504</guid>
		<description><![CDATA[I&#8217;ve been working on a little SaaS project I call AdTraqr that helps advertisers determine which ad placements are most effective. It employs those darlings of Japan, QR codes, which were invented by a Toyota subsidiary to track parts inventory. Here&#8217;s one that points to my About.me profile page: The way AdTraqr works is that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a little SaaS project I call AdTraqr that helps advertisers determine which ad placements are most effective. It employs those darlings of Japan, QR codes, which were invented by a Toyota subsidiary to track parts inventory. Here&#8217;s one that points to my About.me profile page:</p>
<p><a href="http://about.me/joecascio"><img class="alignleft" title="About.me/joecascio" src="http://qrcode.kaywa.com/img.php?s=8&amp;d=http://about.me/joecascio" alt="" width="139" height="139" /></a></p>
<p style="text-align: left;">The way AdTraqr works is that you create a &#8220;target&#8221; record in the database that contains a URL you want the user to be directed to when they scan the code.</p>
<p style="text-align: left;">The alpha test, which just ran in the New London, CT local paper <a href="http://theday.com">The Day</a> contained a QR code for each of three properties belonging to a realtor friend. These went into a 1/4 page size ad in the real estate supplement that is inserted in the paper on Fridays. To my knowledge, this is the first use of QR codes in advertising in The Day.</p>
<p style="text-align: left;"><strong><em>Click on the image first to get the full-size version </em></strong>and then try scanning the codes with your smart-phone.</p>
<p style="text-align: left;"><a href="http://joecascio.net/joecblog/wp-content/uploads/2011/01/randall-robotham.png" rel="lightbox[504]"><img class="size-full wp-image-507 alignright" title="randall-robotham" src="http://joecascio.net/joecblog/wp-content/uploads/2011/01/randall-robotham.png" alt="First QR code ad for The Day" width="362" height="363" /></a> What you should see is the agency&#8217;s property page for the listing you scanned with all details about price, square footage, etc.</p>
<p style="text-align: left;">The &#8220;tracking&#8221; part of the service comes in when you place different codes for the same target in multiple papers, real estate flyers, on the property sign or any other place. Each placement for the same target has a different QR code. When someone scans the code, it actually goes to a URL on AdTraqr.com, which increments a count in its database of how many times that particular QR code was scanned, and then redirects the user to the actual target page, in this case a real estate listing. The agent can then look at their account page on AdTraqr and see how many times each placement was scanned. This gives them direct information about the effectiveness of each placement, which can help them decide where their advertising dollars are best spent.</p>
<p style="text-align: left;">And of course, any business that advertises can use QR codes in this way, not just realtors. A retail store that advertises in a wide area could tell which town produced more customers by putting a different code in each local paper or flyer version that they publish.</p>
<p style="text-align: left;">There are many ways to use QR codes and AdTraqr. A web-savvy business will create different landing pages for each QR code or target that they produce. Coupons or discounts can be implemented this way or information on new products or services.</p>
<p style="text-align: left;">The exciting thing about QR codes is that they make print an extension of the internet, and that&#8217;s an intriguing concept.</p>
<p style="text-align: left;">AdTraqr.com is in private alpha right now. I expect to go public in maybe another month, at which time, I&#8217;ll update you. Thanks for reading, and go find a QR code to scan!</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2011/01/23/qr-codes-debut-in-new-london/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Announcing SLAP</title>
		<link>http://joecascio.net/joecblog/2009/05/18/announcing-slap/</link>
		<comments>http://joecascio.net/joecblog/2009/05/18/announcing-slap/#comments</comments>
		<pubDate>Mon, 18 May 2009 23:39:20 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[distributed applications]]></category>
		<category><![CDATA[federation]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[protocol]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[slap]]></category>
		<category><![CDATA[subscribing]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=244</guid>
		<description><![CDATA[SLAP &#8211; Simple Lightweight Announcement Protocol Today, to only two close developer friends, I&#8217;m releasing a first prototype of a new project called SLAP (for Simple Lightweight Announcement Protocol). We&#8217;re going to begin multi-server testing of it as soon as possible. If you&#8217;re not a developer, you may not immediately grasp exactly what SLAP is [...]]]></description>
			<content:encoded><![CDATA[<div class="entry">
<h3>SLAP &#8211; Simple Lightweight Announcement Protocol</h3>
<p>Today, to only two close developer friends, I&#8217;m releasing a first prototype of a new project called SLAP (for Simple Lightweight Announcement Protocol). We&#8217;re going to begin multi-server testing of it as soon as possible. If you&#8217;re not a developer, you may not immediately grasp exactly what SLAP is all about, but I&#8217;m hoping it will help all of us establish our own Social Networks of One, as Jeff Pulver calls it, and not be slaves to the whims of services like Twitter or Facebook, that now determine when and how we can communicate.</p>
<p>SLAP is a project I’ve been developing on and off for a couple of years. SLAP provides a very minimal and fast way to alert content or status subscribers that new or updated information is available, without them having to poll constantly for it.</p>
<p>By eliminating polling we benefit both the subscriber and the publisher. The subscriber gets informed of new content immediately, with no polling period latency and no resources of computing or bandwidth are expended between announcements. Likewise, the publisher does not need to provide sufficient bandwidth and computing resources to respond to polling requests, the vast majority of which result in no new information.</p>
<p>Unlike HTTP and XMPP, SLAP is connectionless, employing UDP (User Datagram Protocol) as its underlying transport mechanism. This is why no significant server or network resources are used between announcements. Although XMPP provides the same immediacy of delivery and elimination of polling, it requires long-lived connections to be maintained even if the frequency of announcements is very low, e.g., once a week. HTTP does not require long-lived connections, but instead requires establishing and terminating much TCP connection overhead in a short amount of time to deliver a very small amount of data.</p>
<h3>The SLAP model</h3>
<p>SLAP defines announcements in terms of feeds and posts to those feeds. Each feed is identified with a URI and each post with a perma-link URI. Further, each announcement is uniquely identified independently of the feed and post it is related to. This allows many announcements of the same feed and post. For example a post may be initially created, then edited many times, or commented on many times. Each edit or comment can result in a new announcement of a change to the post.</p>
<h3>Publishers and Subscribers</h3>
<p>There are two basic roles in the use-case model for SLAP; the Publisher and the Subscriber. The Publisher creates new feed content and emits a SLAP event every time that feed content changes that goes to every Subscriber. The Subscribers receive the announcements and respond with an acknowledgement. The announcements and acknowledgements are all delivered using UDP, which means no connection overhead for either the Publisher or the Subscriber. The protocol is tolerant of off-line Subscribers and noisy, unreliable networks. Publishers retry unacknowledged announcements at a fixed period and for a limited amount of time. One of the strengths of SLAP is that a missed announcement is not the end of the world. The Subscriber can periodically check the Publisher for all feed content and discover a missed post that way.</p>
<p>Strictly speaking, SLAP is not intended to deliver content, but only to announce that new or modified content is available on a feed and to provide the URIs for the feed and the post that allow the subscriber to fetch the content. SLAP does provide for a content summary that may in many cases be all the content there is. Microblogging or automated system status updates would tend to use this feature. In these cases, an attribute of the message could show that the summary is the entire post content. This is an optimization that enables a subscriber to avoid making a content fetch when the summary is all that there is.</p>
<p>Having the publisher be responsible and obligated for content storage allows a subscriber that has been offline for an amount of time to fetch any posts it missed simply by reading the feed as it normally would.</p>
<h3>Separation of subscribing and fetching from announcing</h3>
<p>The core SLAP messaging services deliver and acknowledge announcements, but play almost no part in establishing or terminating subscriptions. Nor do they specify how fetching of post content happens. Subscriptions can be established in any number of ways, as long as the required information for announcement delivery and authentication is provided. The subscription protocol is an open development issue, and your comments and suggestions are welcome. Personally, I see a simple extension to RSS as being the most obvious route. This would allow common blogging or microblogging applications like WordPress or Twitter to add announcement support with a relatively small modification to their current RSS support. RSS feeds could allow SLAP-enabled subscribers to discover the SLAP parameters and automatically connect to those feeds providing SLAP announcements.</p>
<h3>Authentication</h3>
<p>Any protocol that “pushes” information to a destination opens a possible hole for spammers. One of the challenges to making SLAP work is enabling subscribers to authenticate incoming announcement messages as to their source and to do it relatively quickly. This first version of SLAP uses a simple MD-5 hash of the message contents with a subscriber generated key that is exchanged at subscription time, ideally using secure communication.</p>
<h3>Try it, you’ll like it.</h3>
<p>SLAP can be used just for publishing, just for subscribing, or both. You’ll need to run it on a machine that you can open the firewall on, and receive UDP messages on ports 14947 for the subscriber and 14948 for the publisher. Or you can use any SLAP server that you’re given access to.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2009/05/18/announcing-slap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OAuth and OMB &#8211; missed point</title>
		<link>http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/</link>
		<comments>http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 12:25:09 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenMicroblogging]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=124</guid>
		<description><![CDATA[After spending quite a few hours on yesterdays post, OAuth and OMB post-sharing, it occurred to me with the first cup of coffee this morning that I had missed one important user interface twist in the use of OAuth that actually makes it quite necessary. It depends on how the UI for subscribing works. If, [...]]]></description>
			<content:encoded><![CDATA[<p>After spending quite a few hours on yesterdays post, <a title="OAuth and OMB, first post" href="http://joecascio.net/joecblog/2008/11/22/oauth-and-omb-post-sharing/" target="_blank">OAuth and OMB post-sharing</a>, it occurred to me with the first cup of coffee this morning that I had missed one important user interface twist in the use of OAuth that actually makes it quite necessary.</p>
<p>It depends on how the UI for subscribing works. If, as with a feed reader, the subscriber enters the URL of the person they wish to follow, authorization is unnecessary. The user has made their intention known to their own account, and can simply request the posting server to send updates.</p>
<p>However, if the the subscriber subscribes by visting the site of the poster, and the poster allows unrestricted access, then there must be a mechanism for the subscriber to tell his own site that he wishes to subscribe to the poster&#8217;s updates. This is where OAuth comes in, and it is indeed a well-matched use-case for OAuth&#8217;s functionality.</p>
<p>Apologies to Evan at Identi.ca.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Work for yourself</title>
		<link>http://joecascio.net/joecblog/2008/10/17/work-for-yourself/</link>
		<comments>http://joecascio.net/joecblog/2008/10/17/work-for-yourself/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 16:44:19 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[philosophy]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=90</guid>
		<description><![CDATA[I just got through watching this video of Jason Fried that was recorded earlier this week in Boston. It&#8217;s the long-form, illustrated-with-slides version of the extemporaneous talk he did for RI Nexus this past Wednesday in Providence. I highly recommend this to anyone involved in software development. Listening to his list of specific dos and [...]]]></description>
			<content:encoded><![CDATA[<p>I just got through watching <a title="Video of Jason Fried talk in Boston" href="http://network.businessofsoftware.org/video/video/show%3Fid%3D2352433%3AVideo%3A2016" target="_blank">this video</a> of Jason Fried that was recorded earlier this week in Boston. It&#8217;s the long-form, illustrated-with-slides version of the extemporaneous talk he did for RI Nexus this past Wednesday in Providence. I highly recommend this to anyone involved in software development.</p>
<p>Listening to his list of specific dos and don&#8217;ts in more detail just now made me realize that there&#8217;s one overarching philosophical tenet that guides all the details and that is the following.</p>
<p>Run your business and build your product for yourself, not for investors or shareholders or analysts or &#8220;big&#8221; customers. Run your business to sustain your own life-style and your own integrity. Build things you believe in, not what some purchasing manager put in an RFP.</p>
<p>Investors want you to grow without bounds. That makes you put in crap you don&#8217;t want. Salesmen want you to put in a useless feature so they can get a big sale. Big customers want you to put in things only they want. While some of these forces may have some benefits, in the long run, they only push you to do things that dilute or muddy up the product with noise. Truly great products are simple, coherent, easy to understand and perform quickly and reliably.</p>
<p>For me, this means satisfying the artist, artisan and craftsman in myself, not somebody who makes money off of what I do. That is where great works come from; not from a balance sheet, an enhancements list, a specification or god knows, Microsoft Project.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/10/17/work-for-yourself/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thoughts on Jason Fried&#8217;s talk last night</title>
		<link>http://joecascio.net/joecblog/2008/10/16/thoughts-on-jason-frieds-talk-last-night/</link>
		<comments>http://joecascio.net/joecblog/2008/10/16/thoughts-on-jason-frieds-talk-last-night/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 23:53:23 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[Jason Fried]]></category>
		<category><![CDATA[RINexus]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=82</guid>
		<description><![CDATA[Many thanks go out to Jack Templin and RINexus for bringing Jason Fried, founder of 37Signals to Providence last night. Jason spoke on many aspects of his success and what got him there, and answered a lot of questions, even mine! What really impressed me about Jason&#8217;s story was that he became a success doing [...]]]></description>
			<content:encoded><![CDATA[<p>Many thanks go out to Jack Templin and <a title="RI Nexus home page" href="http://rinexus.com/" target="_blank">RINexus</a> for bringing Jason Fried, founder of 37Signals to Providence last night. Jason spoke on many aspects of his success and what got him there, and answered a lot of questions, even mine!</p>
<p>What really impressed me about Jason&#8217;s story was that he became a success doing things the way I&#8217;ve always thought they should be done. And more to the point, exactly the opposite of the way traditional management tells you it should and must be done. Some examples from his talk.</p>
<ol>
<li>Don&#8217;t get venture money. Bootstrap your idea in your spare time keeping your day job. You don&#8217;t want anyone telling you what to do who doesn&#8217;t share your passion for what you&#8217;re doing.</li>
<li>Don&#8217;t have a board of directors. What do they know about what you&#8217;re trying to do?</li>
<li>Don&#8217;t write specs, write code. You can&#8217;t tell whether something is good or bad from a spec, only from working code. Do it quick. If it&#8217;s no good, throw it away and move on. People in organizations are dreadfully afraid of making a mistake. Don&#8217;t worry about it, just do it.</li>
<li>Don&#8217;t keep an enhancement or bug list. Trust your gut to do what&#8217;s most important. When you keep hearing the same thing from people you know and trust, go ahead and do something about it.</li>
<li>Try to do everything in two week increments. That is, don&#8217;t let people get bored doing the project. They do their best work when they&#8217;re excited about the outcome.</li>
<li>Don&#8217;t plan too much. My question to Jason was about whether or not his small 12 person operation would scale up. He said, &#8220;I don&#8217;t know and I don&#8217;t care. We&#8217;ll worry about that when the time comes.&#8221;</li>
<li>Don&#8217;t hire any marketing people. Your customers are your best marketing dept.</li>
<li>Trust your employees. 37 signals gives each of their employees an unlimited charge card, to spend on whatever they want, however much they want. The company bought one employee flying lessons. Not because it would be a usable skill, but because it would make him a more happy and well-rounded employee. In their experience employees do not abuse the charge privilege, but use it sparingly, knowing that it comes of the bottom line.</li>
<li>Don&#8217;t spend money on an office. Keep employees in their own homes. That&#8217;s where they&#8217;re most productive. In an office it&#8217;s too easy to be interrupted and too easy to call a meeting. Meetings are productivity killers.</li>
<li>Charge money for your product from Day One. This is a complement to the Don&#8217;t take money from VCs rule. Nothing succeeds like revenue. If you have something worth paying for, people will pay for it. If it can&#8217;t sustain itself, find something else to do.</li>
</ol>
<p>I&#8217;m sure there were more, but those are the ones that stuck with me. As a survivor of 35+ years in the software development business, I can personally attest to the practicality of these guidelines. I have seen the opposite fail miserably for my whole career, but every once in a while, I managed to become part of something that didn&#8217;t obey the rules, and those were the memorable successes.</p>
<p>Don&#8217;t let the management, marketing and financial suits tell you any different. Do what you know is right. If it doesn&#8217;t work, learn from the experience and don&#8217;t make the same mistake again. But please, don&#8217;t think you can ever get it right without trial and error. It&#8217;s so obvious it&#8217;s painful, but there are still legions of project and product and people managers who wouldn&#8217;t have jobs if not for torturing you with requirements statements, schedules and bug reports.</p>
<p>And one thing that he swears will never be added to BaseCamp, their project management tool: Gantt Charts. Hurray!!</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/10/16/thoughts-on-jason-frieds-talk-last-night/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Distributed Microblogging UI ideas for DevHouseBoston</title>
		<link>http://joecascio.net/joecblog/2008/06/27/distributed-microblogging-ui-ideas-for-devhouseboston/</link>
		<comments>http://joecascio.net/joecblog/2008/06/27/distributed-microblogging-ui-ideas-for-devhouseboston/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 15:49:27 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[devhouseboston]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[distributed microblogging]]></category>
		<category><![CDATA[distributed microblogging devhouseboston]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://peeps.3greeneggs.com/joecblog/?p=21</guid>
		<description><![CDATA[This Sunday, June 29, 2008, I will be attending DevHouseBoston. I&#8217;ve proposed a project called Distributed Microblogging. My primary goal for the day is to get a UI defined. If we can prototype something, so much the better, but I think the discussions going on in the online community really need to have some attention [...]]]></description>
			<content:encoded><![CDATA[<p>This Sunday, June 29, 2008, I will be attending DevHouseBoston. I&#8217;ve proposed a project called Distributed Microblogging. My primary goal for the day is to get a UI defined. If we can prototype something, so much the better, but I think the discussions going on in the online community really need to have some attention given to exactly what microblogging is, as opposed to how to do it. Many &#8220;how&#8221; proposals miss important requirements or add what I consider unnecessary ones.</p>
<p>So I&#8217;ve been putting together the following list of what I consider to be important features that a good microblogging function should have. In most cases, I&#8217;ve approached it from how it should appear to the user. If you are coming to DevHouseBoston on Sunday, you might want to read this list over and come prepared to argue the merits of different points, add your own, or if you&#8217;re a UI designer, contribute to a discussion of how to design a UI that incorporates these features.</p>
<p>Remember that one of the benefits of an open system is that there can be many different UIs to choose from!</p>
<p>So, following, is the list in a very raw and unpolished form.</p>
<p><strong>Note: DMB means Distributed Microblogging.</strong></p>
<h3>Feature list for dmb UI</h3>
<p>Omnipresent replies, direct messages tabs or buttons.<br />
Tags on other microblogs, on posts, on other tags?</p>
<p>Direct support for conversations, replies, etc.<br />
Main page. Like twitter. Update input box at top, but maybe with separate scrolling list of stream.<br />
Multiple streams showing, replies, all, selected person&#8217;s archive, including user&#8217;s archive.<br />
&#8220;Hide&#8221; check boxes for each user. Clicking it removes their updates from stream list, and places their name in the a &#8220;hidden&#8221; list for easy reinstatement.</p>
<p>Also would be able to show/hide certain groups.</p>
<p>Conversation support. Each tweet would have a &#8220;reply&#8221; button. Clicking it would add the @user_name to the beginning of the update, and also make a database entry linking the update to one or more previous updates. The @&#8217;d user names would be like the &#8220;to&#8221; list on an email. Each update could have multiple other updates it was in-reply-to. This is a many-to-many relationship. An update can be in response to multiple other updates, and clearly an update can have many responses to it.</p>
<p>Updates have GUIDs. Required by IMPP.</p>
<p>Tabs for different subsets of users = from Mike Gaines. &#8220;tag-tab&#8221; <img src='http://joecascio.net/joecblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Separate input area for different tag-tabs.</p>
<p>Topics for User experience<br />
Conversations. What can you do? How are they shown?<br />
Multiple addressees (like email?)<br />
Latest on top or on the bottom? User pref?<br />
Classes of messages<br />
Direct<br />
Narrowcast (to a group tag?)<br />
Broadcast (or is this simply to all tags?)<br />
Temporary silencing (show/hide checkbox) So I can turn off someone who is usually ok, but is just ranting or something.</p>
<p>Ad-hoc grouping. Drag users into a tab where you see only their tweets.<br />
Public ad-hoc groups. All your followers can see tweets. You just filter locally.<br />
Private ad-hoc groups. Just the people in the group see the tweets.</p>
<p>General question.. will adding private groups destroy some of the vibrancy and serendipity of Twitter?</p>
<p>How to present tagging in the UI so it&#8217;s intuitive with what it does for the user, as opposed to a geeky abstract function?</p>
<p>What can be tagged, and hence grouped? Users, convos, even other tags? Locations? languages? specific tweets having to do with a certain subject? others?</p>
<p>Universally unique tags vs. private tags. UUtags would be very helpful for organizing large tagging efforts. But, how to agree on a tag for say, &#8220;SocialMediaBreakfast8&#8243;?</p>
<p>theRQ  would be great to be able to send/post an out &#8220;out of stream&#8221; message to someone that they get upon login- wouldn&#8217;t age off. (subject to spam abuse?)</p>
<p>Search &#8211; Let Google do it? What about private mblogs? Can individual servers be expected to support a general search capability? Thru XMPP? Thru HTTP?</p>
<p>Show me when I have new, unread DMs.</p>
<p>Multiple addressees for DMs. Now it&#8217;s beginning to look like email.</p>
<p>Show me when I have new, unread messages.<br />
Show me when I have new, unread messages from specific people or groups. (on that tag-tab?)</p>
<p>Auto-update (ala chat) vs. manual update.</p>
<p>Rich content. Photos, audio. (How to transmit to mobile devices?)</p>
<p>How to add these features without sacrificing the simplicity?</p>
<p>A few lines when you request to follow, so you can explain why. Either that or a listing of common friends on different sites.</p>
<p>What about the Twitter community? Can it be made part of DMB? Can we build an interface to Twitter? Will Twitter participate in DMB?</p>
<p>What about other communities that start up? Twitter has very amorphous sub-communities.</p>
<h3>Implementation questions:</h3>
<p>Use XMPP archiving or external? (some xmpp archiving options not applicable, like off the record, although they might be of interest)</p>
<p>How to do multiple servers?</p>
<p>How to map mb posts onto &#8220;collections&#8221; in xmpp archiving. Another reason to use external archving?</p>
<p>If we did external archiving it would relieve the burden of archiving on servers that could be used. Although they&#8217;re more likely to support archiving than pubsub.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/06/27/distributed-microblogging-ui-ideas-for-devhouseboston/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distributed Twitter &#8211; the hard bits</title>
		<link>http://joecascio.net/joecblog/2008/05/06/distributed-twitter-the-hard-bits/</link>
		<comments>http://joecascio.net/joecblog/2008/05/06/distributed-twitter-the-hard-bits/#comments</comments>
		<pubDate>Tue, 06 May 2008 18:32:23 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[distributed, microblogging, twitter]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://peeps.3greeneggs.com/joecblog/?p=11</guid>
		<description><![CDATA[If you don&#8217;t read all of this admittedly long post, please do skip to the end and check out the BarCampBoston info. I&#8217;ll be holding a session there on the topic of Distributed Microblogging. Ok, so let&#8217;s talk about the hard bits of doing Distributed Microblogging. It&#8217;s easy to envision a multitude of servers exchanging [...]]]></description>
			<content:encoded><![CDATA[<p><strong>If you don&#8217;t read all of this admittedly long post, </strong>please do skip to the end and check out the <a title="BarCampBoston home page" href="http://www.barcampboston.org/" target="_blank">BarCampBoston </a>info. I&#8217;ll be holding a session there on the topic of Distributed Microblogging.</p>
<p>Ok, so let&#8217;s talk about the hard bits of doing Distributed Microblogging. It&#8217;s easy to envision a multitude of servers exchanging microblog posts, and a UI that simply arranges the posts in chronological order. By the way, chronological order is easy to do if all the servers are synched with a time standard like <a title="National Institute of Standards and Technology" href="http://tf.nist.gov/timefreq/service/its.htm" target="_blank">nist.gov, </a>and most are. But the hard bit is making it work in a way that performs well and scales to large populations of both microblog posters and readers. I&#8217;ve been thinking of some different alternatives for this, which I&#8217;ll lay out here. As always, your thoughts are welcome.</p>
<h3>Performance</h3>
<p>So, what do I mean by &#8220;performs well&#8221;? Well, microblog (ie, Twitter) updates happen much more frequently than what we&#8217;d consider traditional blog posts, but not quite as fast as instant messenger or chat updates. And microblogs don&#8217;t have the notion of presence attached to them. You don&#8217;t worry about whether a Twitter poster is &#8220;on line&#8221; at any particular time, although you may deduce that from the rapidity of their responses to you.</p>
<p>To put a number on it, I&#8217;d say that a microblog post notification should be transmitted in less than a minute, ideally in a few seconds, although a delay of up to 5 minutes is not that objectionable. I frequently will ignore my Twitter feed for many minutes, sometimes hours. I have no expectation that I will see someone&#8217;s posts immediately (i.e., less than a second) nor do I care to. Microblogging is a river of updates. You don&#8217;t expect to see every single one.</p>
<h3>Size</h3>
<p>Now let&#8217;s talk numbers of followers and following. A typical Twitter user has 100 or fewer people that they follow, and a similar number that are following them. But the edge cases are far bigger. Someone like Robert Scoble (@scobleizer) or Chris Brogan (@ChrisBrogan) follow literally thousands of other users, and have even more following them.</p>
<p>Ok, so we need to be able to update thousands of users in nominally less than a minute, but at the exreme less than five minutes. If you don&#8217;t buy that, please leave a comment explaining why these limits are not realistic.</p>
<h3>Alternatives</h3>
<p><strong>RSS feed polling</strong></p>
<p>The simplest solution would be polling, which is reader initiated. Followers would poll the feeds of the microblogs they were interested in. It seems to me that polling has to be discarded as a solution except for occasional or retrospective uses. I think a solution should include RSS feeds but it seems obvious to me that for someone with 100 friends to poll those RSS feeds every minute, or ideally faster because they <strong>might</strong> post something is a stupendous waste of bandwidth.</p>
<p>On the sending side, if that same person had 100 followers, each of those followers would be polling the person&#8217;s RSS feed every few seconds causing a very high server load. Now multiply that by however many people&#8217;s accounts are hosted on that server and the problem quickly blows up.</p>
<p><strong>Notification</strong></p>
<p>A much more efficient solution would be for senders (microblog posters) to notify followers when a new post has been made, and perhaps to proactively send the new content in the notification message. Then, resources are used only when there is actual traffic to send. Both senders and receivers are quiescent when no one is posting. So what are the possibilities for implementing notification? I see the following.</p>
<ol>
<li>RSS cloud API &#8211; a little-known part of the RSS specification, the cloud element allows a feed to publish a web-service address that readers of the feed can register with to be notified of changes using a SOAP or xml-rpc call.</li>
<li>Jabber (XMPP) channels between DMB servers to carry notifications and content.</li>
<li>UDP notification with http callback. UDP is lightweight for both senders and receivers.  No open connections are required between senders and receivers. It&#8217;s sort of like RSS cloud, but narrowly and specifically designed for DMB, as opposed to generalized RSS.</li>
</ol>
<p><a title="RSS cloud spec" href="http://cyber.law.harvard.edu/rss/soapMeetsRss.html" target="_blank"><strong>RSS cloud API</strong></a></p>
<p>The cloud API was specifically designed with this purpose of notifying readers of content updates. Its original intent, judging from the RSS 2.0 spec was to allow actual client feed readers to register with the cloud. In the case of DMB, it would be cooperating servers that would register for notification with each other.</p>
<p>The problem with RSS cloud is overhead. Microblog entries are tiny and frequent compared with blog entries or traditional site updates. To require a follower server to read an entire RSS document to get 140 characters of content, and have this happen every few minutes when the poster updates would be inefficient to say the least. In addition, there is <a title="Forum article on the RSS cloud API" href="http://lists.apple.com/archives/syndication-dev/2006/Jan/msg00032.html" target="_blank">experience with the cloud api</a> that indicates just the HTTP session overhead for notifying many users becomes intolerable, although this was from the perspective of actual clients being notified as opposed to clients&#8217; servers being notified.</p>
<p><strong>Jabber (XMPP)</strong></p>
<p>Jabber is a very tempting candidate for this application, and has been getting quite a bit of discussion in the development community of late. Here&#8217;s <a title="Twitter application of Jabber pubsub" href="http://www.process-one.net/en/blogs/article/introducing_the_xmpp_application_server/" target="_blank">an example</a>. The advantage to Jabber is that it maintains open sessions between servers, which eliminates the session setup/teardown overhead, and allows for almost instantaneous notification of all &#8220;following&#8221; parties.</p>
<p>But this may also be a disadvantage in situations where there are hundreds or thousands of &#8220;followers&#8221; for a single sender. IM or chat is typically one-to-one, or one to a few, but microblogging is frequently one to hundreds or one to thousands. I am not familiar enough with Jabber servers in actual practice to know what their performance or connection limitations are. <strong>Anyone with Jabber implementation or operational experience is strongly encouraged to comment.</strong></p>
<p>Jabber&#8217;s concept of presence could be used to keep the number of messages by only requesting messages updates when a user is actually logged into his/her microblog system. What&#8217;s interesting about this notion is what &#8220;logged in&#8221; means. Microblogging, at least the way Twitter works, does not really require the concept of presence. For instance, you can be &#8220;logged in&#8221; to Twitter, but dormant for hours not getting any updates until you request a page refresh.</p>
<p>In fact, one key aspect of microblogs that differentiates them from IM or chat is that they don&#8217;t typically &#8220;auto-update&#8221;. And rather than this being a disadvantage, I-and I think many others-find this on-demand update to be much more useful than a streaming IM or chat window. It&#8217;s really more like reading small blog posts. I read when <strong>I </strong>want to, not when someone else decides to say something. So, using the presence capability without auto-updating will require a little clever UI design to, in a sense, auto-logoff the user when their web page hasn&#8217;t been refreshed in a certain period of time. This then, will also require the ability of followers to query the senders they follow for &#8220;back posts&#8221;, so they can see what happened in the past without keeping a client logged in all the time to save all the posts.</p>
<p><strong>UDP for notification</strong></p>
<p>In the past year, I did some work on a revamped email protocol I called IMTP that uses small UDP messages to notify receiving servers that the sender has some traffic for them. The receiver then calls back to the sender using TCP to get the message body. This was based on Prof. Daniel Bernstein&#8217;s <a title="Internet Mail 2000 page" href="http://cr.yp.to/im2000.html" target="_blank">Internet Mail 2000 </a>proposal several years ago. He proposed, quite rightly in my opinion, that mail senders should bear the burden of storing the message contents, not the receivers, and that mail content should only be sent when a receiver actually wants to read it.</p>
<p>The advantage to UDP is that it is very light weight for both the sender and the receiver, not requiring any session overhead or setup/teardown. If used for microblogging, UDP notification messages could take the place of the continuously open TCP sessions that Jabber employs, thus reducing the session resource allocation load on both ends.</p>
<p>Now, of course, the issue with UDP is that it is not guaranteed to be delivered. The IMTP service we built would retry the UDP message at some frequency until the receiver called back to either fetch or reject the message.</p>
<p>Conceptually, using UDP messages with a 140 character payload and a message number would fit a microblogging application very well.  Because microblogging has no expectation or requirement of presence or real-time delivery like chat and IM do, a dropped UDP message is not a tragedy. If the sender retried even once or twice per minute, that would be plenty of timeliness for microblogging. Plus, if the UDP messages carry a monotonically increasing message number, the receiver can know if they&#8217;re missed a message and simply call back to the sender to get it. The microblogging UI can reconstruct the sequence easily when the missing pieces, if any, finally come through.</p>
<p>A notification system using UDP would seem to minimize the resource requirements on both senders and receivers, and can perform the same kind of message fan-in/fan-out optimization that Jabber could. In other words, a given microblog update body needs to be sent only once to any server, regardless of how many followers there may be on that destination server.</p>
<p><strong>Comments, please!</strong></p>
<p>I am very interested in what others think and have to say about these issues. This problem of efficient and <em>timely-enough</em> notification, it seems to me, is the tough nut to crack for a good solution to microblogging.</p>
<p>By the way, I am going to do a session on Distributed Twitter (or Microblogging) at <a title="BarCampBoston home page" href="http://www.barcampboston.org/" target="_blank">BarCampBoston3 on May 17, 18. </a>We are going to try to bring in some mobile technology folks to discuss the other really interesting issue with Distributed Twitter, the SMS connection.</p>
<p>Also, at BarCampBoston, I am going to try to organize some kind of group to try implementing a Distributed Microblogging application going forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/05/06/distributed-twitter-the-hard-bits/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Distributed Twitter &#8211; Overview</title>
		<link>http://joecascio.net/joecblog/2008/05/03/distributed-twitter-overview/</link>
		<comments>http://joecascio.net/joecblog/2008/05/03/distributed-twitter-overview/#comments</comments>
		<pubDate>Sun, 04 May 2008 01:49:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[distributed, microblogging, twitter]]></category>

		<guid isPermaLink="false">http://peeps.3greeneggs.com/joecblog/?p=10</guid>
		<description><![CDATA[I want to quickly set down a high-altitude view of how I see a Distributed Twitter working. This should give you the basic concept, which I&#8217;ll then elaborate in more detail in subsequent posts. First of all, let&#8217;s call it something more generic. I like Distributed MicroBlogging or DMB. The &#8220;Distributed&#8221; part is really the [...]]]></description>
			<content:encoded><![CDATA[<p>I want to quickly set down a high-altitude view of how I see a Distributed Twitter working. This should give you the basic concept, which I&#8217;ll then elaborate in more detail in subsequent posts.</p>
<p>First of all, let&#8217;s call it something more generic. I like Distributed MicroBlogging or DMB. The &#8220;Distributed&#8221; part is really the key. Unlike a centralized, proprietary walled garden system, DMB would be spread out over hundreds or thousands of different servers over the internet.</p>
<p>Just like email or Jabber, anyone could run a DMB server. People would register on a particular server with their <a title="OpenID Foundation" href="http://openid.net" target="_blank">OpenID </a>and create or contribute to <strong>microblogs </strong>that other people could follow, ala Twitter. Note that <strong>people</strong> are different than <strong>microblogs</strong> as entities in the architecture. This is somewhat different than Twitter, in which there are only user accounts. This allows a form of the long-sought groups feature, implemented as microblogs that many people can contribute to.</p>
<p>So, <strong>people </strong>contribute to <strong>microblogs </strong>that are <strong>followed</strong> by other people. When someone updates a microblog, anyone on any server that is following (ie subscribing to) that microblog will get the update in whatever client they have running <em>when the client fetches it</em>. A Twitter-like client will display the posts from many different users interleaved in chronological order. Some clients could maintain a &#8220;live&#8221; real-time update, where other clients could display only on demand from the user, like the Twitter.com home page.</p>
<p>That&#8217;s another important point. The DMB architecture, like Jabber and SMTP, does not specify any particular user interface. How the microblogs are presented is up to a UI designer. The architecture only specifies what data are interchanged, not how it is presented.</p>
<p>So, that&#8217;s a very simple explanation of how I see a Distributed MicroBlogging working. There could be large public servers like Google or small private servers for individual companies or groups of people. A server could host hundreds or thousands of microblogs and users, or just one microblog with a single user.<br />
I can envision a given individual&#8217;s domain delegating its microblogging functions to a larger server, much as an individual&#8217;s home site can delegate its OpenID functions to a large identity service company.</p>
<p>Next, I&#8217;ll talk about the single most challenging implementation problem for DMB &#8211; notification. How does a DMB server notify other following servers that a change has taken place on one of its microblogs?</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/05/03/distributed-twitter-overview/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Distributed Twitter</title>
		<link>http://joecascio.net/joecblog/2008/04/20/distributed-twitter/</link>
		<comments>http://joecascio.net/joecblog/2008/04/20/distributed-twitter/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 21:15:09 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[distributed, microblogging, twitter]]></category>

		<guid isPermaLink="false">http://peeps.3greeneggs.com/joecblog/?p=6</guid>
		<description><![CDATA[One of the things that drives everyone nuts about Twitter is its unreliability. In fact, it&#8217;s having a little case of the no-updates this morning (2008.04.20). This is a less frequently discussed but ultimately, I think, more important disadvantage to walled gardens. If you rely on a service and it goes down for maintenance or [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that drives everyone nuts about <a href="http://twitter.com">Twitter </a>is its unreliability. In fact, it&#8217;s having a little case of the no-updates this morning (2008.04.20). This is a less frequently discussed but ultimately, I think, more important disadvantage to walled gardens. If you rely on a service and it goes down for maintenance or failure, or it is subjected to any one of several denial-of-service attacks by hackers, you&#8217;re out of luck. You&#8217;re subject to how much, or more properly, how little time and money the service&#8217;s administrators or financial backers have put into site dependability.</p>
<p>So, what could be done about this problem? The answer would be to design a service that is <strong>distributed</strong> instead of centralized. A distributed Twitter service would operate like email. There&#8217;s no single point of failure for  email because there&#8217;s no single super email server or service through which everything flows. Email is based on a protocol, not a single service, or even group of services. Anyone can run an email server and exchange mail with anyone else running a server. I think sometimes people would <em>like</em> email to go down for a few days because they feel overwhelmed by it, but that&#8217;s a different blog post entirely. <img src='http://joecascio.net/joecblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Of course, you might say it all flows through the Internet, but the net itself is distributed. Yes, there are backbone subnets that carry huge amounts of traffic and would degrade your service if they went down (and they sometimes do), but there are well-known ways to re-route traffic around failed links.</p>
<p>Twitter could most definitely be distributed. Over the past few months there have been some real developments toward this end, and conversation in the development community about ways to do it. The single most complete development done so far is <a title="Prologue project page" href="http://prologuetheme.org/" target="_blank">Prologue, </a>a WordPress theme that allows several people to &#8220;co-author&#8221; blog posts and share their &#8220;update stream&#8221; via RSS. It&#8217;s been most talked about as a Twitter for corporate co-workers that in a certain sense gives the long-desired groups capability to Twitter.</p>
<p>Prologue is a step in the right direction and hints at what is possible, but is not a general solution that would scale to accommodate thousands of users. The guys at WordPress that developed Prologue have said they&#8217;re not particularly interested in developing a fully distributed Twitter-clone, but in the hopes that someone else might pick up the ball and advance it, they&#8217;ve made the code open and available under an open-source license.</p>
<p>I&#8217;ve been thinking a lot about this problem myself and in this introductory post I&#8217;d like to outline what I think are the major requirements and architectural issues to be solved in creating a fully distributed microblogging platform. Do you have any thoughts to offer on this? Please comment!</p>
<ol>
<li><strong>Open<br />
</strong>Although it&#8217;s certainly possible to design a closed microblogging architecture (ie, distributed but a proprietary implementation), it&#8217;s certainly in the general user&#8217;s interest to make it open, which would allow for competing implementations. Why break down a walled garden only to create another one?</li>
<li><strong>Protocol -defined<br />
</strong>In order to be open and distributed, the architecture must defined by a protocol, not by a server program or database schema, or other implementation artifact.</li>
<li><strong>Minimal</strong><br />
Occam&#8217;s Razor should be the guideline. A new microblogging architecture should specify as little as possible in terms of UI, security techniques, etc. OpenID is an excellent example of a standard that leaves many important features (such as authentication technique) to the various implementations.</li>
<li><strong>Privacy-capable<br />
</strong>I think there is a rising concern and general wariness of the completely open and public nature of many social media and social networking applications. Users want to be sure they know who sees their posts and control who can see what &#8220;friends&#8221; they have. So, there should be a general capability to control access to your microblog and its meta-data.</li>
<li><strong>Extensible, Forward-Compatible</strong><br />
It should be possible for an implementation to add new capabilities without rendering previous versions inoperative or non-interoperable.</li>
<li><strong>Scalable</strong><br />
The architecture should be scalable to the entire internet. A given user should be able to subscribe to or service subscriptions from tens of thousands of other users.</li>
<li><strong>Efficient</strong><br />
In order to fulfill #6, the architecture must be efficient of network and computing resources. In particular, this would argue against polling RSS feeds as a way to collect input. Polling a blog once a day works, but a microblog stream like Twitter needs to react almost immediately.</li>
<li><strong>Standards-based</strong><br />
Whenever possible, new open architectures should utilize existing standardized protocols and data formats whenever possible. This does not mean that a new protocol or format is out of the question, but there had better be a very good reason why an existing standard cannot be used.</li>
<li><strong>Open-source</strong><br />
While proprietary implementations of a standard cannot be prevented, open source implementations should be favored, especially with respect to security issues. Only by inspecting the source can one be assured there are no easter-egg back doors or other weaknesses.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/04/20/distributed-twitter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  joecascio.net/joecblog/category/development/feed/ ) in 0.69204 seconds, on Feb 5th, 2012 at 11:36 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 5th, 2012 at 12:36 pm UTC -->
