<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" 
    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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel>
    <title>Gadgetopia: Programming and Web Development</title>
    <link>http://www.gadgetopia.com/Categories/Programming and Web Development.html</link>
    <description>This is a sub-feed of the main Gadgetopia RSS feed. This feed displays entries from the "Programming and Web Development" category.  The main Gadgetopia feed is available at http://www.gadgetopia.com/index.xml.</description>
    <dc:language>en-us</dc:language>
    <dc:creator>deane@deanebarker.net</dc:creator>
    <dc:rights>Copyright 2008</dc:rights>
    <dc:date>2008-07-14T07:55:41-06:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.35" />
    <admin:errorReportsTo rdf:resource="mailto:deane@deanebarker.net"/>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>


    <item>
      <title>Why We Like to Write Frameworks</title>
      <link>http://gadgetopia.com/post/6466</link>
      <description><![CDATA[<p><a title="I'll get to your application in a minute - First, we need to build the framework : Jeffrey Palermo (.com)" href="http://jeffreypalermo.com/blog/i-ll-get-to-your-application-in-a-minute-first-we-need-to-build-the-framework/">I&#8217;ll get to your application in a minute - First, we need to build the framework</a>: Probably the best description I&#8217;ve read explaining why programmers <em>love</em> to write frameworks.</p>

<blockquote>
  <p>I [&#8230;] have encountered the common mindset of falling from application mode into framework mode.  I find it&#8217;s common with really smart programmers who take pride in their technical ability.  Creating frameworks is fun because the programmer is the customer of the framework.  Writing software for yourself can be more fun than writing software for someone else.  Writing a framework is writing software for yourself.  On a client&#8217;s dime, this is typically not acceptable.</p>
</blockquote>

<p>I love writing frameworks.  It&#8217;s intoxicating, I think, because you&#8217;re not solving a single problem.  Instead, you&#8217;re writing something to solve more than one problem at a time, which is efficient.</p>
]]></description>
      <guid isPermaLink="false">6466@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="I'll get to your application in a minute - First, we need to build the framework : Jeffrey Palermo (.com)" href="http://jeffreypalermo.com/blog/i-ll-get-to-your-application-in-a-minute-first-we-need-to-build-the-framework/">I&#8217;ll get to your application in a minute - First, we need to build the framework</a>: Probably the best description I&#8217;ve read explaining why programmers <em>love</em> to write frameworks.</p>

<blockquote>
  <p>I [&#8230;] have encountered the common mindset of falling from application mode into framework mode.  I find it&#8217;s common with really smart programmers who take pride in their technical ability.  Creating frameworks is fun because the programmer is the customer of the framework.  Writing software for yourself can be more fun than writing software for someone else.  Writing a framework is writing software for yourself.  On a client&#8217;s dime, this is typically not acceptable.</p>
</blockquote>

<p>I love writing frameworks.  It&#8217;s intoxicating, I think, because you&#8217;re not solving a single problem.  Instead, you&#8217;re writing something to solve more than one problem at a time, which is efficient.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-07-14T07:55:41-06:00</dc:date>
    </item>

    <item>
      <title>Programmer Competency Matrix</title>
      <link>http://gadgetopia.com/post/6452</link>
      <description><![CDATA[<p><a title="" href="http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm">Programmer Competency Matrix</a>: This page presents a matrix of programmer skills and what it requires to be at different levels, 1-4, from novice to master.</p>

<p>For instance, for &#8220;data structures,&#8221; it outlines the following levels:</p>

<ol>
<li>Doesn&#8217;t know the difference between Array and LinkedList</li>
<li>Able to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasks</li>
<li>Knows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc.</li>
<li>Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.</li>
</ol>

<p>I picked &#8220;data structures&#8221; specifically for good reason: <em>I still don&#8217;t know what a LinkedList is.</em>  I&#8217;ve always wondered, but I truly do not know.  I&#8217;ve talked to Joe about it, and he claims I do actually know what they are and have used them, but since I have no formal training in computer science (I was going to be a lawyer, after all), I just don&#8217;t know one when I see it.</p>

<p>I looked through the entire list, and I average about the second level (level 1, because the levels are 0-based).  That was a little humbling, but there are two points that are important to acknowledge here:</p>

<ol>
<li><p>I score much higher on some things than others.  For instance, I&#8217;m probably at level 3 for &#8220;version control,&#8221; level 4 for &#8220;communication,&#8221; and level 3-4 for &#8220;code organization.&#8221;  </p>

<p>Thankfully, besides than one blip on &#8220;data structures, &#8221; I don&#8217;t think I&#8217;m a complete novice for anything else (maybe &#8220;systems programming,&#8221; just because I&#8217;m not 100% clear on the difference between a &#8220;linker&#8221; and an &#8220;interpreter&#8221;).</p></li>
<li><p>This list is designed for pure programmers.  If it was designed around Web development, I&#8217;d score much differently.  Web development encompasses a wider variety of skills (both code and human-oriented), and it keeps you more superficial inside them.  The reason I don&#8217;t know what a LinkedList is, for instance, is because I&#8217;m abstracted far enough away from C that I haven&#8217;t had to use them &#8212; there are usually three or four layers between me and the core implementation.</p></li>
</ol>

<p>Even if these lists are totally arbitrary and just one guy&#8217;s opinion, they&#8217;re still valuable because they help you learn what you don&#8217;t know.  If I really want to bone up on some aspects of programming, this matrix gives me a good roadmap of where to go.</p>
]]></description>
      <guid isPermaLink="false">6452@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="" href="http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm">Programmer Competency Matrix</a>: This page presents a matrix of programmer skills and what it requires to be at different levels, 1-4, from novice to master.</p>

<p>For instance, for &#8220;data structures,&#8221; it outlines the following levels:</p>

<ol>
<li>Doesn&#8217;t know the difference between Array and LinkedList</li>
<li>Able to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasks</li>
<li>Knows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc.</li>
<li>Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.</li>
</ol>

<p>I picked &#8220;data structures&#8221; specifically for good reason: <em>I still don&#8217;t know what a LinkedList is.</em>  I&#8217;ve always wondered, but I truly do not know.  I&#8217;ve talked to Joe about it, and he claims I do actually know what they are and have used them, but since I have no formal training in computer science (I was going to be a lawyer, after all), I just don&#8217;t know one when I see it.</p>

<p>I looked through the entire list, and I average about the second level (level 1, because the levels are 0-based).  That was a little humbling, but there are two points that are important to acknowledge here:</p>

<ol>
<li><p>I score much higher on some things than others.  For instance, I&#8217;m probably at level 3 for &#8220;version control,&#8221; level 4 for &#8220;communication,&#8221; and level 3-4 for &#8220;code organization.&#8221;  </p>

<p>Thankfully, besides than one blip on &#8220;data structures, &#8221; I don&#8217;t think I&#8217;m a complete novice for anything else (maybe &#8220;systems programming,&#8221; just because I&#8217;m not 100% clear on the difference between a &#8220;linker&#8221; and an &#8220;interpreter&#8221;).</p></li>
<li><p>This list is designed for pure programmers.  If it was designed around Web development, I&#8217;d score much differently.  Web development encompasses a wider variety of skills (both code and human-oriented), and it keeps you more superficial inside them.  The reason I don&#8217;t know what a LinkedList is, for instance, is because I&#8217;m abstracted far enough away from C that I haven&#8217;t had to use them &#8212; there are usually three or four layers between me and the core implementation.</p></li>
</ol>

<p>Even if these lists are totally arbitrary and just one guy&#8217;s opinion, they&#8217;re still valuable because they help you learn what you don&#8217;t know.  If I really want to bone up on some aspects of programming, this matrix gives me a good roadmap of where to go.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-06-30T12:18:28-06:00</dc:date>
    </item>

    <item>
      <title>Reddit Goes Open-Source</title>
      <link>http://gadgetopia.com/post/6440</link>
      <description><![CDATA[<p><a title="blog.reddit -- what's new on reddit: reddit goes open source" href="http://blog.reddit.com/2008/06/reddit-goes-open-source.html">reddit goes open source</a>: Reddit has open-sourced their codebase.  I think it&#8217;s written in&#8230;Lisp?</p>

<blockquote>
  <p>Today we&#8217;re excited to announce that we&#8217;re open sourcing reddit. We&#8217;ve always strived to be as open and transparent with our users as possible, and this is the next logical step. When we say &#8216;open-source&#8217; we mean specifically that the code behind reddit is available to the public for download, and we&#8217;re inviting the public to submit code to help improve the site.</p>
</blockquote>
]]></description>
      <guid isPermaLink="false">6440@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="blog.reddit -- what's new on reddit: reddit goes open source" href="http://blog.reddit.com/2008/06/reddit-goes-open-source.html">reddit goes open source</a>: Reddit has open-sourced their codebase.  I think it&#8217;s written in&#8230;Lisp?</p>

<blockquote>
  <p>Today we&#8217;re excited to announce that we&#8217;re open sourcing reddit. We&#8217;ve always strived to be as open and transparent with our users as possible, and this is the next logical step. When we say &#8216;open-source&#8217; we mean specifically that the code behind reddit is available to the public for download, and we&#8217;re inviting the public to submit code to help improve the site.</p>
</blockquote>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-06-18T14:26:57-06:00</dc:date>
    </item>

    <item>
      <title>Ding Dirk Bang Splat</title>
      <link>http://gadgetopia.com/post/6427</link>
      <description><![CDATA[<p><a title="Coding Horror: ASCII Pronunciation Rules for Programmers" href="http://www.codinghorror.com/blog/archives/001133.html">ASCII Pronunciation Rules for Programmers</a>: Here&#8217;s a great post with a reference to the odd names we have for various ASCII characters.</p>

<p>Quick, what is a &#8220;bracket&#8221;?  Is it a &#8220;&lt;&#8221; or a &#8220;[&#8221; or a &#8220;{&#8220;?</p>

<p>What is a &#8220;bang&#8221;?  The odds of you knowing that one goes up proportionately with the amount of time you spend on a command line.</p>

<blockquote>
  <p>What the heck is an octothorpe? I know this as the pound key, but that turns out to be a US-centric word; most other cultures know it as the hash key.</p>
  
  <p>I&#8217;m often surprised to hear what other programmers name their ASCII characters. Not that the words I personally use to identify my ASCII characters are any more correct, but there&#8217;s far more variability than you&#8217;d expect considering the rigid, highly literal mindset of most programmers. </p>
</blockquote>

<p>When you want someone to type a UNC name, do you ever go &#8220;Go to &#8216;Start&#8217;, then &#8216;Run&#8217;, then type &#8216;whack whack&#8230;&#8217;&#8221;?</p>
]]></description>
      <guid isPermaLink="false">6427@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Coding Horror: ASCII Pronunciation Rules for Programmers" href="http://www.codinghorror.com/blog/archives/001133.html">ASCII Pronunciation Rules for Programmers</a>: Here&#8217;s a great post with a reference to the odd names we have for various ASCII characters.</p>

<p>Quick, what is a &#8220;bracket&#8221;?  Is it a &#8220;&lt;&#8221; or a &#8220;[&#8221; or a &#8220;{&#8220;?</p>

<p>What is a &#8220;bang&#8221;?  The odds of you knowing that one goes up proportionately with the amount of time you spend on a command line.</p>

<blockquote>
  <p>What the heck is an octothorpe? I know this as the pound key, but that turns out to be a US-centric word; most other cultures know it as the hash key.</p>
  
  <p>I&#8217;m often surprised to hear what other programmers name their ASCII characters. Not that the words I personally use to identify my ASCII characters are any more correct, but there&#8217;s far more variability than you&#8217;d expect considering the rigid, highly literal mindset of most programmers. </p>
</blockquote>

<p>When you want someone to type a UNC name, do you ever go &#8220;Go to &#8216;Start&#8217;, then &#8216;Run&#8217;, then type &#8216;whack whack&#8230;&#8217;&#8221;?</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-06-12T08:26:00-06:00</dc:date>
    </item>

    <item>
      <title>Invalid Markup Ain&apos;t So Bad</title>
      <link>http://gadgetopia.com/post/6419</link>
      <description><![CDATA[<p><a title="Thought experiment [dive into mark]" href="http://diveintomark.org/archives/2004/01/14/thought_experiment">Thought experiment</a>: Mark Pilgrim goes on a quick rant about how having Web clients demand valid XHTML is a bad idea.</p>

<blockquote>
  <p>The client is the wrong place to enforce data integrity. It’s just the wrong place. I hear otherwise intelligent people claim that &#8220;if everyone did it, it would be okay.&#8221; No, if everyone did it, it would be even worse. If you want to do it, of course I can’t stop you. But think about who it will hurt.</p>
</blockquote>

<p>He illustrates with a good story about a problem Nick Bradbury had related to it.   It&#8217;s worth reading.</p>

<p>I agree with with him.  In fact, I <a href="http://gadgetopia.com/post/2453">wrote this</a> almost exactly four years ago.</p>

<blockquote>
  <p>But, in an even larger sense, does validation matter much? I’ve never gotten any comment from anyone about the validation of this site. So what that I’m throwing 50 errors because of ampersands in URLs &#8212; can someone provide me with a valid (excuse the pun) reason why this matters?</p>
  
  <p>I understand problems can occur from gross misuse of the HTML spec, but are all validation errors created equal? My apparent misuse of ampersands has got to rank pretty low on the sin list.</p>
</blockquote>
]]></description>
      <guid isPermaLink="false">6419@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Thought experiment [dive into mark]" href="http://diveintomark.org/archives/2004/01/14/thought_experiment">Thought experiment</a>: Mark Pilgrim goes on a quick rant about how having Web clients demand valid XHTML is a bad idea.</p>

<blockquote>
  <p>The client is the wrong place to enforce data integrity. It’s just the wrong place. I hear otherwise intelligent people claim that &#8220;if everyone did it, it would be okay.&#8221; No, if everyone did it, it would be even worse. If you want to do it, of course I can’t stop you. But think about who it will hurt.</p>
</blockquote>

<p>He illustrates with a good story about a problem Nick Bradbury had related to it.   It&#8217;s worth reading.</p>

<p>I agree with with him.  In fact, I <a href="http://gadgetopia.com/post/2453">wrote this</a> almost exactly four years ago.</p>

<blockquote>
  <p>But, in an even larger sense, does validation matter much? I’ve never gotten any comment from anyone about the validation of this site. So what that I’m throwing 50 errors because of ampersands in URLs &#8212; can someone provide me with a valid (excuse the pun) reason why this matters?</p>
  
  <p>I understand problems can occur from gross misuse of the HTML spec, but are all validation errors created equal? My apparent misuse of ampersands has got to rank pretty low on the sin list.</p>
</blockquote>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-06-06T23:17:51-06:00</dc:date>
    </item>

    <item>
      <title>Datejs</title>
      <link>http://gadgetopia.com/post/6416</link>
      <description><![CDATA[<p><a title="Datejs - A JavaScript Date Library ? About??" href="http://www.datejs.com/">Datejs - A JavaScript Date Library</a>: A fairly stunning Javascript date library that can parse human-readable date references (&#8220;last April 3&#8221;) into datetime values.</p>

<blockquote>
  <p>Comprehensive, yet simple, stealthy and fast. Datejs has passed all trials and is ready to strike. Datejs doesn&#8217;t just parse strings, it slices them cleanly in two.</p>
</blockquote>

<p>I&#8217;d love to see a port of this into PHP, or a PHP-equivalent.</p>
]]></description>
      <guid isPermaLink="false">6416@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Datejs - A JavaScript Date Library ? About??" href="http://www.datejs.com/">Datejs - A JavaScript Date Library</a>: A fairly stunning Javascript date library that can parse human-readable date references (&#8220;last April 3&#8221;) into datetime values.</p>

<blockquote>
  <p>Comprehensive, yet simple, stealthy and fast. Datejs has passed all trials and is ready to strike. Datejs doesn&#8217;t just parse strings, it slices them cleanly in two.</p>
</blockquote>

<p>I&#8217;d love to see a port of this into PHP, or a PHP-equivalent.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-06-03T13:39:29-06:00</dc:date>
    </item>

    <item>
      <title>PHP Apps That Changed the World</title>
      <link>http://gadgetopia.com/post/6405</link>
      <description><![CDATA[<p><a title="Open-source PHP applications that changed the world ? PHP::Impact ( [str blog] )" href="http://phpimpact.wordpress.com/2008/05/22/open-source-php-applications-that-changed-the-world/">Open-source PHP applications that changed the world</a>: A nice roll-up of the most influential PHP apps of the last 10 years, from <a href="http://www.phpmyadmin.net/">phpMyAdmin</a> in 1998 to <a href="http://www.magentocommerce.com/">Magneto</a> last year.</p>

<blockquote>
  <p>From managing databases to shopping, writing blogs to sending emails. Ten years of passion, great software architectures, team work and revolutionary ideas. Here are the most influential open-source PHP applications to date&#8230;</p>
</blockquote>

<p>I&#8217;m happy to see <a href="http://ez.no/">eZ publish</a> in there.</p>
]]></description>
      <guid isPermaLink="false">6405@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Open-source PHP applications that changed the world ? PHP::Impact ( [str blog] )" href="http://phpimpact.wordpress.com/2008/05/22/open-source-php-applications-that-changed-the-world/">Open-source PHP applications that changed the world</a>: A nice roll-up of the most influential PHP apps of the last 10 years, from <a href="http://www.phpmyadmin.net/">phpMyAdmin</a> in 1998 to <a href="http://www.magentocommerce.com/">Magneto</a> last year.</p>

<blockquote>
  <p>From managing databases to shopping, writing blogs to sending emails. Ten years of passion, great software architectures, team work and revolutionary ideas. Here are the most influential open-source PHP applications to date&#8230;</p>
</blockquote>

<p>I&#8217;m happy to see <a href="http://ez.no/">eZ publish</a> in there.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-05-23T09:31:18-06:00</dc:date>
    </item>

    <item>
      <title>Locked Out of Google App Engine</title>
      <link>http://gadgetopia.com/post/6404</link>
      <description><![CDATA[<p><a title="403 Forbidden" href="http://sorry.google.com/sorry/?continue=http://tinydb.org/13C">403 Forbidden</a>: In writing my <a href="http://gadgetopia.com/post/6402">earlier tinydb post</a>, something odd happened.  All requests to tinydb were stopped with this message.</p>

<blockquote>
  <p>We&#8217;re sorry&#8230; but your query looks similar to automated requests from a computer virus or spyware application. To protect our users, we can&#8217;t process your request right now. </p>
</blockquote>

<p>The message wasn&#8217;t from tinydb, but rather from Google itself.  I&#8217;m still locked out, 45 minutes later.</p>

<p>It&#8217;s IP-based, because I can no longer hit tinydb from any machine on my network.</p>

<p>This is cause for a little concern.  I wasn&#8217;t doing anything strange, and I only hit a couple URLs on the domain (through Firefox, I might add &#8212; not through a Web service-ish client).</p>

<p>If you can get locked out this easily, it makes me wonder about the viability of tinydb in particular, and Google App Engine in general.</p>
]]></description>
      <guid isPermaLink="false">6404@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="403 Forbidden" href="http://sorry.google.com/sorry/?continue=http://tinydb.org/13C">403 Forbidden</a>: In writing my <a href="http://gadgetopia.com/post/6402">earlier tinydb post</a>, something odd happened.  All requests to tinydb were stopped with this message.</p>

<blockquote>
  <p>We&#8217;re sorry&#8230; but your query looks similar to automated requests from a computer virus or spyware application. To protect our users, we can&#8217;t process your request right now. </p>
</blockquote>

<p>The message wasn&#8217;t from tinydb, but rather from Google itself.  I&#8217;m still locked out, 45 minutes later.</p>

<p>It&#8217;s IP-based, because I can no longer hit tinydb from any machine on my network.</p>

<p>This is cause for a little concern.  I wasn&#8217;t doing anything strange, and I only hit a couple URLs on the domain (through Firefox, I might add &#8212; not through a Web service-ish client).</p>

<p>If you can get locked out this easily, it makes me wonder about the viability of tinydb in particular, and Google App Engine in general.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-05-22T06:37:54-06:00</dc:date>
    </item>

    <item>
      <title>Extending a Method on a Base Class</title>
      <link>http://gadgetopia.com/post/6403</link>
      <description><![CDATA[<p>Here&#8217;s something I&#8217;d like to see in any object-oriented programming language.  This might be a crappy idea, which is why I&#8217;m posting it here before I call Steve Balmer up and ask him to implement it.</p>

<p>Say I have a base class Foo, which is extended by Bar (below notation is in C#, because that&#8217;s what I was using when I wanted this):</p>

<pre><code>public class Foo
{
}

public class Bar : Foo
{
}
</code></pre>

<p>Foo (the base class) has a method called DoSomething.  I also write a DoSomething method in Bar (the child class), thus overriding the method in Foo.</p>

<pre><code>public class Foo
{
  public void DoSomething()
  {
     //This method won't run from Bar...
  }
}

public class Bar : Foo
{
  public void DoSomething()
  {
    //...because this method this hides Foo's method.
  }
}
</code></pre>

<p>At this point, the Foo version of DoSomething is hidden &#8212; Bar has overridden it.  In most cases, this is what I want.  But sometimes it&#8217;s not.</p>

<p>Sometimes (today, for example), I really wanted the Bar version of DoSomething to <em>add</em> to the Foo version.  So I wanted Bar to run the base implementation of the method (the one on Foo), <em>then</em> run its own implementation.</p>

<p>Something like this:</p>

<pre><code>public class Foo
{
  public void DoSomething()
  {
    //When DoSomething is called from Bar, this code will run first...
  }
}

public class Bar : Foo
{
  public void DoSomething()
  {
    //...then this code will run.
  }
}
</code></pre>

<p>Now, I know what you&#8217;re saying.  Do this in Bar.</p>

<pre><code>public void DoSomething()
{
  base.DoSomething();
  [more code here]
}
</code></pre>

<p>But, this requires explicit code in Bar, and it&#8217;s optional &#8212; the guy writing Bar could just choose not to do it.  What if I wanted to force this from Foo?</p>

<p>What I want to do is write a method in Foo and somehow designate that to say:</p>

<blockquote>
  <p>You can add to this method all you want in child classes, but this code right here is still going to run first no matter what you do.</p>
</blockquote>

<p>This is both a convenience thing &#8212; I don&#8217;t have to remember to call the base method from Bar &#8212; but I can also envision situations where it&#8217;s a security issue.  There could be times when the code in Foo has to run for security reasons or to set up some situation or structure for Bar&#8217;s method implementation to run correctly.</p>

<p>Does what I want exist in any language you know of?  Is it a stupid idea?  Why?</p>
]]></description>
      <guid isPermaLink="false">6403@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p>Here&#8217;s something I&#8217;d like to see in any object-oriented programming language.  This might be a crappy idea, which is why I&#8217;m posting it here before I call Steve Balmer up and ask him to implement it.</p>

<p>Say I have a base class Foo, which is extended by Bar (below notation is in C#, because that&#8217;s what I was using when I wanted this):</p>

<pre><code>public class Foo
{
}

public class Bar : Foo
{
}
</code></pre>

<p>Foo (the base class) has a method called DoSomething.  I also write a DoSomething method in Bar (the child class), thus overriding the method in Foo.</p>

<pre><code>public class Foo
{
  public void DoSomething()
  {
     //This method won't run from Bar...
  }
}

public class Bar : Foo
{
  public void DoSomething()
  {
    //...because this method this hides Foo's method.
  }
}
</code></pre>

<p>At this point, the Foo version of DoSomething is hidden &#8212; Bar has overridden it.  In most cases, this is what I want.  But sometimes it&#8217;s not.</p>

<p>Sometimes (today, for example), I really wanted the Bar version of DoSomething to <em>add</em> to the Foo version.  So I wanted Bar to run the base implementation of the method (the one on Foo), <em>then</em> run its own implementation.</p>

<p>Something like this:</p>

<pre><code>public class Foo
{
  public void DoSomething()
  {
    //When DoSomething is called from Bar, this code will run first...
  }
}

public class Bar : Foo
{
  public void DoSomething()
  {
    //...then this code will run.
  }
}
</code></pre>

<p>Now, I know what you&#8217;re saying.  Do this in Bar.</p>

<pre><code>public void DoSomething()
{
  base.DoSomething();
  [more code here]
}
</code></pre>

<p>But, this requires explicit code in Bar, and it&#8217;s optional &#8212; the guy writing Bar could just choose not to do it.  What if I wanted to force this from Foo?</p>

<p>What I want to do is write a method in Foo and somehow designate that to say:</p>

<blockquote>
  <p>You can add to this method all you want in child classes, but this code right here is still going to run first no matter what you do.</p>
</blockquote>

<p>This is both a convenience thing &#8212; I don&#8217;t have to remember to call the base method from Bar &#8212; but I can also envision situations where it&#8217;s a security issue.  There could be times when the code in Foo has to run for security reasons or to set up some situation or structure for Bar&#8217;s method implementation to run correctly.</p>

<p>Does what I want exist in any language you know of?  Is it a stupid idea?  Why?</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-05-22T06:13:14-06:00</dc:date>
    </item>

    <item>
      <title>tinydb</title>
      <link>http://gadgetopia.com/post/6402</link>
      <description><![CDATA[<p><a title="tinydb.org" href="http://tinydb.org/">tinydb.org</a>: This is the first Google App Engine app I&#8217;ve seen.</p>

<p>tinydb lets you write to it by send a small GET request with querystring arguments containing some bit of textual data.  You get a URL back, from which you can retrieve what you wrote in XML or JSON.</p>

<p><a href="http://tinydb.org/13C">Here is a super-secret message for you that I put in tinydb.</a></p>

<p>There&#8217;s no edit facility &#8212; once you write it, you can&#8217;t change it.  You can write it again, but you get a different key back.</p>

<blockquote>
  <p>tinydb.org&#8217;s goals are: Provide a simple API for writing and reading small chunks of data from anywhere. [&#8230;] Serve as a platform upon which twitter applications and javascript widgets can be written. [&#8230;] Circumvent crossdomain.xml in interesting and creative ways.</p>
</blockquote>

<p>So, using nothing but a GET request, you can put a scrap of data into a global data store, and get it back from anywhere.  Obviously, it&#8217;s not secure &#8212; anyone who has your URL can see it, and anyone can just browse existing URLs (the latest ones issued are even listed on the tinydb home page).</p>

<p>It makes me wonder about proprietary information and limits on data storage.  What if someone puts a DVD encryption key in there?  What if someone starts storing kiddie porn?  How much data could someone upload?</p>

<p>Nevertheless, a neat little app and something no one would have been willing to do without something like Google App Engine &#8212; let them manage the disk space.</p>
]]></description>
      <guid isPermaLink="false">6402@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="tinydb.org" href="http://tinydb.org/">tinydb.org</a>: This is the first Google App Engine app I&#8217;ve seen.</p>

<p>tinydb lets you write to it by send a small GET request with querystring arguments containing some bit of textual data.  You get a URL back, from which you can retrieve what you wrote in XML or JSON.</p>

<p><a href="http://tinydb.org/13C">Here is a super-secret message for you that I put in tinydb.</a></p>

<p>There&#8217;s no edit facility &#8212; once you write it, you can&#8217;t change it.  You can write it again, but you get a different key back.</p>

<blockquote>
  <p>tinydb.org&#8217;s goals are: Provide a simple API for writing and reading small chunks of data from anywhere. [&#8230;] Serve as a platform upon which twitter applications and javascript widgets can be written. [&#8230;] Circumvent crossdomain.xml in interesting and creative ways.</p>
</blockquote>

<p>So, using nothing but a GET request, you can put a scrap of data into a global data store, and get it back from anywhere.  Obviously, it&#8217;s not secure &#8212; anyone who has your URL can see it, and anyone can just browse existing URLs (the latest ones issued are even listed on the tinydb home page).</p>

<p>It makes me wonder about proprietary information and limits on data storage.  What if someone puts a DVD encryption key in there?  What if someone starts storing kiddie porn?  How much data could someone upload?</p>

<p>Nevertheless, a neat little app and something no one would have been willing to do without something like Google App Engine &#8212; let them manage the disk space.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-05-22T05:53:38-06:00</dc:date>
    </item>

    <item>
      <title>The End of the &quot;PHP sucks&quot; Argument</title>
      <link>http://gadgetopia.com/post/6399</link>
      <description><![CDATA[<p><a title="Coding Horror: PHP Sucks, But It Doesn't Matter" href="http://www.codinghorror.com/blog/archives/001119.html">PHP Sucks, But It Doesn&#8217;t Matter</a>: Jeff Atwood essentially closes the &#8220;PHP sucks&#8221; argument by agreeing with it, then explaining why it doesn&#8217;t matter.</p>

<blockquote>
  <p>The TIOBE community index I linked above? It&#8217;s written in PHP. Wikipedia, which is likely to be on the first page of anything you search for these days? Written in PHP. Digg, the social bookmarking service so wildly popular that a front page link can crush the beefiest of webservers? Written in PHP. WordPress, arguably the most popular blogging solution available at the moment? Written in PHP. YouTube, the most widely known video sharing site on the internet? Written in PHP. Facebook, the current billion-dollar zombie-poking social networking darling of venture capitalists everywhere? Written in PHP.</p>
  
  <p>Notice a pattern here?</p>
  
  <p>Some of the largest sites on the internet &#8212; sites you probably interact with on a daily basis &#8212; are written in PHP. If PHP sucks so profoundly, <em>why is it powering so much of the internet?</em></p>
  
  <p>The only conclusion I can draw is that building a compelling application is far more important than choice of language. While PHP wouldn&#8217;t be my choice, and if pressed, I might argue that it should never be the choice for any rational human being sitting in front of a computer, I can&#8217;t argue with the results. </p>
</blockquote>

<p>I&#8217;m actually beginning to like ASP.Net, but you have to wonder why very few of the big sites &#8212; on the scale that Jeff mentions above &#8212; are written in it.  ASP.Net owns the enterprise, but I don&#8217;t see any of the Web 2.0 darlings rushing to it.</p>

<p>Say whatever you want about PHP, but it&#8217;s easy to do stuff in.  Yes, it&#8217;s easy to do <em>stupid</em> stuff, but it&#8217;s easy to do about everything else in as well.</p>

<p>ASP.Net is Jacqueline Kennedy, while PHP is Marilyn Monroe.  Sure, you couldn&#8217;t take Marilyn to a state dinner, but she was probably a hell of a lot more fun in general.</p>
]]></description>
      <guid isPermaLink="false">6399@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Coding Horror: PHP Sucks, But It Doesn't Matter" href="http://www.codinghorror.com/blog/archives/001119.html">PHP Sucks, But It Doesn&#8217;t Matter</a>: Jeff Atwood essentially closes the &#8220;PHP sucks&#8221; argument by agreeing with it, then explaining why it doesn&#8217;t matter.</p>

<blockquote>
  <p>The TIOBE community index I linked above? It&#8217;s written in PHP. Wikipedia, which is likely to be on the first page of anything you search for these days? Written in PHP. Digg, the social bookmarking service so wildly popular that a front page link can crush the beefiest of webservers? Written in PHP. WordPress, arguably the most popular blogging solution available at the moment? Written in PHP. YouTube, the most widely known video sharing site on the internet? Written in PHP. Facebook, the current billion-dollar zombie-poking social networking darling of venture capitalists everywhere? Written in PHP.</p>
  
  <p>Notice a pattern here?</p>
  
  <p>Some of the largest sites on the internet &#8212; sites you probably interact with on a daily basis &#8212; are written in PHP. If PHP sucks so profoundly, <em>why is it powering so much of the internet?</em></p>
  
  <p>The only conclusion I can draw is that building a compelling application is far more important than choice of language. While PHP wouldn&#8217;t be my choice, and if pressed, I might argue that it should never be the choice for any rational human being sitting in front of a computer, I can&#8217;t argue with the results. </p>
</blockquote>

<p>I&#8217;m actually beginning to like ASP.Net, but you have to wonder why very few of the big sites &#8212; on the scale that Jeff mentions above &#8212; are written in it.  ASP.Net owns the enterprise, but I don&#8217;t see any of the Web 2.0 darlings rushing to it.</p>

<p>Say whatever you want about PHP, but it&#8217;s easy to do stuff in.  Yes, it&#8217;s easy to do <em>stupid</em> stuff, but it&#8217;s easy to do about everything else in as well.</p>

<p>ASP.Net is Jacqueline Kennedy, while PHP is Marilyn Monroe.  Sure, you couldn&#8217;t take Marilyn to a state dinner, but she was probably a hell of a lot more fun in general.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-05-21T10:25:06-06:00</dc:date>
    </item>

    <item>
      <title>The Peril of Self-Replicating Hyperlinks</title>
      <link>http://gadgetopia.com/post/6374</link>
      <description><![CDATA[<p>I built an intranet for a client.  One of the functional items is a viewer into an Exchange calendar.  We use a handy <a href="http://www.independentsoft.de/webdavex/index.html">third-party component</a> to display the contents of an Exchange public folder on a page.</p>

<p>The month and year to be viewed is driven off the querystring.  Something like:</p>

<pre><code>/month.aspx?m=11&amp;y=2010
</code></pre>

<p>So you can look at <em>any</em> month by writing your own querystring.  We check for valid input and everything, but so long as you enter a valid month and year in the querystring, you can (could) look up any logical month in existence, as far ahead or behind as you want.</p>

<p>Each month has helpful &#8220;Next&#8221; and &#8220;Previous&#8221; links on it that form the URL for the next or previous month.</p>

<p>Sadly, we&#8217;re also indexing the intranet via a <a href="http://www.google.com/enterprise/mini/">Google Mini</a>.  </p>

<p>Astute readers will see the problem here&#8230;</p>

<p>Two things happened:</p>

<ol>
<li><p>The number of pages in the Mini spiked.  The client was suddenly hitting their document limit.  They only had about 10,000 actual pages of content, but the Mini was claiming it had indexed four or five times that number.</p></li>
<li><p>We started to get reports about odd months being returned in search results.  Months like &#8220;November 2609&#8221; for example&#8230;</p></li>
</ol>

<p>The Mini&#8217;s crawler, bless its heart, was dutifully following the &#8220;Next&#8221; and &#8220;Previous&#8221; links in the calendar into infinity in either direction.  It was, in effect, inventing its own URLs&#8230;forever.  Every new page in the calendar gave it a new URL it hadn&#8217;t seen before. The Mini&#8217;s crawler had fallen down the rabbit hole.</p>

<p>Easy problem to fix, but an embarrassing oversight nonetheless.  We now drop the &#8220;Next&#8221; and &#8220;Previous&#8221; links at 24 months out in either direction, and we throw a <a href="http://gadgetopia.com/post/6370">410</a> for anything outside those bounds in the past, and a 404 for anything outside those bounds in the future.</p>

<p>I just checked today, and the number of pages in the Mini came down 2,000 yesterday, as it rechecks out-of-bounds URLs and gets back 410s and 404s.</p>

<p>I wonder how many sites on the public Internet have this same problem? I wonder if crawlers have any logic to detect this?</p>
]]></description>
      <guid isPermaLink="false">6374@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p>I built an intranet for a client.  One of the functional items is a viewer into an Exchange calendar.  We use a handy <a href="http://www.independentsoft.de/webdavex/index.html">third-party component</a> to display the contents of an Exchange public folder on a page.</p>

<p>The month and year to be viewed is driven off the querystring.  Something like:</p>

<pre><code>/month.aspx?m=11&amp;y=2010
</code></pre>

<p>So you can look at <em>any</em> month by writing your own querystring.  We check for valid input and everything, but so long as you enter a valid month and year in the querystring, you can (could) look up any logical month in existence, as far ahead or behind as you want.</p>

<p>Each month has helpful &#8220;Next&#8221; and &#8220;Previous&#8221; links on it that form the URL for the next or previous month.</p>

<p>Sadly, we&#8217;re also indexing the intranet via a <a href="http://www.google.com/enterprise/mini/">Google Mini</a>.  </p>

<p>Astute readers will see the problem here&#8230;</p>

<p>Two things happened:</p>

<ol>
<li><p>The number of pages in the Mini spiked.  The client was suddenly hitting their document limit.  They only had about 10,000 actual pages of content, but the Mini was claiming it had indexed four or five times that number.</p></li>
<li><p>We started to get reports about odd months being returned in search results.  Months like &#8220;November 2609&#8221; for example&#8230;</p></li>
</ol>

<p>The Mini&#8217;s crawler, bless its heart, was dutifully following the &#8220;Next&#8221; and &#8220;Previous&#8221; links in the calendar into infinity in either direction.  It was, in effect, inventing its own URLs&#8230;forever.  Every new page in the calendar gave it a new URL it hadn&#8217;t seen before. The Mini&#8217;s crawler had fallen down the rabbit hole.</p>

<p>Easy problem to fix, but an embarrassing oversight nonetheless.  We now drop the &#8220;Next&#8221; and &#8220;Previous&#8221; links at 24 months out in either direction, and we throw a <a href="http://gadgetopia.com/post/6370">410</a> for anything outside those bounds in the past, and a 404 for anything outside those bounds in the future.</p>

<p>I just checked today, and the number of pages in the Mini came down 2,000 yesterday, as it rechecks out-of-bounds URLs and gets back 410s and 404s.</p>

<p>I wonder how many sites on the public Internet have this same problem? I wonder if crawlers have any logic to detect this?</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-05-02T06:27:40-06:00</dc:date>
    </item>

    <item>
      <title>410 Gone</title>
      <link>http://gadgetopia.com/post/6370</link>
      <description><![CDATA[<p><a title="HTTP Error 410: Gone [dive into mark]" href="http://diveintomark.org/archives/2003/03/27/http_error_410_gone">HTTP Error 410: Gone</a>: I found this page today when searching for a refresher on the 410 status code.  It means &#8220;gone.&#8221;  Forever.  Not just &#8220;not found&#8221; right now, but forever more.  Gone, baby.</p>

<p>We should use status code 410 more.</p>

<blockquote>
  <p>As far as I can tell, it’s the forgotten stepchild of error 404 (Resource not found). Error 410 means Resource gone, as in, a resource used to exist at this location, but now it’s gone. Not only is it gone, but I don’t know (or I don’t want to tell you) where it went. If I knew where it went, and I wanted to tell you, I would use error 301 (Permanent redirect) and any smart client would simply redirect to the new address. But 410 means Resource gone, no forwarding address. Train gone sorry.</p>
</blockquote>

<p>Sam Ruby brings up <a href="http://www.intertwingly.net/blog/2004/06/13/Gone-Really-I-mean-it">a good point</a> about when it would be a great time to use 410.</p>

<blockquote>
  <p>[&#8230;] you would think that any decent aggregator would respect a 410, wouldn&#8217;t you?</p>
  
  <p>I&#8217;ve long since removed my scraped feed, and marked it gone.</p>
  
  <p>Despite this, a number of aggregators continue to relentlessly poll for changes.</p>
</blockquote>

<p>I had <a href="http://gadgetopia.com/post/4676">this same problem</a> when I removed the RSS feeds for comments on individual posts:</p>

<blockquote>
  <p>[&#8230;] this brings up the question of how to notify people that I’m doing this. How do you notify RSS users? The solution is pretty simple I guess — I’m going to tack an entry to the top of this XML file that just explains that we’re not maintaining these feeds anymore, rebuild them all one last time, and then leave the files out there long enough for everyone to ping them again.</p>
  
  <p>But when do you pull the files? When I delete these 4,600 XML files, do I redirect requests for them to another feed with a single entry that explains that they’re gone? Are there best practices for this?</p>
</blockquote>
]]></description>
      <guid isPermaLink="false">6370@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="HTTP Error 410: Gone [dive into mark]" href="http://diveintomark.org/archives/2003/03/27/http_error_410_gone">HTTP Error 410: Gone</a>: I found this page today when searching for a refresher on the 410 status code.  It means &#8220;gone.&#8221;  Forever.  Not just &#8220;not found&#8221; right now, but forever more.  Gone, baby.</p>

<p>We should use status code 410 more.</p>

<blockquote>
  <p>As far as I can tell, it’s the forgotten stepchild of error 404 (Resource not found). Error 410 means Resource gone, as in, a resource used to exist at this location, but now it’s gone. Not only is it gone, but I don’t know (or I don’t want to tell you) where it went. If I knew where it went, and I wanted to tell you, I would use error 301 (Permanent redirect) and any smart client would simply redirect to the new address. But 410 means Resource gone, no forwarding address. Train gone sorry.</p>
</blockquote>

<p>Sam Ruby brings up <a href="http://www.intertwingly.net/blog/2004/06/13/Gone-Really-I-mean-it">a good point</a> about when it would be a great time to use 410.</p>

<blockquote>
  <p>[&#8230;] you would think that any decent aggregator would respect a 410, wouldn&#8217;t you?</p>
  
  <p>I&#8217;ve long since removed my scraped feed, and marked it gone.</p>
  
  <p>Despite this, a number of aggregators continue to relentlessly poll for changes.</p>
</blockquote>

<p>I had <a href="http://gadgetopia.com/post/4676">this same problem</a> when I removed the RSS feeds for comments on individual posts:</p>

<blockquote>
  <p>[&#8230;] this brings up the question of how to notify people that I’m doing this. How do you notify RSS users? The solution is pretty simple I guess — I’m going to tack an entry to the top of this XML file that just explains that we’re not maintaining these feeds anymore, rebuild them all one last time, and then leave the files out there long enough for everyone to ping them again.</p>
  
  <p>But when do you pull the files? When I delete these 4,600 XML files, do I redirect requests for them to another feed with a single entry that explains that they’re gone? Are there best practices for this?</p>
</blockquote>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-04-30T23:32:08-06:00</dc:date>
    </item>

    <item>
      <title>stackoverflow.com</title>
      <link>http://gadgetopia.com/post/6352</link>
      <description><![CDATA[<p><a title="stackoverflow.com - Joel on Software" href="http://www.joelonsoftware.com/items/2008/04/16.html">stackoverflow.com</a>: With both <a href="http://joelonsoftware.com/">Spolsky</a> and <a href="http://codinghorror.com/">Atwood</a> involved, I suspect this will be huge.</p>

<blockquote>
  <p>Jeff Atwood and I decided to do something about it. We&#8217;re starting to build a programming Q&amp;A site that&#8217;s free. Free to ask questions, free to answer questions, free to read, free to index, built with plain old HTML, no fake rot13 text on the home page, no scammy google-cloaking tactics, no salespeople, no JavaScript windows dropping down in front of the answer asking for $12.95 to go away. You can register if you want to collect karma and win valuable flair that will appear next to your name, but otherwise, it&#8217;s just free.</p>
</blockquote>

<p>The no registration thing fits.  <a href="http://discuss.joelonsoftware.com/">Joel&#8217;s forums</a> have been no-registration for years, and it&#8217;s worked out great &#8212; good content, good answers, very little cruft.</p>
]]></description>
      <guid isPermaLink="false">6352@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="stackoverflow.com - Joel on Software" href="http://www.joelonsoftware.com/items/2008/04/16.html">stackoverflow.com</a>: With both <a href="http://joelonsoftware.com/">Spolsky</a> and <a href="http://codinghorror.com/">Atwood</a> involved, I suspect this will be huge.</p>

<blockquote>
  <p>Jeff Atwood and I decided to do something about it. We&#8217;re starting to build a programming Q&amp;A site that&#8217;s free. Free to ask questions, free to answer questions, free to read, free to index, built with plain old HTML, no fake rot13 text on the home page, no scammy google-cloaking tactics, no salespeople, no JavaScript windows dropping down in front of the answer asking for $12.95 to go away. You can register if you want to collect karma and win valuable flair that will appear next to your name, but otherwise, it&#8217;s just free.</p>
</blockquote>

<p>The no registration thing fits.  <a href="http://discuss.joelonsoftware.com/">Joel&#8217;s forums</a> have been no-registration for years, and it&#8217;s worked out great &#8212; good content, good answers, very little cruft.</p>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-04-16T22:21:49-06:00</dc:date>
    </item>

    <item>
      <title>Coding Horror Donates to Open Source</title>
      <link>http://gadgetopia.com/post/6341</link>
      <description><![CDATA[<p><a title="Coding Horror: Donating $5,000 to .NET Open Source" href="http://www.codinghorror.com/blog/archives/001098.html">Donating $5,000 to .NET Open Source</a>: Last year, Jeff Atwood from Coding Horror promised to done some money from his advertising to open-source projects.  He followed through on that today with a $5,000 check to the <a href="http://www.screwturn.eu/Default.aspx?AspxAutoDetectCookieSupport=1">ScrewTurn Wiki project</a>.</p>

<blockquote>
  <p>This is like one of those giant promotional checks you see on TV; it&#8217;s for promotional purposes only. There&#8217;s no real check. The actual money is being sent via wire transfer to Dario Solera, the ScrewTurn Wiki project coordinator. What&#8217;s Dario going to do with this money? You&#8217;ll have to ask him. That&#8217;s not for me to decide. There are no strings attached to this money of any kind. I trust the judgment of a fellow programmer to run their project as they see fit. </p>
</blockquote>

<p>This is kind of cool for a number of reasons.  First, it&#8217;s just neat.  Second, he singles out an open-source, .Net project, which isn&#8217;t common.  His rationale:</p>

<blockquote>
  <p>[&#8230;] open source projects are treated as second-class citizens in the Microsoft ecosystem. Many highly popular open source projects have contributed so much to the .NET community, and they&#8217;ve gotten virtually no support at all from Microsoft in return.</p>
</blockquote>
]]></description>
      <guid isPermaLink="false">6341@http://gadgetopia.com/</guid>
      <content:encoded><![CDATA[<p><a title="Coding Horror: Donating $5,000 to .NET Open Source" href="http://www.codinghorror.com/blog/archives/001098.html">Donating $5,000 to .NET Open Source</a>: Last year, Jeff Atwood from Coding Horror promised to done some money from his advertising to open-source projects.  He followed through on that today with a $5,000 check to the <a href="http://www.screwturn.eu/Default.aspx?AspxAutoDetectCookieSupport=1">ScrewTurn Wiki project</a>.</p>

<blockquote>
  <p>This is like one of those giant promotional checks you see on TV; it&#8217;s for promotional purposes only. There&#8217;s no real check. The actual money is being sent via wire transfer to Dario Solera, the ScrewTurn Wiki project coordinator. What&#8217;s Dario going to do with this money? You&#8217;ll have to ask him. That&#8217;s not for me to decide. There are no strings attached to this money of any kind. I trust the judgment of a fellow programmer to run their project as they see fit. </p>
</blockquote>

<p>This is kind of cool for a number of reasons.  First, it&#8217;s just neat.  Second, he singles out an open-source, .Net project, which isn&#8217;t common.  His rationale:</p>

<blockquote>
  <p>[&#8230;] open source projects are treated as second-class citizens in the Microsoft ecosystem. Many highly popular open source projects have contributed so much to the .NET community, and they&#8217;ve gotten virtually no support at all from Microsoft in return.</p>
</blockquote>
]]></content:encoded>
      <dc:subject>Programming and Web Development</dc:subject>
      <dc:date>2008-04-11T08:31:35-06:00</dc:date>
    </item>


  </channel>
</rss>