<?xml version="1.0" encoding="utf-8"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://garrettsmith.net/blog/">
<title>Form Follows Function</title>
<link>http://garrettsmith.net/blog/</link>
<description>Garrett Smith&apos;s comment on practical software</description>
<dc:creator></dc:creator>
<dc:date>2007-10-09T07:04:14-06:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.2" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2007/10/the_office.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2007/02/ignored_tests_a.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/11/time_to_go_home_1.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/11/please_find_pos_1.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/10/agile_is_a_means.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/09/you_know_youre.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/06/mono_a_solution.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/03/is_your_project.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/02/your_blog_isnt_1.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/02/republicans_buy.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/02/xml_when_to_use_1.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/01/a_great_blog_in.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/01/3_truths_of_all.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/01/the_definition.html" />
<rdf:li rdf:resource="http://garrettsmith.net/blog/archives/2006/01/microsoft_inven_1.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://garrettsmith.net/blog/archives/2007/10/the_office.html">
<title>The Office</title>
<link>http://garrettsmith.net/blog/archives/2007/10/the_office.html</link>
<description><![CDATA[<p>I've had an office a few times in my career but recently I got <strong>the</strong> office.</p>

<p>It was a sign of status, a symbol that I was one of the heavies at the firm.</p>

<p>A former boss even strolled in, checked the room out, and said "wow, nice pad."  Unsaid was that it was better than his.</p>

<p>Good, right?</p>

<p>No!</p>

<p>Offices put barriers -- real and imagined -- to communication with the rest of the department.  In the just 5 days I've been in the isolation chamber called an office there have been a handful of incidents that just would not have happend had I been sitting on the floor.  My favorite is when a colleague sent me an IM asking if he could come in and ask a question!</p>

<p><a href="http://www.burningdoor.com/askthewizard/2007/09/no_offices.html">Feedburner founder Dick Costolo remarks</a> why an open floor plan (without offices) is preferred.  Agilists like their software team to be seated in a common area where people can comingle and communicate without barriers.</p>

<p>I wholeheartedly agree.  I'm an Agilist, and will leave the office for the team area.<br />
</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2007-10-09T07:04:14-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2007/02/ignored_tests_a.html">
<title>Ignored test are OK; too many ignored tests too long are a smell</title>
<link>http://garrettsmith.net/blog/archives/2007/02/ignored_tests_a.html</link>
<description><![CDATA[<p>I'm sometimes startled by zealots that insist that tests should never be ignored.  Ignored tests are OK; too many ignored tests or long-ignored tests are <a href="http://c2.com/xp/CodeSmell.html">a smell</a>.</p>

<p>Tests marked as ignored are very useful: they remind you of work you need to do and allow you to check in work-in-progress without breaking <a href="http://www.martinfowler.com/articles/continuousIntegration.html">the build</a>.</p>

<p>The number of ignored tests is directly proportional to your code volatility.  The greater the amount of work being done on your codebase the greater number of ignored tests are to be expected.</p>

<p><img alt="ignore1.GIF" src="http://garrettsmith.net/blog/archives/ignore1.GIF" width="498" height="345" /></p>

<p>This implies that as you approach the end of your project ignroed tests should decrease.  After the system is feature complete there should be very few ignored tests.  Before going into production all tests should be enabled.</p>

<p><img alt="" src="http://garrettsmith.net/blog/archives/ignore2.GIF" width="518" height="263" /></p>

<p><strong>Long-Ignored Tests Are A Smell</strong></p>

<p>Tests that have been ignored for more than a few days are a smell.  Obsolete tests, unclear requirements, or just bad code hygene will lead to long-ignored tests.</p>

<p>To combat this I put the date on which I ignored the tests in the Ignore attribute and give precidence to those tests that have been left alone the longest.</p>

<p><code>[Test]<br />
[Ignore("Garrett: 20 Dec. waiting for requirements on final file format")]<br />
public void ValidateOutputFileFormat() ...</code></p>

<p><strong>Too Many Ignored Tests Are A Smell</strong></p>

<p>If a large refactoring or requirements change requires a huge number of tests to be ignored it is typically a sign of either two things: tests which test the implementation rather than the contract of a class (behavioral mocking is a big culprit here) or tests which are not fine-grained enough.</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2007-02-07T07:16:07-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/11/time_to_go_home_1.html">
<title>Time to go home?  Leave a broken test</title>
<link>http://garrettsmith.net/blog/archives/2006/11/time_to_go_home_1.html</link>
<description><![CDATA[<p>I often have to take a few minutes at the beginning of each day to remember where I left off yesterday.  I've tried things like leaving a note to myself to remind me of the details of my work in progress.</p>

<p>The most effective thing I've found, though, is leaving a broken test.</p>

<p>It's simple and effective if you're test-driving code.  For example, let's say I'm writing a class that encapsulates whether a password meets a password policy.  I'm hungry, tired and want to go home in time to go for a run:</p>

<pre>
[Test]
public void ValidPasswordMustHaveANumber()
{
    Password password = new Password( "PasswordWithNoNumber" );

<p>    Assert.IsFalse( validator.IsValid( password ), "passwords without a number are invalid" );<br />
}</pre></p>

<p>When I come in the next morning I'll run the tests and see:<br />
Assertion failed: passwords without a number are invalid.</p>

<p>Then I'll remember where I left the previous day.</p>]]></description>
<dc:subject>Politics</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-11-07T07:50:05-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/11/please_find_pos_1.html">
<title>Please Find Posted This Blog Entry</title>
<link>http://garrettsmith.net/blog/archives/2006/11/please_find_pos_1.html</link>
<description><![CDATA[<p>A poorly constructed and tired phrase in email writing is:</p>

<blockquote>“<em>Please find attached</em> the document that you requested…”</blockquote>

<p>This phrase is verbose, passive, and imprecise.  Strunk and White cringe every time it is used.</p>

<p>It is imprecise: Who attached the document?  You?  Me? The Document Fairy?  The phrase doesn't convey the actor.</p>

<p>It is <a href="http://www.bartleby.com/141/strunk5.html#13">verbose</a>: The alternative, “I’ve attached,” is shorter.</p>

<p>It is <a href="http://www.bartleby.com/141/strunk5.html#11">passive</a>: It uses third person passive voice.</p>

<p>Don’t use this phrase.  Replace it with the straightforward and concise “<em>I’ve attached</em> the document…”  It should be included in chapter 5 of the next edition of <u><a href="http://www.bartleby.com/141/">Elements of Style</a></u>.</p>]]></description>
<dc:subject>General</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-11-01T07:48:42-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/10/agile_is_a_means.html">
<title>Agile is a means to an end, not the end itself</title>
<link>http://garrettsmith.net/blog/archives/2006/10/agile_is_a_means.html</link>
<description><![CDATA[<p>Agile software practices are a tool.  They're a means to an end, not an end themselves.</p>

<p>The goal of any project team is delivering business functionality with high quality and low cost.  The manner in which you achieve these goals varies depending on the people you have on the team, the company's management structure and style, and the project's goals.</p>

<p>Just because the team is pair programming, adaptively planning, and driving development with tests does not mean it will achieve the business goal.  If the team is programming solo and doing big up front design it does not mean the team will fail.</p>

<p>I advocate Agile practices; they are generally a better way to get software written.</p>

<p>Too often, however, Agile zealots insist that their ideas on how a project should be run <strong>must</strong> be unquestionably followed.  They disregard the client's wishes, processes and management style.  They do not consider the team members' abilities and wishes.</p>

<p>These zealots end up damaging the project more than they help.  They strain relationships with the client and are too quick to change project practices.</p>

<p>Remember, you must always ask yourself: is this practice I am suggesting going to allow us to deliver more business value faster, cheaper, and with better quality?  If the answer is yes, then talk to your teammates about making the change.</p>

<p>If they aren't appropriate, don't advocate the practice just because "it is Agile."</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-10-31T07:14:54-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/09/you_know_youre.html">
<title>You know you&apos;re a programmer when...</title>
<link>http://garrettsmith.net/blog/archives/2006/09/you_know_youre.html</link>
<description><![CDATA[<p>You refuse to get up before 8 a.m., even for a billion dollar business deal.  From <a href="http://online.wsj.com/article/SB115880835590769754.html?mod=home_whats_news_us">today's Wall Street Journal</a>, about Microsoft potentially buying Facebook.com for as much as $1 billion:</p>

<blockquote>During one series of talks with Microsoft, Facebook executives told their Microsoft peers they couldn't do an 8 a.m. conference call because the company's 22-year-old founder and chief executive, Harvard dropout Mark Zuckerberg, wouldn't be awake, says a person familiar with the talks. Microsoft executives were incredulous.</blockquote>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-09-21T15:37:14-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/06/mono_a_solution.html">
<title>Mono: A solution looking for a commercial problem</title>
<link>http://garrettsmith.net/blog/archives/2006/06/mono_a_solution.html</link>
<description><![CDATA[<p>The biggest thing holding back open source software is that it is <strong>engineering driven</strong> rather than <strong>market driven</strong>.  A great example of this is <a href="http://www.mono-project.com/Main_Page">Mono</a>.</p>

<p>Mono is, succinctly, a solution that is searching for a commercial problem to solve.</p>

<p>The features that differentiate Mono from Microsoft .NET are being cross-platform, being free (as in beer), and being open.  Java beats Mono handily in the first two categories.  For the third, Java is open source but not free software.  Few care about that distinction.</p>

<p>If an organization is looking for a cross-platform development environment they're going to go with Java.  The tool set is more mature, language better supported, and the accompanying documentation far more extensive.</p>

<p>If a company wants .NET they'll use Microsoft's implementation.  Microsoft has a 2-3 year lead in development.  Mono is incomplete and buggy.</p>

<p>Both Java and .NET enjoy the support of large corporations, whereas Mono gets only ancillary support from Novell.</p>

<p>This leaves Mono as little more than a research project for developers.  I'm sure many small organizations use Mono.<br />
They probably selected Mono because the techie-in-chief thought it would be cool or as a anti-Microsoft gesture.</p>

<p>Indeed, Mono admits as much on <a href="http://www.mono-project.com/FAQ:_General">its Web site</a>:</p>

<blockquote>Question: Aren't you just copying someone else's work?<br />
Answer: We are interested in providing the best tools for programmers to develop applications for Free Operating Systems.</blockquote>

<p>In the commercial world Mono would have been correctly abandoned a long time ago in favor of a product that actually serves an unmet need.  In the open source world we have a solution to very few people's problems.</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-06-23T10:08:58-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/03/is_your_project.html">
<title>Is your project agile?</title>
<link>http://garrettsmith.net/blog/archives/2006/03/is_your_project.html</link>
<description><![CDATA[<p>To determine if your project is agile answer these questions with a yes or no:</p>

<ol>
<li>Is project progress measured by the delivery of working software?</li>
<li>Does the software have extensive automated unit test coverage?</li>
<li>Are there multiple integration builds per day that include compilation, unit testing, functional testing and deployment steps?</li>
<li>Is there a high degree of direct involvement by the business during the development process?</li>
<li>Is the development effort driven by acceptance tests?</li>
<li>Do developers spend most of their time collaborating?</li>
<li>Are planning, analysis, architecture, development, and QA all performed continuously?</li>
<li>Is there a recently built running system available at all times?</li>
<li>Is development work delivered in fine-grained units of no more than one month?</li>
</ol>

<p>An agile project should answer "yes" to almost every question.</p>

<p>Thanks to Derek Walsh and the Australian ThoughtWorkers for the questions; I've edited their original version.</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-03-01T10:07:06-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/02/your_blog_isnt_1.html">
<title>Your blog isn&apos;t worth as much as you think</title>
<link>http://garrettsmith.net/blog/archives/2006/02/your_blog_isnt_1.html</link>
<description><![CDATA[<p>I've noticed several prominent bloggers using the <a href="http://www.business-opportunities.biz/projects/how-much-is-your-blog-worth/">"How Much Is My Blog Worth"</a> tool.  This engine is a good example of a common economic fallacy: accepting appraisals uncritically.</p>

<p>Valuation of many things: homes, companies, even things as simple as jewelry, is difficult.  It can be summarized in one simple axiom, though: <strong>something is worth exactly what someone else is willing to pay</strong>.  It's isn't worth any more.</p>

<p>If you can't find a buyer for something at its appraised value then that appraised value is wrong.</p>

<p>So -- to pick on a random blog -- <a href="http://randomurl.com/archives/2005/10/25/656/">RandomURL</a> is listed as being worth $20,888.  Is it really worth 21 grand?</p>

<p>Probably not.  Someone would have to be willing to part with a new car's worth of cash for this valuation to be accurate.</p>

<p><a href="http://www.tnl.net/blog/entry/Doing_the_numbers_on_the_AOL-WeblogsInc_deal">The research behind the blog valuation</a> is based on the $25 million purchase of Weblogs, Inc., and appears to extrapolate down based on links within blogs.</p>

<p>The best appraisals are based on <em>comparable</em> sales.  In real estate, for example, if you can find a house similar to yours its recent sale price is a good estimate of your home.  Restated generally, two parties just exchanged something very similar to yours.  You can probably find a buyer for a similar price.  (The new site <a href="http://zillow.com/">Zillow</a> will value your home using this method.)</p>

<p>In this case, the study's author is comparing a $25 million sale of a corporation with a (usually) one-man Web site whose actual worth is on the order of, at best, thousands of dollars.  The values are widely divergent and the two entities are different.  It means the study is fatally flawed.</p>

<p>A better appraisal would be based on someone's one-man blog being bought for cash.  Does anyone know of such a transaction?  If you do, post a comment or email me.</p>

<p>Finally, it's very difficult to transfer the value of a blog because a blog's worth is dependent on the author's ability to continue to attract an audience.  If the site is sold, why would the author continue to write?  They no longer own the site.  If a blog author wanted to get cash from their site they would be best off advertising.</p>]]></description>
<dc:subject>General</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-02-14T09:15:04-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/02/republicans_buy.html">
<title>&quot;Republicans Buy Shoes Too&quot;</title>
<link>http://garrettsmith.net/blog/archives/2006/02/republicans_buy.html</link>
<description><![CDATA[<p>There's an apocryphal story that goes like so:</p>

<p>Michael Jordan had just been drafted into the NBA; everyone knew he would be a big player.  He had signed a shoe endorsement contract with Nike.</p>

<p>Strom Thurmond, the deeply reactionary Senator from South Carolina was up for reelection.  Jordan grew up and went to school in neighboring North Carolina.</p>

<p>A reporter asked Jordan why he didn't use his fame and speak out for Thurmond's opponent, whose politics were more in line with Jordan's.  Mike replied:</p>

<blockquote>"Republicans buy shoes too."</blockquote>

<p>He didn't want to lose fans because of his taking controversial issues public.</p>

<p>The moral of the story is that you alienate customers by expressing partisan sentiment versus being demure.</p>]]></description>
<dc:subject>General</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-02-13T10:50:50-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/02/xml_when_to_use_1.html">
<title>XML: When to use it and when not to use it</title>
<link>http://garrettsmith.net/blog/archives/2006/02/xml_when_to_use_1.html</link>
<description><![CDATA[<p>XML is overused.</p>

<p>I'm not sure why.  I suspect it is because that XML is standardized and because of the prevalent attitude that all things with a W3C standard are good.</p>

<p>However, there are many times XML is selected to represent data or (worse) behavior where that selection is a poor decision.  The best examples of this mistake are programming languages that are XML: <a href="http://ant.apache.org/">Ant</a>, <a href="http://nant.sourceforge.net/">NAnt</a>, <a href="http://www.w3.org/Style/XSL/">XSLT</a>, and <a href="http://www.w3.org/TR/voicexml20/">VoiceXML</a>, for a few.</p>

<p>XML is verbose and puts awkward constraints on syntax. The strained syntax in VoiceXML is an illustration. Writing VoiceXML -- something I've spent much time doing -- is tedious and error prone.  If you want a simple if/then/else construct, you need to type &lt;if&gt; … &lt;elseif /&gt; ... &lt;else /&gt; ... &lt;/if&gt;.  The result <a href="http://www.w3.org/TR/voicexml20/#dml5.3.4">looks more like hieroglyphics</a> than readable code.</p>

<p>The VoiceXML creators could have delivered all the same features by just making it an extension of an existing language.  Developers wouldn’t have to learn a new syntax and wouldn’t give themselves Carpal Tunnel syndrome from typing all those <, >, and / characters.</p>

<p>Another particularly odious example is passing complex data structures as method parameters. I've now run into several organizations that have as a corporate standard architecture that you create an XML document to pass to another logical layer.</p>

<p>I'm not talking about using Web Services or passing data across process boundaries -- I'm talking about passing, say, three strings in an XML document -– <code>doSomething( Document document )</code> -- rather than declaring a method <code>doSomething( string foo, string bar, string baz )</code>.  <a href="http://www.onyx.com/products/xml.asp">Onyx's CRM platform</a> uses this antipattern as their integration framework.</p>

<p>This is such a bad idea I don't know where to start.  For one, when you encode things in XML, you lose type.  You need to write logic that encodes your parameters in XML and then more to unencode the parameters from within the target method.  The extra statements obscure your code.</p>

<p>All this for no benefit that I can percieve.</p>

<p>XML is chosen for two main reasons, one good and one dubious.</p>

<p>The first reason -- and a good one -- is that there are numerous stable XML parsers. Free, readily available tool support is a good reason to select a technology, but it doesn't override all other concerns.</p>

<p>The dubious reason people select XML is because it is standard and allegedly non-proprietary.  XML is so weakly typed and amorphous that its ultimate definition is proprietary. Microsoft Visio <a href="http://www.microsoft.com/office/xml/default.mspx">saves diagrams to XML</a>, but that specific format is proprietary. It is solely owned and controlled by Microsoft.</p>

<p>To sum things up, here are some general rules on when and when not to use XML:</p>

<ul>
<li>If you're representing logical statements -- a programming language -- <strong>never use XML</strong>.</li>
<li>If you need only simple, non-hierarchical data representation, <strong>don't use XML</strong>.</li>
<li>If you need complex data represented externally to your program (to a human or another unrelated system), <strong>consider XML</strong>. If you do select XML, unit test the logic that persists and retrieves it well. </li>
<li>If you need complex data represented only internally to your system, <strong>bias your decision away from XML</strong>. In Java and .NET, for example, you can binary serialize your object graph.  Performance is better and you don’t have to write as much code.</li>
<li>Finally, if you're looking at some other application I haven't mentioned above, carefully consider the pros and cons of using XML.  In general, the positives of XML are too strongly weighted and the negatives overlooked.</li>
</ul>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-02-11T08:34:57-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/01/a_great_blog_in.html">
<title>A Great Blog: Intentional Software</title>
<link>http://garrettsmith.net/blog/archives/2006/01/a_great_blog_in.html</link>
<description><![CDATA[<p>James Taranto correctly writes that "what the Web most needs is editing."  We techies would say the Web's signal-to-noise ratio is low.</p>

<p>A strong signal in that noise is <a href="http://blog.intentsoft.com/">Intentional Software's blog</a>, which contains items by Charles Simonyi and his colleagues on computer science.  Simonyi is the former Microsoft Chief Architect, a title which Bill Gates now holds.</p>

<p>The blog is insightful, well written, and delightfully low traffic. </p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-01-23T09:08:55-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/01/3_truths_of_all.html">
<title>3 Truths of All Software Projects</title>
<link>http://garrettsmith.net/blog/archives/2006/01/3_truths_of_all.html</link>
<description><![CDATA[<ol>
<li>You cannot specify all the system requirements at the beginning of the project.</li>
<li>The system requirements will change.</li>
<li>There are always more requirements than time and resources to complete them.</li>
</ol>

<p>Credit goes to Jonathan Rasmusson.<br />
</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-01-19T01:42:42-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/01/the_definition.html">
<title>The definition of irony...</title>
<link>http://garrettsmith.net/blog/archives/2006/01/the_definition.html</link>
<description><![CDATA[<p>...is going to a political rally and <a href="http://www.troutsoup.com/photos/dubya/feb15_protest21">carrying a placard that says</a>:</p>

<blockquote>"A village in Texas is missing it's idiot."</blockquote>

<p>Is it asking too much to use correct spelling and grammar when calling someone else an idiot?<br />
</p>]]></description>
<dc:subject>General</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-01-17T01:30:36-06:00</dc:date>
</item>
<item rdf:about="http://garrettsmith.net/blog/archives/2006/01/microsoft_inven_1.html">
<title>Microsoft invented Ajax: Let&apos;s give credit where it&apos;s due</title>
<link>http://garrettsmith.net/blog/archives/2006/01/microsoft_inven_1.html</link>
<description><![CDATA[<p>It isn't very hip to compliment Microsoft these days.</p>

<p>There are many manifestations of this bias, but none more aggravating to me than to whom the credit for Ajax goes.  For example, in Lee Gomes' much discussed <a href="http://online.wsj.com/article/SB113451903258321757-search.html?KEYWORDS=portals+language&COLLECTION=wsjie/6month"><em>Wall Street Journal</em> article on programming languages</a>, he says:</p>

<blockquote>"Both Ruby on Rails and Ajax were developed by small software-consulting companies eager to let the world know about their skills."</blockquote>

<p>This is simply wrong about Ajax.</p>

<p>There is also this <a href="http://economist.com/displaystory.cfm?story_id=S%27%28H%20%2CPQ3%25%23P%21%23%0A&tranMode=none">quotation from Mitchell Baker</a>, the Mozilla chief, in <em>The Economist</em>. The context of the statment is Firefox's contribution to Ajax innovation.</p>

<blockquote>"Web 2.0 could have happneded a lot earlier, if Microsoft had not had a monopoly for a decade."</blockquote>

<p>What chutzpah!</p>

<p><strong>Microsoft invented Ajax in 1999</strong>.  It just took the rest of the software world 6 years to catch up.  I've developed a brief timeline at the end of this post.</p>

<p>The two key technologies for Ajax – the ability to modify HTML on the client side and the ability to initiate and capture an asynchronous HTTP request – were introduced in Internet Explorer in 1997 and 1999, respectively.  Outlook Web Access was the first product that I know of to use both heavily.</p>

<p>It took about 5 years for Safari 1.2 and 6 years for Opera 8 to implement XMLHttpRequest or a XMLHttpRequest-like API.  Firefox didn't have a production release until 2002.</p>

<p>Once the non-IE browsers caught up developers could now use asynchronous requests to spruce up their Web apps and still have it work in multiple browsers.  Ajax development became more affordable, and, therefore, more popular.  Prominent and very well-designed sites like Google Maps and GMail made users and developers aware of what is possible.</p>

<p>Finally -- 6 years later -- Jesse James Garrett of Adaptive Path <a href="http://www.adaptivepath.com/publications/essays/archives/000385.php">coined a catchy phrase</a>: the term Ajax was born.</p>

<p>Ajax is popular now because using asynchronous requests in Web apps is affordable and well-known sites use it.  Libraries like <a href="http://prototype.conio.net/">Prototype</a> smooth over the browser-specific API wrinkles even further to make life easier.</p>

<p>Make no bones about it: the fundamental innovation behind Ajax was created by Microsoft.  Let’s give credit where credit is due.</p>

<p>Ajax Timeline:<br />
<ul><li>1997 – IE 4.0 introduces ability to modify the UI via the DOM and client-side script</li><br />
<li>1998, 2000, and 2004 – W3C releases or updates standards on the DOM</li><br />
<li>1999 – Internet Explorer includes XMLHttpRequest</li><br />
<li>2002 – First production Firefox release</li><br />
<li>2004 – Safari 1.2 released with XMLHttpRequest support.</li><br />
<li>2004 – Google Maps, GMail, and other popular Web apps demonstrate great UI design with AJAX</li><br />
<li>2005 – Opera 8 released with XMLHttpRequest support</li><br />
<li>2005 – Adaptive Path coins the term AJAX and makes it popular</li></ul></p>

<p>Sources: Wikipedia, Adaptive Path, MSDN</p>]]></description>
<dc:subject>Software</dc:subject>
<dc:creator>gsmith</dc:creator>
<dc:date>2006-01-10T01:13:35-06:00</dc:date>
</item>


</rdf:RDF>