<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us">
  <title>Dare Obasanjo aka Carnage4Life</title>
  <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/" />
  
  <icon>favicon.ico</icon>
  <updated>2008-07-17T06:10:14.515625-07:00</updated>
  <author>
    <name>Dare Obasanjo</name>
  </author>
  <subtitle>Smoke like a hippie, drink like a pirate and code like a hacker</subtitle>
  <id>http://www.25hoursaday.com/weblog/</id>
  <generator uri="http://dasblog.info/" version="2.1.8102.813">DasBlog</generator>
  <logo>http://members.microsoft.com/careers/epdb/image/i_mop_ProfID58_l.jpg</logo><link rel="self" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetRss" type="application/atom+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">323344</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="1" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=aeaeccbe-8df2-4072-9134-637d087abb86" />
    <title>The Problem with Trying to "Spread Virally"</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/17/TheProblemWithTryingToSpreadVirally.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=aeaeccbe-8df2-4072-9134-637d087abb86</id>
    <published>2008-07-17T06:10:14.515625-07:00</published>
    <updated>2008-07-17T06:10:14.515625-07:00</updated>
    <category term="Social Software" label="Social Software" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Social+Software" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
One of the problems you have to overcome when building a social software application&#xD;
is that such applications often depend on network effects to provide value to users.&#xD;
An instant messaging application isn't terribly useful unless your friends use the&#xD;
same application and using &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; feels kind&#xD;
of empty if you don't follow anyone. On the flip side, once an application crosses&#xD;
a particular tipping point then network effects often push it to near monopoly status&#xD;
in certain social or regional networks. This has happened with eBay, Craigslist, MySpace,&#xD;
Facebook and a ton of other online services depend on network effects. Thus there&#xD;
is a lot of incentive for developers of social software applications to do their best&#xD;
to encourage and harness network effects in their user scenarios. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
These observations have led to the notion of &lt;a href="http://www.digitalpodcast.com/podcastnews/2008/03/04/designing-viral-applications/"&gt;Viral&#xD;
Applications&lt;/a&gt;, applications which spread like viruses. The problem with a lot of&#xD;
the thinking behind "viral applications" and applications that borrow &lt;a title="The Top 5 Viral Facebook Techniques" href="http://www.allfacebook.com/2007/07/the-top-5-viral-facebook-techniques/"&gt;their&#xD;
techniques&lt;/a&gt; is that attempting to spread by any means necessary can be very harmful&#xD;
to the user experience. Here are two examples taken from this week's headlines &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
From Justine Ezaric, a post entitled &lt;a href="http://tastyblogsnack.com/2008/07/14/the-loopt-debacle/"&gt;The&#xD;
Loopt Debacle&lt;/a&gt; where she writes &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;&#xD;
              &lt;strong&gt;&#xD;
                &lt;a href="http://www.loopt.com"&gt;Loopt&lt;/a&gt;&#xD;
              &lt;/strong&gt; is a location based&#xD;
social networking site that uses GPS to determine your exact location and share it&#xD;
with your friends.. and then spam your entire contact list via an SMS invite.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;There’s a good chance that if you installed this application you’ve made the same&#xD;
mistake that most people made. While searching for friends who were on the service,&#xD;
apparently a text message was sent out to a large portion of my contact list, along&#xD;
with my phone number and my exact location (you know, since that’s the point of the&#xD;
application). Granted, you would think that if you have someone’s phone number, they’d&#xD;
have yours as well…&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Hi, hey.. Over here!! People change their phone number for a reason!! With the&#xD;
ease of syncing contacts on the iPhone, it’s not always guaranteed that everyone in&#xD;
your contact list is a BFF (read: best friend forever). Also, there’s always people&#xD;
you just never want to text.. Like Steve Jobs, or an old boss, or maybe even an ex&#xD;
who would rather push you in front of a bus than get a text message from you?&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
From Marshal Kirkpatrick, a post entitled &lt;a title="http://gmailblog.blogspot.com/2008/07/updates-to-gmail-contact-manager.html" href="http://www.readwriteweb.com/archives/gmail_tries_to_be_less_creepy.php"&gt;Gmail&#xD;
Tries To Be Less Creepy, Fails&lt;/a&gt; which states&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;a href="http://gmail.com"&gt;&#xD;
              &lt;em&gt;Gmail&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;, Google's powerful web based email&#xD;
service, &lt;/em&gt;&#xD;
            &lt;a href="http://gmailblog.blogspot.com/2008/07/updates-to-gmail-contact-manager.html"&gt;&#xD;
              &lt;em&gt;announced&#xD;
some changes&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; to its contact management features today. Contact management&#xD;
has for some time been a contentious matter among Google Account holders - the company&#xD;
does strange and mysterious things with your email contacts, including tying them&#xD;
in to some other applications without anyone's permission.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Today's new changes failed to alleviate those concerns, perhaps making the situation&#xD;
even less clear than it was before.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;h4&gt;&#xD;
            &lt;em&gt;There Are Your Contacts and Then There Are Your Contacts&lt;/em&gt;&#xD;
          &lt;/h4&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;The post on the official Gmail blog today announced a new policy. There are now&#xD;
two types of contacts in your Gmail contacts list. There are your explicitly added&#xD;
My Contacts and there are your frequently emailed Suggested Contacts. The distinction&#xD;
between the two is unclear enough that I won't even try to summarize it. Read the&#xD;
following closely.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;blockquote&gt;&#xD;
            &lt;em&gt;&#xD;
              &lt;font color="#ff0000"&gt;My Contacts contains the contacts you explicitly&#xD;
put in your address book (via manual entry, import or sync) as well as any address&#xD;
you've emailed a lot (we're using five or more times as the threshold for now). &lt;/font&gt;&#xD;
            &lt;/em&gt;&#xD;
            &lt;p&gt;&#xD;
              &lt;em&gt;&#xD;
                &lt;font color="#ff0000"&gt;Suggested Contacts is where Gmail puts its auto-created&#xD;
contacts. By default, Suggested Contacts you email frequently are automatically added&#xD;
to My Contacts, but for those of you who prefer tighter control of your address books,&#xD;
you can choose to disable usage-based addition of contacts to My Contacts (see the&#xD;
checkbox in the screenshot above). Once you do this, no matter how many times you&#xD;
email an auto-added email address it won't move to My Contacts.&lt;/font&gt;&#xD;
              &lt;/em&gt;&#xD;
            &lt;/p&gt;&#xD;
          &lt;/blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;…&lt;/em&gt;&#xD;
            &lt;br&gt;&#xD;
            &lt;em&gt;When you open up &lt;/em&gt;&#xD;
            &lt;a href="http://google.com/reader"&gt;&#xD;
              &lt;em&gt;Google Reader&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;,&#xD;
the company's RSS reader, you'll find not just the feeds you've subscribed to but&#xD;
also the feeds of shared items from your "friends." Those friendships were&#xD;
defined somehow by Google, according to who you email in Gmail apparently. They can&#xD;
opt-out of having their shared items publicly visible at all, but short of doing that&#xD;
- you are seeing their shared items and someone, presumably, is seeing your shared&#xD;
items too. No one knows for sure.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
Both Loopt and Gmail + Google Talk + Google Reader are examples of applications choosing&#xD;
approaches that encourage &lt;a href="http://en.wikipedia.org/wiki/Virality"&gt;virality&lt;/a&gt; of&#xD;
the application or features of the application at the risk of putting users in &lt;u&gt;&lt;strong&gt;socially&#xD;
awkward situations&lt;/strong&gt;&lt;/u&gt;. As Justine mentions in the Loopt example, just because&#xD;
a person's phone number is in the contact list on your phone doesn't mean they would&#xD;
like to receive a text message from you at some random time of the day asking them&#xD;
to try out some social networking application. A phone isn't a social networking site.&#xD;
I have my doctor, my boss, his boss, our childcare provider, co-workers whose numbers&#xD;
I have in case of emergency and a bunch of other folks in my phone's contact list.&#xD;
These aren't the people I want to send spammy invites to try out some social networking&#xD;
application which probably doesn't even work on their phone. However I'm sure there&#xD;
has been some positive user growth from their "viral" techniques, but at&#xD;
what cost to their brand? Plaxo is still dealing with damage to their brand from &lt;a href="http://search.live.com/results.aspx?q=plaxo+spam&amp;amp;go=&amp;amp;form=QBLH"&gt;their&#xD;
spammy era&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The Gmail behavior is even worse primarily because Google didn't fix the problem.&#xD;
Especially since people have been &lt;a href="http://googlesystem.blogspot.com/2007/12/who-are-my-gmail-contacts.html"&gt;complaining&#xD;
about it for a while&lt;/a&gt;. No one can blame Google for wanting to jump start network&#xD;
effects for features like Shared Items in Google Reader or products like Google Talk,&#xD;
but it seems pretty ridiculous to decide to automatically add people I email to an&#xD;
IM application so they can see when I'm online and contact me anytime or to the list&#xD;
of people who are notified whenever I share something in Google Reader. It's just&#xD;
email, it does &lt;u&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/u&gt; imply an intimate social relationship.&#xD;
The worst thing about Google's practices is how it backfires, I'm less likely to use&#xD;
that combination of Google products so as not to cause inadvertent information leakage&#xD;
because some "viral algorithm" decided that because I sent a bunch of emails&#xD;
to my child care provider she needs to know whenever I share a link in Google Reader.  &#xD;
&lt;br&gt;&#xD;
  &#xD;
&lt;br&gt;&#xD;
If you decide to spread virally, you should be careful that you don't end up causing&#xD;
people to avoid your product like the diseases you are trying to emulate. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=David Banner&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;David&#xD;
Banner&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=David Banner+Get Like Me (feat. Chris Brown, Yung Joc &amp;amp; Jim Jones)&amp;amp;x=0&amp;amp;y=0"&gt;Get&#xD;
Like Me (feat. Chris Brown, Yung Joc &amp;amp; Jim Jones)&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=s45KKj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=s45KKj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=vQKEWj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=vQKEWj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=vDPd5j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=vDPd5j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=iliaHJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=iliaHJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/338041653" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="5" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c573171e-8e62-45b4-b85c-7b411b528e51" />
    <title>Project Cassandra: Facebook's Open Source Alternative to Google BigTable</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/14/ProjectCassandraFacebooksOpenSourceAlternativeToGoogleBigTable.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=c573171e-8e62-45b4-b85c-7b411b528e51</id>
    <published>2008-07-14T04:41:09.15625-07:00</published>
    <updated>2008-07-14T04:41:09.15625-07:00</updated>
    <category term="Competitors/Web Companies" label="Competitors/Web Companies" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Competitors%2fWeb+Companies" />
    <category term="Platforms" label="Platforms" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Platforms" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
About a week ago, the Facebook Data team quietly released &lt;a href="http://code.google.com/p/the-cassandra-project/"&gt;the&#xD;
Cassandra Project on Google Code&lt;/a&gt;. The Cassandra project has been described as&#xD;
a cross between Google's BigTable and Amazon's Dynamo storage systems. An overview&#xD;
of the project is available in &lt;a href="http://www.slideshare.net/jhammerb/data-presentations-cassandra-sigmod/"&gt;the&#xD;
SIGMOD presentation on Cassandra&lt;/a&gt; available at SlideShare. A summary of the salient&#xD;
aspects of the project follows. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The problem Cassandra is aimed at solving is one that plagues social networking sites&#xD;
or any other service that has lots of relationships between users and their data.&#xD;
In such services, data often needs to be denormalized to prevent having to do lots&#xD;
of joins when performing queries. However this means the system needs to deal with&#xD;
the increased write traffic due to denormalization. At this point if you're using&#xD;
a relational database, you realize you're pretty much breaking every major rule of&#xD;
relational database design. Google tackled this problem by coming up with &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;BigTable&lt;/a&gt;.&#xD;
Facebook has followed their lead by developing Cassandra which they admit is inspired&#xD;
by BigTable.  &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The Cassandra data model is fairly straightforward. The entire system is a giant table&#xD;
with lots of rows. Each row is identified by a unique key. Each row has a column family,&#xD;
which can be thought of as the schema for the row. A column family can contain thousands&#xD;
of columns which are a tuple of {name, value, timestamp} and/or super columns which&#xD;
are a tuple of {name, column+} where column+ means one or more columns. This is very&#xD;
similar to the data model behind Google's BigTable. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
As I mentioned earlier, denormalized data means you have to be able to handle a lot&#xD;
more writes than you would if storing data in a normalized relational database. Cassandra&#xD;
has several optimizations to make writes cheaper. When a write operation occurs, it&#xD;
doesn't immediately cause a write to the disk. Instead the record is updated in memory&#xD;
and the write operation is added to the commit log. Periodically the list of pending&#xD;
writes is processed and write operations are flushed to disk. As part of the flushing&#xD;
process the set of pending writes is analyzed and redundant writes eliminated. Additionally,&#xD;
the writes are sorted so that the disk is written to sequentially thus significantly&#xD;
improving seek time on the hard drive and reducing the impact of random writes to&#xD;
the system. How important is improving seek time when accessing data on a hard drive?&#xD;
It can &lt;a href="http://stuartsierra.com/2008/04/17/disk-is-the-new-tape"&gt;make the&#xD;
difference between taking hours versus days&lt;/a&gt; to flush a hundred gigabytes of writes&#xD;
to a disk. &lt;em&gt;Disk is the new tape. &lt;/em&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Cassandra is described as "always writable" which means that a write operation&#xD;
always returns success even if it fails internally to the system. This is similar&#xD;
to the model exposed by &lt;a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html"&gt;Amazon's&#xD;
Dynamo&lt;/a&gt; which has an &lt;em&gt;eventual consistency&lt;/em&gt; model.  From what I've&#xD;
read, it isn't clear how writes operations that occur during an internal failure are&#xD;
reconciled and exposed to users of the system. I'm sure someone with more knowledge&#xD;
can chime in in the comments. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
At first glance, this is a very nice addition to the world of Open Source software&#xD;
by the Facebook team. Kudos.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Found via &lt;a href="http://perspectives.mvdirona.com/2008/07/12/FacebookReleasesCassandraAsOpenSource.aspx"&gt;James&#xD;
Hamilton&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
PS: Is it me or is this &lt;a href="http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers"&gt;the&#xD;
second significant instance&lt;/a&gt; of Facebook Open Sourcing a key infrastructure component&#xD;
"inspired" by Google internals? &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Ray J&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Ray&#xD;
J&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Ray J+Gifts&amp;amp;x=0&amp;amp;y=0"&gt;Gifts&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=ilHmuj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=ilHmuj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=IGpZSj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=IGpZSj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=Ml8Q1j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=Ml8Q1j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=SypG7J"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=SypG7J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/335040282" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="6" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=30e4b272-3cfe-45ba-90b5-57b001266f34" />
    <title>Scalability: I Don't Think That Word Means What You Think It Does</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/14/ScalabilityIDontThinkThatWordMeansWhatYouThinkItDoes.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=30e4b272-3cfe-45ba-90b5-57b001266f34</id>
    <published>2008-07-14T04:40:12.359375-07:00</published>
    <updated>2008-07-14T04:40:12.359375-07:00</updated>
    <category term="Web Development" label="Web Development" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Web+Development" />
    <category term="XML" label="XML" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=XML" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
Via &lt;a title="Protocol buffers: the early reviews are in" href="http://diveintomark.org/archives/2008/07/12/protobuf"&gt;Mark&#xD;
Pilgrim&lt;/a&gt; I stumbled on an article by Scott Loganbill entitled &lt;a href="http://www.webmonkey.com/blog/Google_s_Open_Source_Protocol_Buffers_Offer_Scalability__Speed"&gt;Google’s&#xD;
Open Source Protocol Buffers Offer Scalability, Speed&lt;/a&gt; which contains the following&#xD;
excerpt &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;The best way to explore Protocol Buffers is to compare it to its alternative.&#xD;
What do Protocol Buffers have that XML doesn’t? As the &lt;/em&gt;&#xD;
            &lt;a href="http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html"&gt;&#xD;
              &lt;em&gt;Google&#xD;
Protocol Buffer blog post mentions&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;, &lt;font color="#ff0000"&gt;XML isn’t scalable&lt;/font&gt;:&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;"As nice as XML is, it isn’t going to be efficient enough for [Google’s]&#xD;
scale. When all of your machines and network links are running at capacity, XML is&#xD;
an extremely expensive proposition. Not to mention, writing code to work with the&#xD;
DOM tree can sometimes become unwieldy."&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;We’ve never had to deal with XML in a scale where programming for it would become&#xD;
unwieldy, but we’ll take Google’s word for it.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Perhaps the biggest value-add of Protocol Buffers to the development community&#xD;
is as &lt;font color="#ff0000"&gt;a method of dealing with scalability before it is necessary&lt;/font&gt;.&#xD;
The biggest developing drain of any start-up is success. How do you prepare for the&#xD;
onslaught of visitors companies such as Google or &lt;/em&gt;&#xD;
            &lt;a href="http://www.webmonkey.com/blog/Twitter_Asks_for_Scalability_Help_From_Community"&gt;&#xD;
              &lt;em&gt;Twitter&#xD;
have experienced&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;? Scaling for numbers takes critical development time,&#xD;
usually at a juncture where you should be introducing much-needed features to stay&#xD;
ahead of competition rather than paralyzing feature development to keep your servers&#xD;
running.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Over time, Google has tackled the problem of communication between platforms with&#xD;
Protocol Buffers and data storage with &lt;/em&gt;&#xD;
            &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;&#xD;
              &lt;em&gt;Big&#xD;
Table&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;. Protocol Buffers is the first open release of the technology making&#xD;
Google tick, although you can utilize Big Table with &lt;/em&gt;&#xD;
            &lt;a href="http://code.google.com/appengine/"&gt;&#xD;
              &lt;em&gt;App&#xD;
Engine&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
It is unfortunate that it is now commonplace for people to throw around terms like&#xD;
"scaling" and "scalability" in technical discussions without actually&#xD;
explaining what they mean. Having a Web application that scales means that your application&#xD;
can handle becoming popular or being more popular than it is today in a &lt;u&gt;&lt;strong&gt;cost&#xD;
effective manner&lt;/strong&gt;&lt;/u&gt;. Depending on your class of Web application, there are&#xD;
different technologies that have been proven to help Web sites handle significantly&#xD;
higher traffic than they normally would. However there is no silver bullet. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The fact that Google uses &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;MapReduce&lt;/a&gt; and &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;BigTable&lt;/a&gt; to&#xD;
solve problems in a particular problem space does not mean those technologies work&#xD;
well in others. MapReduce isn't terribly useful if you are building an instant messaging&#xD;
service. Similarly, if you are building an email service you want an infrastructure&#xD;
based on message queuing not BigTable. A binary wire format like Protocol Buffers&#xD;
is a smart idea if your applications bottleneck is network bandwidth or CPU used when&#xD;
serializing/deserializing XML.  As part of building their search engine Google&#xD;
has to cache a significant chunk of the World Wide Web and then perform data intensive&#xD;
operations on that data. In Google's scenarios, the network bandwidth utilized when&#xD;
transferring the massive amounts of data they process can actually be the bottleneck.&#xD;
Hence inventing a technology like Protocol Buffers became a necessity. However, that&#xD;
isn't Twitter's problem so a technology like Protocol Buffers isn't going to "help&#xD;
them scale". Twitter's problems have been &lt;a title="It's Not Rocket Science, But It's Our Work" href="http://blog.twitter.com/2008/05/its-not-rocket-science-but-its-our-work.html"&gt;clearly&#xD;
spelled out by the development team&lt;/a&gt; and nowhere is network bandwidth called out&#xD;
as a culprit.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Almost every technology that has been loudly proclaimed as unscalable by some pundit&#xD;
on the Web is being used by a massively popular service in some context. Relational&#xD;
databases don't scale? Well, &lt;a title="Inside eBay's Massive Oracle Database" href="http://www.dba-oracle.com/oracle_news/news_ebay_massive_oracle.htm"&gt;eBay&#xD;
seems to be doing OK&lt;/a&gt;. PHP doesn't scale? I believe it &lt;a title="PHP and Facebook" href="http://blog.facebook.com/blog.php?post=2356432130"&gt;scales&#xD;
well enough for Facebook&lt;/a&gt;. Microsoft technologies aren't scalable? &lt;a title="MySpace Architecture" href="http://highscalability.com/myspace-architecture"&gt;MySpace&#xD;
begs to differ&lt;/a&gt;. And so on…&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If someone tells you "technology X doesn't scale" without qualifying that&#xD;
statement, it often means the person either doesn't know what he is talking about&#xD;
or is trying to sell you something. Technologies don't scale, services do. Thinking&#xD;
you can just sprinkle a technology on your service and make it scale is the kind of&#xD;
thinking that led Blaine Cook (former architect at Twitter) to publish &lt;a href="http://www.slideshare.net/Blaine/scaling-twitter/"&gt;a&#xD;
presentation on Scaling Twitter&lt;/a&gt; which claimed their scaling problems where solved&#xD;
with their adoption of memcached. That was in 2007. In 2008, let's just say the &lt;a href="http://www.flickr.com/photos/scriptingnews/2537265280/"&gt;Fail&#xD;
Whale&lt;/a&gt; begs to differ.  &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If a service doesn't scale it is more likely due to bad design than to technology&#xD;
choice. Remember that.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Zapp and Roger&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Zapp&#xD;
&amp;amp; Roger&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Zapp and Roger+Computer Love&amp;amp;x=0&amp;amp;y=0"&gt;Computer&#xD;
Love&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=MYuvgj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=MYuvgj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=ycVRCj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=ycVRCj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=kdwxPj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=kdwxPj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=9qm2AJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=9qm2AJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/335040283" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="11" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=1585211c-cce8-4961-892d-feab08c952c4" />
    <title>Giving Sh*t Away is not a Business Strategy</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/12/GivingShtAwayIsNotABusinessStrategy.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=1585211c-cce8-4961-892d-feab08c952c4</id>
    <published>2008-07-11T23:38:09-07:00</published>
    <updated>2008-07-11T23:38:09-07:00</updated>
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
I read two stories about companies adopting Open Source this week which give some&#xD;
interesting food for thought when juxtaposed. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The first is a blog post on C|Net from Matt Asay titled &lt;a href="http://news.cnet.com/8301-13505_3-9987160-16.html?hhTest=1"&gt;Ballmer:&#xD;
We'll look at open source, but we won't touch&lt;/a&gt; where he writes &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Ballmer lacks the imagination to conceive of a world where Microsoft could open-source&#xD;
code and still make a lot of money (He's apparently not heard of "Google."):&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;blockquote&gt;&#xD;
            &lt;em&gt;No. 1, are our products likely to be open-sourced? No. We do provide&#xD;
our source code in special situations, but open source also implies free, free is&#xD;
inconsistent with paying for lunches at the partner conference. (Applause.) &lt;/em&gt;&#xD;
          &lt;/blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;But at least he's willing to work with those who do grok that the future of software&#xD;
business (meaning: money) is open source:&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
The second is an article on InfoWorld by Paul Krill entitled &lt;a href="http://www.infoworld.com/article/08/07/11/Sun-lays-off-approximately-1000-employees_1.html"&gt;Sun&#xD;
lays off approximately 1,000 employees&lt;/a&gt; which contains the following excerpts &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Following through on a &lt;/em&gt;&#xD;
            &lt;a href="http://www.infoworld.com/article/08/05/02/Sun-blames-revenue-drop-on-weak-US-economy_1.html"&gt;&#xD;
              &lt;em&gt;restructuring&#xD;
plan announced in May&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;, Sun on Thursday laid off approximately 1,000 employees&#xD;
in the United States and Canada. All told, the company plans to reduce its workforce&#xD;
by approximately 1,500 to 2,500 employees worldwide. Additional reductions will occur&#xD;
in other regions including EMEA (Europe, Middle East, Africa), Asia-Pacific, and Latin&#xD;
America. Reducing the number of employees by 2,500 would constitute a loss of about&#xD;
7 percent of the company's employees.&lt;/em&gt;&#xD;
            &lt;br&gt;&#xD;
...&lt;br&gt;&lt;em&gt;He also addressed the question of whether Sun should abandon its new strategy&#xD;
of giving away its software. Sun will not stop giving it away, according to Schwartz,&#xD;
citing a priority in developer adoption.&lt;/em&gt;&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
When it comes to the financial benefits of Open Source, you need to look at two perspectives.&#xD;
The perspective of the software vendor (the producer) and the perspective of the software&#xD;
customer (the consumer). A key benefit of Open Source/Free Software to software&#xD;
consumers is that it tends to drive the price of the software to zero. On the other&#xD;
hand, although software producers like Sun Microsystems spend money to produce&#xD;
the software they cannot directly recoup that investment by charging for the software. Thus&#xD;
if you are a consumer of software, it is clear why Open Source is great for your bottom&#xD;
line. On the flip side, it isn't so clear if your &lt;strong&gt;&lt;u&gt;primary business&lt;/u&gt;&lt;/strong&gt; is&#xD;
producing software. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Matt Asay's usage of Google as an example of a company "making money" from Open Source&#xD;
is a prime example of this schism in perspectives. &lt;em&gt;Google's primary business is&#xD;
selling advertising&lt;/em&gt;. Like every other media business, they gather an audience&#xD;
by using their products as bait and then sell that audience to advertisers. Every&#xD;
piece of software not directly related to the business of selling ads is tangential&#xD;
to Google's business. The only other software that is important to Google's business&#xD;
is the software that gives them a differentiated offering when it comes to gathering&#xD;
that audience. Both classes of software are &lt;strong&gt;&lt;u&gt;proprietary&lt;/u&gt;&lt;/strong&gt; to&#xD;
Google and always will be. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This is why you'll never find a Subversion source repository on &lt;a href="http://code.google.com"&gt;http://code.google.com&lt;/a&gt; with&#xD;
the source code behind Google's AdSense or Adwords products or the current&#xD;
algorithms that power their search engine. Instead you will find Google supporting&#xD;
and releasing lots of Open Source software that is tangential its core business&#xD;
while keeping the software that actually makes them money proprietary. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This means that in truth Google makes money from proprietary software. However&#xD;
since it doesn't distribute its proprietary software to end users, there isn't anyone&#xD;
complaining about this fact. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Unlike Google, Sun Microsystems doesn't really seem to know how they plan to make&#xD;
money. There is a lot of data out there that shows that the Sun Microsystems' model&#xD;
of scaling services is dying. Recently, Kai Fu Lee of Google argued that &lt;a href="http://perspectives.mvdirona.com/2008/06/25/GooglesDrKaiFuLeeOnCloudComputing.aspx"&gt;scaling&#xD;
out on commodity hardware is 33 times more efficient than using expensive hardware&lt;/a&gt;.&#xD;
This jibes with the sentiments of people who work on cloud services at Microsoft&#xD;
and Amazon that I've talked to when comparing the use of lots of "commodity" servers&#xD;
versus more expensive "big iron" server systems. This means Sun's hardware&#xD;
business is being squeezed because it is betting against industry experience. Giving&#xD;
away their software does not fix this problem, it makes it worse by cutting of a revenue&#xD;
stream as their core business is turning into a dinosaur before their eyes. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The bottom line is that giving something away that costs you money to produce only&#xD;
makes sense as part of a strategy that makes you even more money than selling what&#xD;
you gave away (e.g. free T-shirts with corporate logos). Google gets that. It seems&#xD;
Sun Microsystems does not. Neither does Matt Asay. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Now Playing:&lt;/strong&gt;&#xD;
          &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Inner Circle"&gt;Inner&#xD;
Circle&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Sweat (A La La La La Long)&amp;amp;artistTerm=Inner Circle"&gt;Sweat&#xD;
(A La La La La Long)&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=N30HZj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=N30HZj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=ClWzij"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=ClWzij" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=PLXYwj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=PLXYwj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=mBJvcJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=mBJvcJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/333331061" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="1" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=561d1467-05a1-43c1-b1f2-153b56dba371" />
    <title>Network Attached Memory: Terracota as an Alternative to Memcached</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/10/NetworkAttachedMemoryTerracotaAsAnAlternativeToMemcached.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=561d1467-05a1-43c1-b1f2-153b56dba371</id>
    <published>2008-07-10T07:23:56.140625-07:00</published>
    <updated>2008-07-10T07:25:09.296875-07:00</updated>
    <category term="Web Development" label="Web Development" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Web+Development" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
When it comes to scaling Web applications, every experienced Web architect eventually&#xD;
realizes that &lt;strong&gt;&lt;a href="http://stuartsierra.com/2008/04/17/disk-is-the-new-tape"&gt;Disk&#xD;
is the New Tape&lt;/a&gt;&lt;/strong&gt;. Getting data from off of the hard drive disk is slow&#xD;
compared to getting it from memory or from over the network. So an obvious way to&#xD;
improve the performance of your system is to reduce the amount of disk I/O your systems&#xD;
have to do which leads to the adoption of in-memory caching. In addition, there is&#xD;
often more cacheable data on disk than there is space in memory since memory to disk&#xD;
ratios are often worse than 1:100 (Rackspace's &lt;a href="http://www.rackspace.com/solutions/configurations/index.php"&gt;default&#xD;
server config&lt;/a&gt; has 1GB of RAM and 250 GB of hard disk ). Which has led to the growing&#xD;
popularity of distributed, in-memory, object caching systems like &lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; and&#xD;
Microsoft's soon to be released &lt;a href="http://www.25hoursaday.com/weblog/2008/06/06/VelocityADistributedInMemoryCacheFromMicrosoft.aspx"&gt;Velocity&lt;/a&gt;.  &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
memcached can be thought of as a distributed hash table and its programming model&#xD;
is fairly straightforward from the application developer's perspective. Specifically,&#xD;
There is a special hash table class used by your application which is in actuality&#xD;
a distributed hashtable whose contents are actually being stored on a cluster of machines&#xD;
instead of just in the memory of your local machine. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
With that background I can now introduce &lt;a href="http://www.terracotta.org/"&gt;Terracotta&lt;/a&gt;,&#xD;
a product that is billed as "Network Attached Memory" for Java applications.&#xD;
Like distributed hash tables such as memcached, Terracotta springs from the observation&#xD;
that accessing data from a cluster of in-memory cache servers is often more optimal&#xD;
than getting it directly from your database or file store. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Where Terracotta differs from memcached and other distributed hash tables is that&#xD;
it is completely transparent to the application developer. Whereas memcached and systems&#xD;
like it require developers to instantiate some sort of "cache" class and&#xD;
then use that as the hash table of objects that should be stored, Terracotta attempts&#xD;
to be transparent to the application developer by hooking directly into the memory&#xD;
allocation operations of the JVM. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The following is an excerpt from the Terracotta documentation on &lt;a href="http://www.terracotta.org/confluence/display/explore/How+Terracotta+Works"&gt;How&#xD;
Terracotta Works&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Terracotta uses &lt;/em&gt;&#xD;
            &lt;a href="http://asm.objectweb.org"&gt;&#xD;
              &lt;em&gt;ASM&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; to&#xD;
manipulate application classes as those classes load into the JVM. Developers can&#xD;
pick Sun Hotspot or IBM's runtime, and any of several supported application servers &#xD;
&lt;br&gt;&#xD;
…&lt;/em&gt;&#xD;
            &lt;br&gt;&#xD;
            &lt;em&gt;The Terracotta configuration file dictates which classes become clustered and&#xD;
which do not. Terracotta then examines classes for fields it needs to cluster, and&#xD;
threading semantics that need to be shared. For example, if to share customer objects&#xD;
throughout an application cluster, the developer need only tell Terracotta to cluster&#xD;
customers and to synchronize customers cluster-wide.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Terracotta looks for bytecode instructions like the following (not an exhaustive&#xD;
list):&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;ul&gt;&#xD;
            &lt;li&gt;&#xD;
              &lt;b&gt;&#xD;
                &lt;em&gt;GETFIELD&lt;/em&gt;&#xD;
              &lt;/b&gt;&#xD;
            &lt;/li&gt;&#xD;
            &lt;li&gt;&#xD;
              &lt;b&gt;&#xD;
                &lt;em&gt;PUTFIELD&lt;/em&gt;&#xD;
              &lt;/b&gt;&#xD;
            &lt;/li&gt;&#xD;
            &lt;li&gt;&#xD;
              &lt;b&gt;&#xD;
                &lt;em&gt;AASTORE&lt;/em&gt;&#xD;
              &lt;/b&gt;&#xD;
            &lt;/li&gt;&#xD;
            &lt;li&gt;&#xD;
              &lt;b&gt;&#xD;
                &lt;em&gt;AALOAD&lt;/em&gt;&#xD;
              &lt;/b&gt;&#xD;
            &lt;/li&gt;&#xD;
            &lt;li&gt;&#xD;
              &lt;b&gt;&#xD;
                &lt;em&gt;MONITORENTRY&lt;/em&gt;&#xD;
              &lt;/b&gt;&#xD;
            &lt;/li&gt;&#xD;
            &lt;li&gt;&#xD;
              &lt;b&gt;&#xD;
                &lt;em&gt;MONITOREXIT&lt;/em&gt;&#xD;
              &lt;/b&gt;&#xD;
            &lt;/li&gt;&#xD;
          &lt;/ul&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;On each of those, Terracotta does the work of Network Attached Memory. Specifically:&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;table cellspacing="0" cellpadding="2" width="485" border="1"&gt;&#xD;
            &lt;tbody&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;BYTECODE&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;Injected Behavior&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;GETFIELD&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;em&gt;Read from the Network for certain objects. Terracotta also has a heap-level cache&#xD;
that contains pure Java objects. So GETFIELD reads from RAM if-present and faults&#xD;
in from NAM if a cache miss occurs. &lt;/em&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;PUTFIELD&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;em&gt;Write to the Network for certain objects. When writing field data through the&#xD;
assignment operator "=" or through similar mechanisms, Terracotta writes&#xD;
the changed bytes to NAM as well as allowing those to flow to the JVM's heap.&lt;/em&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;AASTORE&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;em&gt;Same as PUTFIELD but for arrays&lt;/em&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;AALOAD&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;em&gt;Sames as GETFIELD but for arrays&lt;/em&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;MONITORENTRY&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;em&gt;Get a lock inside the JVM on the specified object AND get a lock in NAM in case&#xD;
a thread on another JVM is trying to edit this object at the same time&lt;/em&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
              &lt;tr&gt;&#xD;
                &lt;td valign="top" width="125"&gt;&#xD;
                  &lt;b&gt;&#xD;
                    &lt;em&gt;MONITOREXIT&lt;/em&gt;&#xD;
                  &lt;/b&gt;&#xD;
                &lt;/td&gt;&#xD;
                &lt;td valign="top" width="358"&gt;&#xD;
                  &lt;em&gt;Flush changes to the JVM's heap cache back to NAM in case another JVM is using&#xD;
the same objects as this JVM&lt;/em&gt;&#xD;
                &lt;/td&gt;&#xD;
              &lt;/tr&gt;&#xD;
            &lt;/tbody&gt;&#xD;
          &lt;/table&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
The &lt;a href="http://www.terracotta.org/confluence/display/docs1/Configuration+Guide+and+Reference#ConfigurationGuideandReference-ApplicationConfigurationSection"&gt;instrumented-classes&#xD;
section of the Terracotta config file&lt;/a&gt; is where application developers specify&#xD;
which objects types should be stored in the distributed cache and it is even possible&#xD;
to say that all memory allocations in your application should go through the distributed&#xD;
cache. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
In general, the approach taken by Terracotta seems more complicated, more intrusive&#xD;
and more error prone than using a distributed hash table like Velocity or memcached.&#xD;
I always worry about systems that attempt to hide or abstract away the fact that network&#xD;
operations are occurring. This often leads to developers writing badly performing&#xD;
or unsafe code because it wasn't obvious that network operations are involved (e.g.&#xD;
a simple lock statement in your Terracotta-powered application may actually be acquiring&#xD;
distributed locks without it being explicit in the code that this is occuring). &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Dream&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Dream&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Dream+I Luv Your Girl (Remix) (feat. Young Jeezy)&amp;amp;x=0&amp;amp;y=0"&gt;I&#xD;
Luv Your Girl (Remix) (feat. Young Jeezy)&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=IIn2Qj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=IIn2Qj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=UIqj0j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=UIqj0j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=c0Vzzj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=c0Vzzj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=ZuzztJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=ZuzztJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/331785248" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="9" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=898f56ef-0439-4100-90da-08701be03c13" />
    <title>The Revenge of RPC: Google Protocol Buffers and Facebook Thrift</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=898f56ef-0439-4100-90da-08701be03c13</id>
    <published>2008-07-10T07:23:19.078125-07:00</published>
    <updated>2008-07-10T07:23:19.078125-07:00</updated>
    <category term="Platforms" label="Platforms" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Platforms" />
    <category term="Programming" label="Programming" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Programming" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
In the past year both Google and Facebook have released the remote procedure call&#xD;
(RPC) technologies that are used for communication between servers within their data&#xD;
centers as Open Source projects.  &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://developers.facebook.com/thrift/"&gt;Facebook Thrift&lt;/a&gt; allows you to&#xD;
define data types and service interfaces in a &lt;a href="http://developers.facebook.com/thrift/tutorial.thrift"&gt;simple&#xD;
definition file&lt;/a&gt;. Taking that file as input, the compiler &lt;a href="http://developers.facebook.com/thrift/Calculator.h"&gt;generates&#xD;
code&lt;/a&gt; to be used to easily build RPC clients and servers that communicate seamlessly&#xD;
across programming languages. It supports the following programming languages; C++,&#xD;
Java, Python, PHP and Ruby. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a title="http://code.google.com/p/protobuf/" href="http://code.google.com/p/protobuf/"&gt;Google&#xD;
Protocol Buffers&lt;/a&gt; allows you to define data types and service interfaces in a &lt;a href="http://code.google.com/apis/protocolbuffers/docs/proto.html"&gt;simple&#xD;
definition file&lt;/a&gt;. Taking that file as input, the compiler &lt;a href="http://code.google.com/apis/protocolbuffers/docs/reference/cpp-generated.html"&gt;generates&#xD;
code&lt;/a&gt; to be used to easily build RPC clients and servers that communicate seamlessly&#xD;
across programming languages. It supports the following programming languages; C++,&#xD;
Java and Python. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
That’s interesting. Didn’t Steve Vinoski recently claim that &lt;a title="Convenience over Correctness" href="http://steve.vinoski.net/blog/2008/07/01/convenience-over-correctness/"&gt;RPC&#xD;
and it's descendants are "fundamentally flawed"&lt;/a&gt;? If so, why are Google&#xD;
and Facebook not only using RPC but proud enough of their usage of yet another distributed&#xD;
object RPC technology &lt;em&gt;based on binary protocols&lt;/em&gt; that they are Open Sourcing&#xD;
them? Didn’t they get the memo that everyone is now on the REST + JSON/XML bandwagon&#xD;
(&lt;a href="http://www.tbray.org/ongoing/When/200x/2008/07/07/Atom"&gt;preferrably AtomPub&lt;/a&gt;)? &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
In truth, Google is on the REST + XML band wagon. Google has the Google Data APIs&#xD;
(&lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt;) which is a consistent set&#xD;
of RESTful APIs for accessing data from Google's services based on the Atom Publishing&#xD;
Protocol aka RFC 5023. And even Facebook has a set of plain old XML over HTTP APIs&#xD;
(POX/HTTP) which they &lt;strong&gt;incorrectly&lt;/strong&gt; refer to as the &lt;a href="http://wiki.developers.facebook.com/index.php/API"&gt;Facebook&#xD;
REST API&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So what is the story here? &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It is all about coupling and how much control you have over the distributed end points.&#xD;
On the Web where you have little to no control over who talks to your servers or what&#xD;
technology they use, you want to utilize flexible technologies that make no assumptions&#xD;
about either end of the communication. This is where RESTful XML-based Web services&#xD;
shine. However when you have tight control over the service end points (e.g. if they&#xD;
are all your servers running in your data center) then you can use more optimized&#xD;
communications technologies that add a layer of tight coupling to your system. An&#xD;
example of the kind of tight coupling you have to live with is that  Facebook&#xD;
Thrift requires specific versions of g++ and Java if you plan to talk to it using&#xD;
code written in either language and you can’t talk to it from a service written in&#xD;
C#. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
In general, the Web is about openness and loose coupling. Binary protocols that require&#xD;
specific programming languages and runtimes are the exact opposite of this. However&#xD;
inside your Web service where you control both ends of the pipe, you can optimize&#xD;
the interaction between your services and simplify development by going with a binary&#xD;
RPC based technology. More than likely different parts of your system are already&#xD;
doing this anyway (e.g. &lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; uses&#xD;
a binary protocol to talk between cache instances, SQL Server uses &lt;a href="http://msdn.microsoft.com/en-us/library/cc448435.aspx"&gt;TDS&lt;/a&gt; as&#xD;
the communications protocol between the database and it's clients, etc). &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Always remember to use the right tool for the job. One size doesn’t fit all when it&#xD;
comes to technology decisions. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
FURTHER READING &#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;a href="http://keithelder.net/blog/archive/2008/01/17/Exposing-a-WCF-Service-With-Multiple-Bindings-and-Endpoints.aspx"&gt;Exposing&#xD;
a WCF Service With Multiple Bindings and Endpoints&lt;/a&gt; – Keith Elder describes how&#xD;
Windows Communication Foundation (WCF) supports multiple bindings that enable developers&#xD;
to expose their services in a variety of ways.  A developer can create a service&#xD;
once and then expose it to support net.tcp:// or http:// and various versions of http://&#xD;
(Soap1.1, Soap1.2, WS*, JSON, etc).  This can be useful if a service crosses&#xD;
boundaries between the intranet and the Internet. &#xD;
&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Pink&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Pink&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Pink+Family Portrait&amp;amp;x=0&amp;amp;y=0"&gt;Family&#xD;
Portrait&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=6POa1j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=6POa1j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=JO49Oj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=JO49Oj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=abDzdj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=abDzdj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=AXoWXJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=AXoWXJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/331785249" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="9" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=501b6a9c-1a26-450e-bf4f-3799ba5d8889" />
    <title>Freedom of Speech Doesn’t Mean Freedom from Consequences</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/08/FreedomOfSpeechDoesntMeanFreedomFromConsequences.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=501b6a9c-1a26-450e-bf4f-3799ba5d8889</id>
    <published>2008-07-08T05:51:20.1267979-07:00</published>
    <updated>2008-07-08T05:51:20.1267979-07:00</updated>
    <category term="Current Affairs" label="Current Affairs" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Current+Affairs" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
A year ago Loren Feldman produced a controversial video called "TechNigga"&#xD;
which seems to still be causing him problems today. Matthew Ingram captures the latest&#xD;
fallout from that controversy in his post &lt;a title="http://www.mathewingram.com/work/2008/07/07/protests-over-verizon-deal-with-1938media/" href="http://www.mathewingram.com/work/2008/07/07/protests-over-verizon-deal-with-1938media/"&gt;Protests&#xD;
over Verizon deal with 1938media&lt;/a&gt; where he writes &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Several civil-rights groups and media watchdogs &lt;/em&gt;&#xD;
            &lt;a href="http://www.hiphopdx.com/index/news/id.7258/title.verizon-in-hot-water-over-technigga-partnership"&gt;&#xD;
              &lt;em&gt;are&#xD;
protesting&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; a decision by telecom giant Verizon to add 1938media’s video&#xD;
clips to its mobile Vcast service, saying Loren’s "TechNigga" clip is demeaning&#xD;
to black people. &lt;/em&gt;&#xD;
            &lt;a href="http://www.islamichope.org/"&gt;&#xD;
              &lt;em&gt;Project Islamic Hope&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;,&#xD;
for example, has issued a statement demanding that Verizon drop its distribution arrangement&#xD;
with 1938media, which was just announced about &lt;/em&gt;&#xD;
            &lt;a href="http://www.1938media.com/excuse-but-im-on-the-phone/"&gt;&#xD;
              &lt;em&gt;a&#xD;
week ago&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;, and other groups including the National Action Network and&#xD;
LA Humanity Foundation are &lt;/em&gt;&#xD;
            &lt;a href="http://www.eurweb.com/story/eur45037.cfm"&gt;&#xD;
              &lt;em&gt;also&#xD;
apparently&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; calling for people to email Verizon and protest.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;The video that has Islamic Hope and other groups so upset is one called "TechNigga,"&#xD;
which Loren &lt;/em&gt;&#xD;
            &lt;a href="http://1938media.blip.tv/file/326972"&gt;&#xD;
              &lt;em&gt;put together&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; last&#xD;
August. After wondering aloud why there are no black tech bloggers, Loren reappears&#xD;
with a skullcap and some gawdy jewelry, and claims to be the host of a show called&#xD;
TechNigga. He then swigs from a bottle of booze, does a lot of tongue-kissing and&#xD;
face-licking with his girlfriend &lt;/em&gt;&#xD;
            &lt;a href="http://www.michelleoshen.com/"&gt;&#xD;
              &lt;em&gt;Michelle&#xD;
Oshen&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;, and then introduces a new Web app called "Ho-Trackr,"&#xD;
which is a mashup with Google Maps that allows prospective johns to locate prostitutes.&#xD;
In a statement, Islamic Hope &lt;/em&gt;&#xD;
            &lt;a href="http://www.blacktalentnews.com/artman/publish/article_1917.shtml"&gt;&#xD;
              &lt;em&gt;says&#xD;
that&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; the video "sends a horrible message that Verizon seeks to partner&#xD;
with racists."&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
I remember &lt;a title="RE: Where Are The Black Tech Bloggers?" href="http://www.25hoursaday.com/weblog/2007/08/09/REWhereAreTheBlackTechBloggers.aspx"&gt;encountering&#xD;
the video last year&lt;/a&gt; and thinking it was incredibly unfunny. It wasn’t a clever&#xD;
juxtaposition of hip hop culture and tech geekery. It wasn’t &lt;a href="http://en.wikipedia.org/wiki/Satire"&gt;satire&lt;/a&gt; since&#xD;
that involves lampooning someone or something you disapprove off in a humorous way&#xD;
(see &lt;a href="http://www.comedycentral.com/colbertreport/"&gt;The Colbert Report&lt;/a&gt;). &#xD;
Of course, I thought the responses to the video were even dumber; like Robert Scoble&#xD;
responding to the video with the comment “Dare Obasanjo is black”. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Since posting the video Loren Feldman has lost a bunch of video distribution deals&#xD;
with the current Verizon deal being the latest. I’ve been amused to read all of the &lt;a href="http://www.techcrunch.com/2008/07/07/1938-media-loses-verizon-deal-over-racism-charges/"&gt;comments&#xD;
on TechCrunch&lt;/a&gt; about how this violates Loren’s &lt;strong&gt;freedom of speech&lt;/strong&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
People often confuse the fact that it is not a crime to speak your mind in America&#xD;
with the belief that you should be able to speak your mind without consequence. The&#xD;
two things are not the same. If I call you an idiot, I may not go to jail but I shouldn’t&#xD;
expect you to be nice to me afterwards. The things you say can come back and bite&#xD;
you on butt is something everyone should have learned growing up. So it is always&#xD;
surprising for me to see people petulantly complain that “this violates my freedom&#xD;
of speech” when they have to deal with the consequences of their actions. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
BONUS VIDEO: A juxtaposition of hip hop culture and Web geekery by a &lt;a href="http://www.theseorapper.com/"&gt;black&#xD;
tech blogger&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e666d595-ea02-4aa1-878e-8c65d3a3c7f8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&#xD;
          &lt;div id="9b9b6ee0-8dc7-4992-8c09-62dbd8d8a89b" style="margin: 0px; padding: 0px; display: inline;"&gt;&#xD;
            &lt;div&gt;&#xD;
              &lt;a href="http://www.youtube.com/watch?v=a0qMe7Z3EYg" target="_new"&gt;&#xD;
                &lt;img src="http://www.25hoursaday.com/weblog/content/binary/WindowsLiveWriter/FreedomofSpeechDoesntMeanFreedomfromCons_5256/videoe79f529707db.jpg" galleryimg="no" onload="var downlevelDiv = document.getElementById('9b9b6ee0-8dc7-4992-8c09-62dbd8d8a89b'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/a0qMe7Z3EYg\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;param name=\&amp;quot;wmode\&amp;quot; value=\&amp;quot;transparent\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/a0qMe7Z3EYg\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; wmode=\&amp;quot;transparent\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/img&gt;&#xD;
              &lt;/a&gt;&#xD;
            &lt;/div&gt;&#xD;
          &lt;/div&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=NWA"&gt;NWA&lt;/a&gt; – &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Niggaz 4 Life&amp;amp;artistTerm=NWA"&gt;N*ggaz&#xD;
4 Life&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=9UF3Mj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=9UF3Mj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=58zfej"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=58zfej" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=e2vSkj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=e2vSkj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=61irAJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=61irAJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/329803702" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="1" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=6610ac1c-1984-4c9f-9efb-dd03f1bac524" />
    <title>Gnip: FeedBurner + Ping Server for Web APIs</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/07/GnipFeedBurnerPingServerForWebAPIs.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=6610ac1c-1984-4c9f-9efb-dd03f1bac524</id>
    <published>2008-07-07T06:13:49.484375-07:00</published>
    <updated>2008-07-07T06:13:49.484375-07:00</updated>
    <category term="Platforms" label="Platforms" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Platforms" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.gnipcentral.com/"&gt;Gnip&lt;/a&gt; is a newly launched startup that pitches&#xD;
itself as a service that aims to “make data portability suck less”. Mike Arrington&#xD;
describes the service in his post &lt;a href="http://www.techcrunch.com/2008/07/01/gnip-launches-to-ease-the-strain-on-web-services/"&gt;Gnip&#xD;
Launches To Ease The Strain On Web Services&lt;/a&gt; which is excerpted below &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;A close analogy is a blog ping server (&lt;/em&gt;&#xD;
            &lt;a href="http://www.techcrunch.com/2005/07/08/profile-weblogscom-ping-server/"&gt;&#xD;
              &lt;em&gt;see&#xD;
our overview here&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;). Ping servers tell blog search engines like Technorati&#xD;
and Google Blog Search when a blog has been updated, so the search engines don’t have&#xD;
to constantly re-index sites just to see if new content has been posted. Instead,&#xD;
the blog tells the ping server when it updates, which tells the search engines to&#xD;
drop by and re-index. The creation of the first ping server, Weblogs.com, by Dave&#xD;
Winer resulted in orders of magnitude better efficiency for blog search engines.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;&#xD;
              &lt;img alt="" src="http://www.techcrunch.com/wp-content/uploads/2008/07/gnipchart.jpg"&gt;&lt;/img&gt;&#xD;
            &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;The same thinking basically applies to Gnip. The idea is to gather simple information&#xD;
from social networks - just a username and the fact that they created new content&#xD;
(like writing a Twitter message, for example). Gnip then distributes that data to&#xD;
whoever wants it, and those downstream services can then access the core service’s&#xD;
API, with proper user authentication, and access the actual data (in our example,&#xD;
the actual Twitter message).&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;From a user’s perspective, the result is faster data updates across services and&#xD;
less downtime for services since their APIs won’t be hit as hard.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
From my perspective, Gnip also shares some similarity to services like &lt;a href="http://www.feedburner.com"&gt;FeedBurner&lt;/a&gt; as&#xD;
well as blog ping servers. The original purpose of blog ping servers was to make it&#xD;
cheaper for services like &lt;a href="http://www.technorati.com"&gt;Technorati&lt;/a&gt; and &lt;a href="http://www.readwriteweb.com/archives/blog_search_feedster_quietly_dies.php"&gt;Feedster&lt;/a&gt; to&#xD;
index the blogosphere without having to invest in a Google-sized server farm and crawl&#xD;
the entire Web every couple of minutes. In addition, since blogs often have tiny readerships&#xD;
and are thus infrequently linked to, crawling alone was not enough to ensure that&#xD;
they find their way into the search index. It wasn’t about taking load off of the&#xD;
sites that were doing the pinging. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
On the other hand, FeedBurner hosts a site’s RSS feed as a way to take load off of&#xD;
their servers and then provides analytics data so the site doesn’t miss out from losing&#xD;
the direct connection to its subscribers. This is more in line with the expectation&#xD;
that Gnip will take load off of a service’s API servers. However unlike FeedBurner,&#xD;
Gnip doesn’t actually store the user data from the social networking site. It simply&#xD;
stores a record that indicates that “user X on site Y made an update of type Z at&#xD;
time T”.  The thinking is that web sites will publish a notification to Gnip&#xD;
whenever their users perform an update. Below is a sample interaction between Digg&#xD;
and Gnip where Digg notifies Gnip that the users amy and john.doe have dugg two stories. &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;pre&gt;&#xD;
            &lt;code&gt;===&amp;gt; POST /publishers/digg/activity.xml Accept: application/xml&#xD;
Content-Type: application/xml &amp;lt;activities&amp;gt; &amp;lt;activity at="2008-06-08T10:12:42Z"&#xD;
uid="amy" type="dugg" guid="http://digg.com/odd_stuff/a_story"/&amp;gt; &amp;lt;activity at="2008-06-09T09:14:07Z"&#xD;
uid="john.doe" type="dugg" guid="http://digg.com/odd_stuff/really_weird"/&amp;gt; &amp;lt;/activities&amp;gt;&#xD;
&amp;lt;--- 200 OK Content-Type: application/xml &amp;lt;result&amp;gt;Success&amp;lt;/result&amp;gt; &#xD;
&lt;/code&gt;&#xD;
          &lt;/pre&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
There are two modes in which "subscribers" can choose to interact with the data published&#xD;
to Gnip. The first is in a mode similar to how blog search engines interact with the &lt;a href="http://www.weblogs.com/api.html#10"&gt;changes.xml&#xD;
file on Weblogs.com&lt;/a&gt; and other blog ping servers. For example, services like &lt;a href="http://www.summize.com"&gt;Summize&lt;/a&gt; or &lt;a href="http://www.tweetscan.com/"&gt;TweetScan&lt;/a&gt; can&#xD;
ask Gnip for the last hour of changes on Twitter instead of whatever mechanism they&#xD;
are using today to crawl the site. Below is what a sample interaction to retrieve&#xD;
the most recent updates on Twitter from Gnip would look like &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;pre&gt;&#xD;
            &lt;code&gt;===&amp;gt;&lt;br&gt;&#xD;
GET /publishers/&lt;b&gt;twitter&lt;/b&gt;/activity/current.xml&lt;br&gt;&#xD;
Accept: application/xml&lt;br&gt;&lt;br&gt;&#xD;
&amp;lt;---&lt;br&gt;&#xD;
200 OK&lt;br&gt;&#xD;
Content-Type: application/xml&lt;br&gt;&lt;br&gt;&#xD;
&amp;lt;activities&amp;gt;&lt;br&gt;&#xD;
&amp;lt;activity at="2008-06-08T10:12:07Z" uid="john.doe" type="tweet" guid="http://twitter.com/john.doe/statuses/42"/&amp;gt;&lt;br&gt;&#xD;
&amp;lt;activity at="2008-06-08T10:12:42Z" uid="amy" type="tweet" guid="http://twitter.com/amy/statuses/52"/&amp;gt;&lt;br&gt;&#xD;
&amp;lt;/activities&amp;gt; &lt;/code&gt;&#xD;
          &lt;/pre&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
The main problem with this approach is the same one that affects blog ping servers.&#xD;
If the rate of updates is more than the ping server can handle then it may begin to&#xD;
fall behind or lose updates completely. Services that don’t want to risk their content&#xD;
not being crawled are best off providing their own update stream that applications&#xD;
can poll periodically. That’s why the folks at Six Apart came up with the &lt;a href="http://updates.sixapart.com/"&gt;Six&#xD;
Apart Update Stream for LiveJournal, TypePad and Vox weblogs&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The second mode is one that has gotten Twitter fans like Dave Winer &lt;a title="I wish Twitter would partner with Gnip" href="http://www.scripting.com/stories/2008/07/01/iWishTwitterWouldPartnerWi.html"&gt;raving&#xD;
about Gnip being the solution to Twitter’s scaling problems&lt;/a&gt;. In this mode, an&#xD;
application creates a &lt;a href="http://docs.google.com/View?docid=dgkhvp8s_3hhwdmdfb#Collections"&gt;collection&lt;/a&gt; of&#xD;
one or more usernames they are interested in. Below is what a collection document&#xD;
created by the &lt;a href="http://arsecandle.org/twadget/"&gt;Twadget&lt;/a&gt; application to&#xD;
indicate that it is interested in my Twitter updates might look like. &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
&amp;lt;collection name="twadget-carnage4life"&amp;gt;&lt;br&gt;&#xD;
     &amp;lt;uid name="carnage4life" publisher.name="twitter"/&amp;gt;&lt;br&gt;&#xD;
&amp;lt;/collection&amp;gt;&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
Then instead of polling Twitter every 5 minutes for updates it polls Gnip every 5&#xD;
minutes for updates and only talks to Twitter’s servers when Gnip indicates that I’ve&#xD;
made an update since the last time the application polled Gnip. The interaction between&#xD;
Twadget and Gnip would then be as follows &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;pre&gt;&#xD;
            &lt;code&gt;===&amp;gt;&lt;br&gt;&#xD;
GET /collections/twadget-carnage4life/activity/current.xml&lt;br&gt;&#xD;
Accept: application/xml&lt;br&gt;&#xD;
&amp;lt;---&lt;br&gt;&#xD;
200 OK&lt;br&gt;&#xD;
Content-Type: application/xml&lt;br&gt;&lt;br&gt;&#xD;
&amp;lt;activities&amp;gt;&lt;br&gt;&#xD;
&amp;lt;activity at="2008-06-08T10:12:07Z" uid="carnage4life" type="tweet" guid="&lt;a title="http://twitter.com/Carnage4Life/statuses/850726804" href="http://twitter.com/Carnage4Life/statuses/850726804"&gt;http://twitter.com/Carnage4Life/statuses/850726804&lt;/a&gt;"/&amp;gt;&lt;/code&gt;&#xD;
            &lt;code&gt;&#xD;
            &lt;/code&gt;&#xD;
            &lt;br&gt;&#xD;
            &lt;code&gt; &amp;lt;/activities&amp;gt; &lt;/code&gt;&#xD;
          &lt;/pre&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
Of course, this makes me wonder why one would think that it is feasible for Gnip to&#xD;
build a system that can handle the API polling traffic of every microblogging and&#xD;
social networking site out there but it is infeasible for Twitter to figure out how&#xD;
to handle the polling traffic for their own service. Talk about lowered expectations. &lt;img title="Wink" style="vertical-align: middle" alt="Wink" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/smile_wink.gif"&gt;&lt;/img&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So what do I think of Gnip? I think the ping server mode may be of some interest for&#xD;
services that think it is cheaper to have code that pings Gnip after every user update&#xD;
instead building out an update stream service. However since a lot of sites already&#xD;
have some equivalent of the &lt;a href="http://twitter.com/public_timeline"&gt;public timeline&lt;/a&gt; it&#xD;
isn’t clear that there is a huge &lt;strong&gt;&lt;u&gt;need&lt;/u&gt;&lt;/strong&gt; for a ping service.&#xD;
Crawlers can just hit the public timeline which I &lt;em&gt;assume&lt;/em&gt; is what services&#xD;
like Summize and TweetScan do to keep their indexes of tweets up to date. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
As for using Gnip as a mechanism for reducing the load API clients put on a microblogging&#xD;
or similar service? Gnip is &lt;strong&gt;&lt;u&gt;totally useless&lt;/u&gt;&lt;/strong&gt; for that in it’s&#xD;
current incarnation. API clients aren’t interested in updates made by single user.&#xD;
They are interested in all the updates made by all the people the user is following.&#xD;
So for Twadget to use Gnip to lighten the load it causes on Twitter’s servers on my&#xD;
behalf, it has to build a collection of all the people I am following in Gnip and&#xD;
then keep that list of users in sync with whatever that list is on Twitter. But if&#xD;
it has to constantly poll Twitter for my friend list, isn’t it still putting the same&#xD;
amount of load on Twitter? I guess this could be fixed by having Twitter publish follower/following&#xD;
lists to Gnip but that introduces all sorts of interesting technical and privacy issues.&#xD;
But that doesn’t matter since the folks at Gnip brag &lt;a title="The HOW of Gnip: keep it simple stupid!" href="http://blog.gnipcentral.com/2008/07/04/the-how-of-gnip-keep-it-simple-stupid/"&gt;about&#xD;
only keeping 60 minutes of worth of updates&lt;/a&gt; as the “secret sauce” to their scalability.&#xD;
This means if I shut my Twitter client hasn’t polled Gnip in a 60 minute window (maybe&#xD;
my laptop is closed) then it doesn’t matter anyway and it has to poll Twitter. &#xD;
I suspect someone didn’t finish doing their homework before rushing to “launch” Gnip. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;u&gt;PS:&lt;/u&gt; One thing that is confusing to me is why all communication between applications&#xD;
and Gnip needs to be over SSL. The only thing I can see it adding is making it more&#xD;
expensive for Gnip run their service. I can’t think of any reason why the interactions&#xD;
described above need to be over a secure channel. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Lil Wayne"&gt;Lil&#xD;
Wayne&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Hustler Musik&amp;amp;artistTerm=Lil Wayne"&gt;Hustler&#xD;
Musik&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=MDylXj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=MDylXj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=mavJXj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=mavJXj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=x8Szij"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=x8Szij" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=ngq2xJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=ngq2xJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/328875494" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="19" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=cfa4d14a-486c-463a-b127-7820690e5eed" />
    <title>A List of Companies Working Hard to Screw Up My Web Experience</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/07/AListOfCompaniesWorkingHardToScrewUpMyWebExperience.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=cfa4d14a-486c-463a-b127-7820690e5eed</id>
    <published>2008-07-07T06:13:08.359375-07:00</published>
    <updated>2008-07-07T06:13:08.359375-07:00</updated>
    <category term="Rants" label="Rants" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Rants" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
Every once in a while I encounter an online service or Web site that is so irritating&#xD;
that it seems like the people behind the service are just in it to frustrate Web users.&#xD;
And I don’t mean the obvious candidates like email spammers and purveyors of popup&#xD;
ads since they’ve been around for so long I’ve either learned how to ignore and avoid&#xD;
them. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
There is a new generation of irritants and many of them are part of the new lunacy&#xD;
we call “Web 2.0” &#xD;
&lt;/p&gt;&#xD;
        &lt;ol&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;p&gt;&#xD;
              &lt;b&gt;Flash Widgets with Embedded PDF Documents&lt;/b&gt;: Somewhere along the line a bunch&#xD;
of startups decided that they needed to put a “Web 2.0” spin on the simple concept&#xD;
of hosting people’s office documents online. You see, lots of people would like to&#xD;
share documents in PDF or Microsoft Office® formats that aren’t particularly Web friendly.&#xD;
So how have sites like &lt;a href="http://www.scribd.com"&gt;Scribd&lt;/a&gt; and &lt;a href="http://www.docstoc.com/"&gt;Docstoc&lt;/a&gt; fixed&#xD;
this problem? By creating a Flash widgets containing the embedded PDF/Office documents&#xD;
like the one shown &lt;a href="http://www.techcrunch.com/2008/04/28/docstoc-raises-325-million-in-series-b-funding/"&gt;here&lt;/a&gt;.&#xD;
So not only are the documents still in a Web unfriendly format but now I can’t even&#xD;
download them and use the tools on my desktop to read them. It’s like let’s combine&#xD;
the FAIL of putting non-Web documents on the Web with the fail of a Web-unfriendly&#xD;
format like Flash. FAIL++. By the way, it’s pretty ironic that &lt;a title="Overview of Exchange 2007 Outlook Web Access WebReady Document Viewing" href="http://msexchangeteam.com/archive/2007/03/23/437257.aspx"&gt;a&#xD;
Microsoft enterprise product&lt;/a&gt; gets this right where so many “Web 2.0” startups&#xD;
get it wrong. &#xD;
&lt;/p&gt;&#xD;
          &lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;p&gt;&#xD;
            &lt;/p&gt;&#xD;
            &lt;strong&gt;Hovering Over Links Produces Flash Widgets as Pop Over Windows&lt;/strong&gt;: The&#xD;
company that takes the cake for spreading this major irritant across the blogosphere&#xD;
is &lt;a href="http://www.snap.com"&gt;Snap Technologies&lt;/a&gt; and their Snap Shots™ product.&#xD;
There’s nothing quite as irritating as hovering over a link &lt;em&gt;on your way to click&#xD;
another link&lt;/em&gt; and leaving a wake of pop over windows with previews of the Web&#xD;
pages at the end of said links. I seriously wonder if anyone finds this useful? &#xD;
&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;p&gt;&#xD;
              &lt;b&gt;Facebook Advertisers&lt;/b&gt;: One of the promises of &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; is&#xD;
that its users will see more relevant advertising because there is all this rich demographic&#xD;
data about the site’s users in their profiles. Somewhere along the line this information&#xD;
is either getting lost or being ignored by Facebook’s advertisers. Even though my&#xD;
profile says I’m married and out of my twenties I keep getting &lt;a href="http://www.facebook.com/album.php?aid=131598&amp;amp;l=37514&amp;amp;id=500050028"&gt;borderline&#xD;
sleazy ads&lt;/a&gt; whenever I login to play &lt;a href="http://apps.facebook.com/scrabulous/"&gt;Scrabulous&lt;/a&gt; asking&#xD;
if I want to meet college girls. Then there are the ads which aren’t for dating sites&#xD;
but still use sleazy imagery anyway. It’s mad embarrassing whenever my wife looks&#xD;
over to see what I’m doing on my laptop to have dating site ads blaring in her face.&#xD;
Obviously she knows I’m not on a dating site but still…&#xD;
&lt;/p&gt;&#xD;
          &lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;p&gt;&#xD;
              &lt;b&gt;Forums that Require Registration Showing Up in Search Results &lt;/b&gt;: Every once&#xD;
in a while I do a &lt;a href="http://search.live.com/results.aspx?q=site%3Awww.experts-exchange.com+order+of+constructor+calls&amp;amp;go=&amp;amp;form=QBRE"&gt;Web&#xD;
search for a programming problem&lt;/a&gt; and a couple of links to &lt;a href="http://www.experts-exchange.com/"&gt;Experts&#xD;
Exchange&lt;/a&gt; end up in the results. What is truly annoying about this site is that&#xD;
the excerpt on the search result page makes  it seem as though the answer to&#xD;
your question is one click away but when you click through you are greeted with &lt;em&gt;“All&#xD;
comments and solutions are available to &lt;b&gt;Premium Service&lt;/b&gt; Members only”.&lt;/em&gt; I&#xD;
thought search engines had rules about banning sites with that sort of obnoxious behavior? &#xD;
&lt;/p&gt;&#xD;
          &lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;p&gt;&#xD;
              &lt;b&gt;Newspaper Websites with Interstitial Ads and Registration Requirements&lt;/b&gt;: Newspapers&#xD;
such as the &lt;a href="http://www.nytimes.com"&gt;New York Times&lt;/a&gt; often act as if they&#xD;
don’t really want me reading the content on their Web site. If I click on a link to&#xD;
a story on the New York Times site such as &lt;a href="http://www.nytimes.com/2008/07/05/business/05nocera.html?_r=1&amp;amp;partner=rssnyt&amp;amp;emc=rss&amp;amp;oref=slogin"&gt;this&#xD;
one&lt;/a&gt;, one of two things will happen; I’m either taken to a full page animated advertisement&#xD;
with an option to skip the ad in relatively small font or I get a one sentence summary&#xD;
of the story with a notice that I need to register on their Web site before I can&#xD;
read the story. Either way it’s a bunch of bull crap that prevents me from getting&#xD;
to the news. &#xD;
&lt;/p&gt;&#xD;
          &lt;/li&gt;&#xD;
        &lt;/ol&gt;&#xD;
        &lt;p&gt;&#xD;
There are two things that strike me about this list as notable. The first is that&#xD;
there are an increasing number of “Web 2.0” startups out there who are actively using&#xD;
Flash to &lt;strong&gt;&lt;u&gt;cause&lt;/u&gt;&lt;/strong&gt; more problems than they claim to be solving.&#xD;
The second is that requiring registration to view content is an amazingly stupid trend&#xD;
that is beyond dumb. It’s not like people need to register on your site to see ads&#xD;
so why reduce the size of your potential audience by including this road block? That’s&#xD;
just stupid. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Pleasure P"&gt;Pleasure&#xD;
P&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Rock Bottom (feat. Lil Wayne)&amp;amp;artistTerm=Pleasure P"&gt;Rock&#xD;
Bottom (feat. Lil Wayne)&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=2xiFzj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=2xiFzj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=IEP4Hj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=IEP4Hj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=e0Qlxj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=e0Qlxj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=XqD3nJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=XqD3nJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/328875495" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="6" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=5bd5b38e-ae00-4616-86b4-7e35b59435f3" />
    <title>In Defense of XML</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/02/InDefenseOfXML.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=5bd5b38e-ae00-4616-86b4-7e35b59435f3</id>
    <published>2008-07-02T05:56:10.14-07:00</published>
    <updated>2008-07-02T05:56:10.14-07:00</updated>
    <category term="XML" label="XML" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=XML" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
Jeff Atwood recently published two anti-XML rants in his blog entitled &lt;a href="http://www.codinghorror.com/blog/archives/001114.html"&gt;XML:&#xD;
The Angle Bracket Tax&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/blog/archives/001139.html"&gt;Revisiting&#xD;
the XML Angle Bracket Tax&lt;/a&gt;. The source of his beef with XML and his recommendations&#xD;
to developers are excerpted below &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Everywhere I look, programmers and programming tools seem to have standardized&#xD;
on &lt;/em&gt;&#xD;
            &lt;a href="http://en.wikipedia.org/wiki/XML"&gt;&#xD;
              &lt;em&gt;XML&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;. Configuration&#xD;
files, build scripts, local data storage, code comments, project files, you name it&#xD;
-- &lt;b&gt;if it's stored in a text file and needs to be retrieved and parsed, it's probably&#xD;
XML.&lt;/b&gt; I realize that we have to use something to represent reasonably human readable&#xD;
data stored in a text file, but XML sometimes feels an awful lot like using an enormous&#xD;
sledgehammer to drive common household nails. &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;I'm deeply ambivalent about XML. I'm reminded of this Winston Churchill quote: &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;blockquote&gt;&#xD;
            &lt;em&gt;It has been said that democracy is the worst form of government except&#xD;
all the others that have been tried. &lt;/em&gt;&#xD;
          &lt;/blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;XML is like democracy. Sometimes it even works. On the other hand, it also means&#xD;
we end up with stuff like this:&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;pre&gt;&amp;lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" &#xD;
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&amp;gt;&#xD;
  &amp;lt;SOAP-ENV:Body&amp;gt;&#xD;
    &amp;lt;m:GetLastTradePrice xmlns:m="Some-URI"&amp;gt;&#xD;
      &amp;lt;symbol&amp;gt;DIS&amp;lt;/symbol&amp;gt;&#xD;
    &amp;lt;/m:GetLastTradePrice&amp;gt;&#xD;
  &amp;lt;/SOAP-ENV:Body&amp;gt;&#xD;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;/pre&gt;&#xD;
… &#xD;
&lt;br&gt;&lt;em&gt;You could do worse than XML. It's a reasonable choice, and if you're going to&#xD;
use XML, then at least &lt;a href="http://www.codinghorror.com/blog/archives/000647.html"&gt;&lt;em&gt;learn&#xD;
to use it correctly&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. But consider: &lt;/em&gt;&lt;/em&gt;&lt;ol&gt;&lt;li&gt;&lt;em&gt;Should XML be the default choice? &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Is XML the simplest possible thing that can work for your intended use? &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Do you &lt;/em&gt;&lt;a href="http://web.archive.org/web/20060325012720/www.pault.com/xmlalternatives.html"&gt;&lt;em&gt;know&#xD;
what the XML alternatives are&lt;/em&gt;&lt;/a&gt;&lt;em&gt;? &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Wouldn't it be nice to have easily readable, understandable data and configuration&#xD;
files, without all those sharp, pointy angle brackets jabbing you directly in your&#xD;
ever-lovin' eyeballs?&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;I don't necessarily think &lt;/em&gt;&lt;a href="http://c2.com/cgi/wiki?XmlSucks"&gt;&lt;em&gt;XML&#xD;
sucks&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, but the mindless, blanket application of XML as &lt;/em&gt;&lt;a href="http://snltranscripts.jt.org/75/75ishimmer.phtml"&gt;&lt;em&gt;a&#xD;
dessert topping and a floor wax&lt;/em&gt;&lt;/a&gt;&lt;em&gt; certainly does. Like all tools, it's&#xD;
a question of how you use it. Please think twice before subjecting yourself, your&#xD;
fellow programmers, and your users to &lt;b&gt;the XML angle bracket tax&lt;/b&gt;. &amp;lt;CleverEndQuote&amp;gt;Again.&amp;lt;/CleverEndQuote&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
The question of if and when to use XML is one I am intimately familiar with given&#xD;
that I spent the first 2.5 years of my professional career at Microsoft working on&#xD;
the XML team as the “face of XML” on MSDN.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
My problem with Jeff’s articles is that they take a very narrow view of how to evaluate&#xD;
a technology. No one should argue that XML is the simplest or most efficient technology&#xD;
to satisfy the uses it has been put to today. It isn’t. The value of XML isn’t in&#xD;
its simplicity or its efficiency. It is in the fact that there is a &lt;strong&gt;&lt;u&gt;massive&lt;/u&gt;&lt;/strong&gt; ecosystem&#xD;
of knowledge and tools around working with XML. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If I decide to use XML for my data format, I can be sure that my data will be consumable&#xD;
using a variety off-the-shelf tools on practically every platform in use today. In&#xD;
addition, there are a variety of tools for authoring XML, transforming it to HTML&#xD;
or text, parsing it, converting it to objects, mapping it to database schemas, validating&#xD;
it against a schema, and so on. Want to convert my XML config file into a pretty HTML&#xD;
page? I can use XSLT or CSS. Want to validate my XML against a schema? I have my choice&#xD;
of Schematron, Relax NG and XSD. Want to find stuff in my XML document? XPath and&#xD;
XQuery to the rescue. And so on. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
No other data format hits a similar sweet spot when it comes to ease of use, popularity&#xD;
and breadth of tool ecosystem.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So the question you really want to ask yourself before taking on the “Angle Bracket&#xD;
Tax” as Jeff Atwood puts it, is whether the benefits of avoiding XML outweigh the &lt;strong&gt;costs&lt;/strong&gt; of&#xD;
giving up the tool ecosystem of XML and the familiarity that practically every developer&#xD;
out there has with the technology? In some cases this might be true such as when deciding&#xD;
whether to go with JSON over XML in AJAX applications (I’ve given &lt;a title="JSON vs. XML: Browser Security Model" href="http://www.25hoursaday.com/weblog/2007/01/02/JSONVsXMLBrowserSecurityModel.aspx"&gt;two&lt;/a&gt;&lt;a title="JSON vs. XML: Browser Programming Models" href="http://www.25hoursaday.com/weblog/2007/01/02/JSONVsXMLBrowserProgrammingModels.aspx"&gt;reasons&lt;/a&gt; in&#xD;
the past why JSON is a better choice).  On the other hand, I can’t imagine a&#xD;
good reason to want to roll your own data format for office documents or application&#xD;
configuration files as opposed to using XML.&#xD;
&lt;/p&gt;&#xD;
FURTHER READING &#xD;
&lt;ul&gt;&lt;li&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms950805.aspx" href="http://msdn.microsoft.com/en-us/library/ms950805.aspx"&gt;The&#xD;
XML Litmus Test&lt;/a&gt; - Dare Obasanjo provides some simple guidelines for determining&#xD;
when XML is the appropriate technology to use in a software application or architecture&#xD;
design. (6 printed pages) &#xD;
&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa468558.aspx"&gt;Understanding XML&lt;/a&gt; -&#xD;
Learn how the Extensible Markup Language (XML) facilitates universal data access.&#xD;
XML is a plain-text, Unicode-based meta-language: a language for defining markup languages.&#xD;
It is not tied to any programming language, operating system, or software vendor.&#xD;
XML provides access to a plethora of technologies for manipulating, structuring, transforming&#xD;
and querying data. (14 printed pages) &#xD;
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Now Playing:&lt;/b&gt;&lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Metallica" target="_blank"&gt;Metallica&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=The God That Failed&amp;amp;artistTerm=Metallica" target="_blank"&gt;The&#xD;
God That Failed&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=SgcGZj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=SgcGZj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=tJDHYj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=tJDHYj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=H9Ug2j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=H9Ug2j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=izGTkJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=izGTkJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/324880979" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="0" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9a778e9f-da8f-40e5-a17b-f9fcd398700d" />
    <title>Some Thoughts on Google Adopting OAuth for GData APIs</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/07/02/SomeThoughtsOnGoogleAdoptingOAuthForGDataAPIs.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=9a778e9f-da8f-40e5-a17b-f9fcd398700d</id>
    <published>2008-07-02T05:52:45.374375-07:00</published>
    <updated>2008-07-02T05:52:45.374375-07:00</updated>
    <category term="Platforms" label="Platforms" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Platforms" />
    <category term="Web Development" label="Web Development" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Web+Development" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
Late last week, the folks on the Google Data APIs blog announced that &lt;a title="OAuth for Google Data APIs" href="http://googledataapis.blogspot.com/2008/06/oauth-for-google-data-apis.html"&gt;Google&#xD;
will now be supporting OAuth&lt;/a&gt; as the delegated authentication mechanism for all&#xD;
Google Data APIs. This move is meant to encourage the various online services that&#xD;
provide APIs that access a user’s data in the “cloud” to stop reinventing the wheel&#xD;
when it comes to delegated authentication and standardize on a single approach. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Every well-designed Web API that provides access to a customer’s data in the cloud&#xD;
utilizes a delegated authentication mechanism which allows users to grant 3rd party&#xD;
applications access to their data without having to give the application their username&#xD;
and password. There is a good analogy for this practice in the &lt;a href="http://oauth.net/about/"&gt;OAuth:&#xD;
Introduction page&lt;/a&gt; which is excerpted below &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;h5&gt;What is it For?&#xD;
&lt;/h5&gt;&#xD;
          &lt;p&gt;&#xD;
Many luxury cars today come with a valet key. It is a special key you give the parking&#xD;
attendant and unlike your regular key, will not allow the car to drive more than a&#xD;
mile or two. Some valet keys will not open the trunk, while others will block access&#xD;
to your onboard cell phone address book. Regardless of what restrictions the valet&#xD;
key imposes, the idea is very clever. You give someone limited access to your car&#xD;
with a special key, while using your regular key to unlock everything.&#xD;
&lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
Everyday new website offer services which tie together functionality from other sites.&#xD;
A photo lab printing your online photos, a social network using your address book&#xD;
to look for friends, and APIs to build your own desktop application version of a popular&#xD;
site. These are all great services – what is not so great about some of the implementations&#xD;
available today is their request for your username and password to the other site.&#xD;
When you agree to share your secret credentials, not only you expose your password&#xD;
to someone else (yes, that same password you also use for online banking), you also&#xD;
give them full access to do as they wish. They can do anything they wanted – even&#xD;
change your password and lock you out.&#xD;
&lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
This is what OAuth does, it allows the you the User to grant access to your private&#xD;
resources on one site (which is called the Service Provider), to another site (called&#xD;
Consumer, not to be confused with you, the User). While OpenID is all about using&#xD;
a single identity to sign into many sites, OAuth is about giving access to your stuff&#xD;
without sharing your identity at all (or its secret parts).&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
So every service provider invented their own protocol to do this, all of which are&#xD;
different but have the same basic components. Today we have &lt;a href="http://code.google.com/apis/gdata/authsub.html"&gt;Google&#xD;
AuthSub&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/auth/"&gt;Yahoo! BBAuth&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/cc287637.aspx"&gt;Windows&#xD;
Live DelAuth&lt;/a&gt;, &lt;a href="http://dev.aol.com/api/openauth"&gt;AOL OpenAuth&lt;/a&gt;, the &lt;a href="http://www.flickr.com/services/api/auth.spec.html"&gt;Flickr&#xD;
Authentication API&lt;/a&gt;, the &lt;a href="http://developers.facebook.com/documentation.php?doc=auth"&gt;Facebook&#xD;
Authentication API&lt;/a&gt; and others. All different, proprietary solutions to the same&#xD;
problem. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
This ends up being problematic for developers because if you want to build an application&#xD;
that talks to multiple services you not only have to deal with the different APIs&#xD;
provided by these services but also the different authorization/authentication models&#xD;
they utilize as well. In a world where “social aggregation” is becoming more commonplace&#xD;
with services like &lt;a href="http://www.plaxo.com/tour"&gt;Plaxo Pulse&lt;/a&gt; &amp;amp; &lt;a href="http://friendfeed.com/about/"&gt;FriendFeed&lt;/a&gt; and&#xD;
more applications are trying to bridge the desktop/cloud divide like &lt;a href="http://www.melsam.com/outsync/"&gt;OutSync&lt;/a&gt; and &lt;a title="RSS Bandit Syncs RSS Feeds Between Desktop and Google Reader" href="http://lifehacker.com/396865/rss-bandit-syncs-rss-feeds-between-desktop-and-google-reader"&gt;RSS&#xD;
Bandit&lt;/a&gt;, it sucks that these applications have to rewrite the same type of code&#xD;
over and over again to deal with the basic task of getting permission to access a&#xD;
user’s data. Standardizing on OAuth is meant to fix that. A number of startups like&#xD;
Digg &amp;amp; Twitter as well as major players like Yahoo and Google have promised to&#xD;
support it, so this should make the lives of developers easier. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Of course, we still have work to do as an industry when it comes to the constant wheel&#xD;
reinvention in the area of Web APIs. Chris Messina points to another place where every&#xD;
major service provider has invented a different proprietary protocol for doing the&#xD;
same task in his post &lt;a title="http://factoryjoe.com/blog/2008/06/04/inventing-contact-schemas-for-fun-and-profit-ugh/" href="http://factoryjoe.com/blog/2008/06/04/inventing-contact-schemas-for-fun-and-profit-ugh/"&gt;Inventing&#xD;
contact schemas for fun and profit! (Ugh)&lt;/a&gt; where he writes&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;And then &lt;/em&gt;&#xD;
            &lt;a href="http://code.google.com/apis/contacts/"&gt;&#xD;
              &lt;em&gt;there&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;&#xD;
            &lt;/em&gt;&#xD;
            &lt;a href="http://msdn.microsoft.com/en-us/library/bb463989.aspx"&gt;&#xD;
              &lt;em&gt;were&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;&#xD;
            &lt;/em&gt;&#xD;
            &lt;a href="http://developer.yahoo.com/addressbook/"&gt;&#xD;
              &lt;em&gt;three&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;br&gt;&#xD;
            &lt;em&gt;... &#xD;
&lt;br&gt;&#xD;
Today, Yahoo! &lt;/em&gt;&#xD;
            &lt;a href="http://developer.yahoo.net/blog/archives/2008/06/addressbook_api.html"&gt;&#xD;
              &lt;em&gt;announced&#xD;
the public availability&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; of their own &lt;/em&gt;&#xD;
            &lt;a href="http://developer.yahoo.com/addressbook/"&gt;&#xD;
              &lt;em&gt;Address&#xD;
Book API&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;. &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;However, I have to lament yet more needless reinvention of contact schema. Why&#xD;
is this a problem? Well, as I pointed out about Facebook’s approach to developing&#xD;
their own platform methods and formats, having to write and debug against yet another&#xD;
contact schema makes the “tax” of adding support for contact syncing and export increasingly&#xD;
onerous for sites and web services that want to better serve their customers by letting&#xD;
them host and maintain their address book elsewhere.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;This isn’t just a problem that I have with Yahoo!. It’s &lt;/em&gt;&#xD;
            &lt;a href="http://factoryjoe.com/blog/2007/11/01/hcard-for-openid-simple-registration-and-attribute-exchange/"&gt;&#xD;
              &lt;em&gt;something&#xD;
that I encountered last November&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; with the &lt;/em&gt;&#xD;
            &lt;a href="http://openid.net/specs/openid-simple-registration-extension-1_0.html"&gt;&#xD;
              &lt;abbr&gt;&#xD;
                &lt;em&gt;SREG&lt;/em&gt;&#xD;
              &lt;/abbr&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; and proposed &lt;/em&gt;&#xD;
            &lt;a href="http://www.axschema.org/types/"&gt;&#xD;
              &lt;em&gt;Attribute&#xD;
Exchange profile definition&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;. And yet again when &lt;/em&gt;&#xD;
            &lt;a href="http://googledataapis.blogspot.com/2008/03/3-2-1-contact-api-has-landed.html"&gt;&#xD;
              &lt;em&gt;Google&#xD;
announced their Contacts API&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;. And then again when &lt;/em&gt;&#xD;
            &lt;a href="http://dev.live.com/blogs/devlive/archive/2008/03/25/237.aspx"&gt;&#xD;
              &lt;em&gt;Microsoft&#xD;
released theirs&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt;! Over and over again we’re seeing better ways of fighting&#xD;
the password anti-pattern flow of inviting friends to new social services, but having&#xD;
to implement support for countless contact schemas. &lt;strong&gt;What we need is one common&#xD;
contacts interchange format and I strongly suggest that it inherit from vcard with&#xD;
allowances or extension points for contemporary trends in social networking profile&#xD;
data.&lt;/strong&gt;&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;I’ve gone ahead and whipped up a &lt;/em&gt;&#xD;
            &lt;a href="http://spreadsheets.google.com/pub?key=pSGbbhtwI4kN_nJ1GXeQ7Qg"&gt;&#xD;
              &lt;em&gt;comparison&#xD;
matrix between the primary contact schemas&lt;/em&gt;&#xD;
            &lt;/a&gt;&#xD;
            &lt;em&gt; to demonstrate the mess we’re&#xD;
in.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
Kudos to the folks at Google for trying to force the issue when it comes to standardizing&#xD;
on a delegated authentication protocol for use on the Web. However there are still&#xD;
lots of places across the industry where we speak different protocols and thus incur&#xD;
a needless burden on developers when a single language might do. It would be nice&#xD;
to see some of this unnecessary redundancy eliminated in the future. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;b&gt;Now Playing:&lt;/b&gt;&#xD;
          &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=G-Unit"&gt;G-Unit&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=I Like The Way She Do It&amp;amp;artistTerm=G-Unit"&gt;I&#xD;
Like The Way She Do It&lt;/a&gt;&lt;/p&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=hVdGbj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=hVdGbj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=IGZANj"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=IGZANj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=2OhS6j"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=2OhS6j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Carnage4life?a=ljpJOJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/Carnage4life?i=ljpJOJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/324880980" height="1" width="1"/&gt;</content>
  </entry>
  <entry>
    <link xmlns:thr="http://purl.org/syndication/thread/1.0" rel="replies" type="application/atom+xml" thr:count="33" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=4ab11c6e-6b8f-4c5e-92a8-3fd92f27abda" />
    <title>The GOOG-&gt;MSFT Exodus: Working at Google vs. Working at Microsoft</title>
    <link rel="alternate" type="text/html" href="http://www.25hoursaday.com/weblog/2008/06/29/TheGOOGMSFTExodusWorkingAtGoogleVsWorkingAtMicrosoft.aspx" />
    <id>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=4ab11c6e-6b8f-4c5e-92a8-3fd92f27abda</id>
    <published>2008-06-29T08:57:25.171-07:00</published>
    <updated>2008-06-29T21:28:36.765625-07:00</updated>
    <category term="Life in the B0rg Cube" label="Life in the B0rg Cube" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Life+in+the+B0rg+Cube" />
    <content type="html">&#xD;
        &lt;p&gt;&#xD;
Recently I’ve been bumping into more and more people who’ve either left Google to&#xD;
come to Microsoft or got offers from both companies and picked Microsoft over Google.&#xD;
I believe this is part of a larger trend especially since I’ve seen lots of people&#xD;
who left the company for “greener pastures” return in the past year (at least 8 people&#xD;
I know personally have rejoined) . However in this blog post I’ll stick to talking&#xD;
about people who’ve chosen Microsoft over Google. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
First of all there’s the post by Sergey Solyanik entitled &lt;a href="http://1-800-magic.blogspot.com/2008/06/back-to-microsoft.html"&gt;Back&#xD;
to Microsoft&lt;/a&gt; where he primarily gripes about the culture and lack of career development&#xD;
at Google, some key excerpts are &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Last week I left Google to go back to Microsoft, where I started this Monday (and&#xD;
so not surprisingly, I was too busy to blog about it) &#xD;
&lt;br&gt;&#xD;
… &#xD;
&lt;br&gt;&#xD;
So why did I leave? &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;There are many things about Google that are not great, and merit improvement.&#xD;
There are plenty of silly politics, underperformance, inefficiencies and ineffectiveness,&#xD;
and things that are plain stupid. I will not write about these things here because&#xD;
they are immaterial. I did not leave because of them. No company has achieved the&#xD;
status of the perfect workplace, and no one ever will.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;I left because Microsoft turned out to be the right place for me. &#xD;
&lt;br&gt;&#xD;
… &#xD;
&lt;br&gt;&#xD;
Google software business is divided between producing the "eye candy" - web properties&#xD;
that are designed to amuse and attract people - and the infrastructure required to&#xD;
support them. Some of the web properties are useful (some extremely useful - search),&#xD;
but most of them primarily help people waste time online (blogger, youtube, orkut,&#xD;
etc) &#xD;
&lt;br&gt;&#xD;
… &#xD;
&lt;br&gt;&#xD;
This orientation towards cool, but not necessarilly useful or essential software really&#xD;
affects the way the software engineering is done. Everything is pretty much run by&#xD;
the engineering - PMs and testers are conspicuously absent from the process. While&#xD;
they do exist in theory, there are too few of them to matter. &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;On one hand, there are beneficial effects - it is easy to ship software quickly…On&#xD;
the other hand, I was using Google software - a lot of it - in the last year, and&#xD;
slick as it is, there's just too much of it that is regularly broken. It seems like&#xD;
every week 10% of all the features are broken in one or the other browser. And it's&#xD;
a different 10% every week - the old bugs are getting fixed, the new ones introduced.&#xD;
This across Blogger, Gmail, Google Docs, Maps, and more &#xD;
&lt;br&gt;&#xD;
… &#xD;
&lt;br&gt;&#xD;
The culture part is very important here - you can spend more time fixing bugs, you&#xD;
can introduce processes to improve things, but it is very, very hard to change the&#xD;
culture. And the culture at Google values "coolness" tremendously, and the quality&#xD;
of service not as much. At least in the places where I worked. &#xD;
&lt;br&gt;&#xD;
… &#xD;
&lt;br&gt;&#xD;
The second reason I left Google was because I realized that I am not excited by the&#xD;
individual contributor role any more, and I don't want to become a manager at Google. &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;The Google Manager is a very interesting phenomenon. On one hand, they usually&#xD;
have a LOT of people from different businesses reporting to them, and are perennially&#xD;
very busy. &lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;On the other hand, in my year at Google, I could not figure out what was it they&#xD;
were doing. The better manager that I had collected feedback from my peers and gave&#xD;
it to me. There was no other (observable by me) impact on Google. The worse manager&#xD;
that I had did not do even that, so for me as a manager he was a complete no-op. I&#xD;
asked quite a few other engineers from senior to senior staff levels that had spent&#xD;
far more time at Google than I, and they didn't know either. I am not making this&#xD;
up!&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
Sergey isn’t the only senior engineer I know who  has contributed significantly&#xD;
to Google projects and then decided Microsoft was a better fit for him. Danny Thorpe &lt;a href="http://dannythorpe.com/about2/"&gt;who&#xD;
worked on Google Gears is back at Microsoft&lt;/a&gt; for his second stint working on developer&#xD;
technologies related to Windows Live.  These aren’t the only folks I’ve seen&#xD;
who’ve decided to make the switch from the big G to the b0rg, these are just the ones&#xD;
who have blogs that I can point at. &#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Unsurprisingly, the fact that Google isn’t a good place for senior developers is also&#xD;
becoming clearly evident in their interview processes. Take this post from Svetlin&#xD;
Nakov entitled &lt;a href="http://www.nakov.com/blog/2008/03/15/rejected-a-program-manager-position-at-microsoft-dublin-my-successful-interview-at-microsoft/"&gt;Rejected&#xD;
a Program Manager Position at Microsoft Dublin - My Successful Interview at Microsoft&lt;/a&gt; where&#xD;
he concludes &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;h4&gt;&#xD;
            &lt;em&gt;My Experience at Interviews with Microsoft and Google&lt;/em&gt;&#xD;
          &lt;/h4&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Few months ago I was interviewed for a software engineer in Google Zurich. If&#xD;
I need to compare Microsoft and Google, I should tell it in short: Google sux! Here&#xD;
are my reasons for this:&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;1) Google interview were not professional. It was like Olympiad in Informatics.&#xD;
Google asked me only about algorithms and data structures, nothing about software&#xD;
technologies and software engineering. It was obvious that they do not care that I&#xD;
had 12 years software engineering experience. They just ignored this. The only think&#xD;
Google wants to know about their candidates are their algorithms and analytical thinking&#xD;
skills. Nothing about technology, nothing about engineering.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;2) Google employ everybody as junior developer, ignoring the existing experience.&#xD;
It is nice to work in Google if it is your first job, really nice, but if you have&#xD;
12 years of experience with lots of languages, technologies and platforms, at lots&#xD;
of senior positions, you should expect higher position in Google, right?&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;3) Microsoft have really good interview process. People working in Microsoft are&#xD;
relly very smart and skillful. Their process is far ahead of Google. Their quality&#xD;
of development is far ahead of Google. Their management is ahead of Google and their&#xD;
recruitment is ahead of Google.&lt;/em&gt;&#xD;
          &lt;/p&gt;&#xD;
          &lt;h4&gt;&#xD;
            &lt;em&gt;Microsoft is Better Place to Work than Google&lt;/em&gt;&#xD;
          &lt;/h4&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;At my interviews I was asking my interviewers in both Microsoft and Google a lot&#xD;
about the development process, engineering and technologies. I was asking also my&#xD;
colleagues working in these companies. I found for myself that Microsoft is better&#xD;
organized, managed and structured. Microsoft do software development in more professional&#xD;
way than Google. Their engineers are better. Their development process is better.&#xD;
Their products are better. Their technologies are better. Their interviews are better.&#xD;
Google was like a kindergarden - young and not experienced enough people, an office&#xD;
full o