<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>Mad, Beautiful Ideas</title>
    <link rel="alternate" type="text/html" href="http://blog.foxxtrot.net/" />
    
    <id>tag:blog.foxxtrot.net,2008-09-17://1</id>
    <updated>2009-11-06T18:44:37Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.21-en</generator>

<link rel="self" href="http://feeds.feedburner.com/MadBeautifulIdeas" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
    <title>ChromaHash: Not As Dangerous As You Think!</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/DLB716j27LE/chromahash-not-as-dangerous-as-you-think.html" />
    <id>tag:blog.foxxtrot.net,2009://1.367</id>

    <published>2009-11-06T18:44:07Z</published>
    <updated>2009-11-06T18:44:37Z</updated>

    <summary>The ChromaHash module I’ve submitted to the YUI3-Gallery got hit up on Reddit this week, which incidentally is the second time ChromaHash has been discussed there. And this time around, the discussion was just as negative this time around. First,...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="chromahash" label="ChromaHash" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="md5" label="MD5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;The &lt;a href="http://yuilibrary.com/gallery/show/chromahash"&gt;ChromaHash module&lt;/a&gt; I&amp;#8217;ve submitted to the &lt;a href="http://yuilibrary.com/gallery/"&gt;YUI3-Gallery&lt;/a&gt; got hit up on &lt;a href="http://www.reddit.com/r/programming/comments/a150t/a_regular_confirm_password_field_but_100x_cooler/"&gt;Reddit this week&lt;/a&gt;, which incidentally is the &lt;a href="http://www.reddit.com/r/programming/comments/95hxr/chromahash_a_sexy_nonreversible_live/"&gt;second time ChromaHash has been discussed there&lt;/a&gt;. And this time around, the discussion was just as negative this time around.&lt;/p&gt;

&lt;p&gt;First, a &lt;em&gt;lot&lt;/em&gt; of people focused too heavily on the fact that the demo screen is a confirm password box, commenting that a simple checkbox confirming the password was the same would be sufficient. Of those who did recognize that this was meant to be used on a login page as well, we got the general reaction we get that since this gives &lt;em&gt;any&lt;/em&gt; information about the password, then it&amp;#8217;s wholly unacceptable, and it completely compromises the password security.&lt;/p&gt;

&lt;p&gt;Now, Mattt Thompson, creator of ChromaHash for jQuery (and who&amp;#8217;s module mine is based off of), has written a pretty &lt;a href="http://mattt.me/2009/11/chroma-hash-revisited/"&gt;good post outlining why this implementation isn&amp;#8217;t as bad as the reaction we&amp;#8217;re getting off of certain information security folks&lt;/a&gt;, and I&amp;#8217;m not planning to reiterate his points (at least, not entirely), since I, as a person with great interest in information security, think that Mattt&amp;#8217;s post is more than sufficient at making the point.&lt;/p&gt;

&lt;p&gt;Instead, I&amp;#8217;m going to talk a bit about some of the suggestions that have come out of the Reddit threads.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.reddit.com/r/programming/comments/95hxr/chromahash_a_sexy_nonreversible_live/c0bhtoc"&gt;Salt Password with Username&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Actually, this is a reasonable option, since it would ensure that users with the same password don&amp;#8217;t discover that. There are a few implementation-level details, since we&amp;#8217;ll have to tell chroma-hash where to find the salting value. The initial thought I have is making the salt object optionally take an array, where any element of the array that is a valid CSS selector, then I&amp;#8217;ll take the value property of the node referred to by the selector and append it to the other elements of the array (as strings) to get the salt value. This does mean I&amp;#8217;ll be recomputing the salt periodically, but I think there are ways around that (subsribing to the &amp;#8216;change&amp;#8217; event for the node, for instance). This suggestion, I think, warrants some more consideration. Though really, password collisions should be pretty rare.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Could reconstruct password as user typed it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is really only an issue for slow typists, since in my implementation the color shifts take half a second. This ought to be user configurable, and it will be in a new release soon-ish. An alternative, that I&amp;#8217;m not as convinced to it&amp;#8217;s usefulness, would be to set a delay between the last keypress and the animation beginning. I &lt;em&gt;might&lt;/em&gt; do this one, but again, I&amp;#8217;m not convinced it&amp;#8217;s useful.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Randomly salt password on pageload&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Umm, no. This would make this tool completely worthless.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;People are colorblind.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yes, approximately 14.5% of the population has some color-related vision problems. But that means 85.5% of the population isn&amp;#8217;t. And even the people who are color-blind can still glean information from chromahash, even if they&amp;#8217;re more likely to encounter collisions. Plus, this is a non-essential tool, so it&amp;#8217;s not like using chromahash &lt;em&gt;prevents&lt;/em&gt; the color blind for interacting with your site.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Any information about the password is TOO MUCH INFORMATION&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Actually, my favorite one of these is a guy who made a &lt;a href="http://www.reddit.com/r/programming/comments/a150t/a_regular_confirm_password_field_but_100x_cooler/c0fdpg6"&gt;bruteforce&lt;/a&gt; for chroma-hash. Now, his example is kind of bullshit because he uses a crap password, so of course it&amp;#8217;s fast, but it completely fails to take into account a few notes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We&amp;#8217;re using MD5 on the backend, which outputs 32 hexadecimal digits, of which we&amp;#8217;re only using 6 to 24 (which is configurable by the &amp;#8216;bars&amp;#8217; option). The collision space, particularly if you only use one or two bars, is non-trivial.&lt;/li&gt;
&lt;li&gt;There are &lt;em&gt;very few&lt;/em&gt; circumstances where an attacker could get the exact hex values for a chromahash, when they wouldn&amp;#8217;t have better mechanisms to steal your password (ie, keyloggers). And for those cases where it could be, disabling chromahash (at least, the YUI3 version I wrote) isn&amp;#8217;t very difficult, and could be wired up to a key event handler, an example of which I&amp;#8217;ll probably have later.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It&amp;#8217;s &lt;em&gt;highly unlikely&lt;/em&gt; that someone will be able to get enough immediate data from this system to be able to make a reasonable attack on a password, certainly not when there are so many other, easier ways to perform that attack. And ChromaHash is configurable, based on when it goes color as well as how many bars it displays, which both would help this situation.&lt;/p&gt;

&lt;p&gt;Ultimately, however, passwords are a failure as a security mechanism. Most people use the same password (or small set of passwords) everywhere, they don&amp;#8217;t change them very often. Not to mention the fact that a lot of people &lt;em&gt;storing&lt;/em&gt; password are doing a poor job of it. I worked at an e-commerce company not too long ago that when I took over their web presence, the passwords were in the database in plaintext, access rights were driven by a cookie. Hacking this site was trivial until I rewrote it, and even then, there are a few things that I didn&amp;#8217;t do correctly right away, like not salting my MD5 hashes I was storing in the database (or using MD5 as my hashing algorithm in the first place&amp;#8230;).&lt;/p&gt;

&lt;p&gt;I believe that ChromaHash &lt;em&gt;can&lt;/em&gt; improve usability, since it provides immediate feedback to the user that their password is accurate, and given that &lt;em&gt;many&lt;/em&gt; people are visual, I think that they&amp;#8217;ll develop, rather quickly, a gut reaction to the hash colors if they&amp;#8217;re wrong or not. Will it work for everyone? No, but it could help most people.&lt;/p&gt;

&lt;p&gt;We need to move beyond passwords as an authentication mechanism. I&amp;#8217;m a big fan of the &lt;a href="http://yubico.com/products/yubikey/"&gt;Yubikey&lt;/a&gt;, particualrly when paired with &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt;, though just migrating toward OpenID is a huge improvement. But ChromaHash, as it stands, does not significantly weaken the nature of passwords.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/DLB716j27LE" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/11/chromahash-not-as-dangerous-as-you-think.html</feedburner:origLink></entry>

<entry>
    <title>YUI3 Gallery - Community Driven Development</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/dWirwAgVMzQ/yui3-gallery---community-driven-development.html" />
    <id>tag:blog.foxxtrot.net,2009://1.366</id>

    <published>2009-11-05T19:35:31Z</published>
    <updated>2009-11-05T19:37:17Z</updated>

    <summary>Dav Glass has probably become one of my favorite people on the Internet. The work he’s done in the last year or so to make the Yahoo! User Interface library more of a community driven project has been really awesome,...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="chromahash" label="ChromaHash" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gallery" label="Gallery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yahoo" label="Yahoo!" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yui3" label="YUI3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;&lt;a href="http://blog.davglass.com/"&gt;Dav Glass&lt;/a&gt; has probably become one of my favorite people on the Internet. The work he&amp;#8217;s done in the last year or so to make the &lt;a href="http://yuilibrary.com/"&gt;Yahoo! User Interface&lt;/a&gt; library more of a community driven project has been really awesome, between the new forums, the transition to &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;, and now reaching a new level with the &lt;a href="http://yuilibrary.com/gallery/"&gt;YUI3 Gallery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been using YUI3 since shortly after it was released, quickly recognizing the benefits of YUI3&amp;#8217;s advanced architecture over YUI2, going so far as to submit a bit of code, in the form of the collection module, and the work I&amp;#8217;ve done on the Chroma-Hash module for YUI3. And that&amp;#8217;s just the code I&amp;#8217;ve made public.&lt;/p&gt;

&lt;p&gt;So, I was really glad to be able to begin contributing to the Gallery, having already &lt;a href="http://yuilibrary.com/gallery/user/foxxtrot"&gt;uploaded two modules&lt;/a&gt;, with one or two in mind now that Dav&amp;#8217;s mentioned the &lt;a href="http://blog.davglass.com/2009/11/yui-3-gallery-hidden-features/"&gt;Gallery API&lt;/a&gt;. The great part about Gallery is that, if your module is free, licensed under the YUI BSD license, and you&amp;#8217;ve signed a &lt;a href="http://developer.yahoo.com/yui/community/contribute.html"&gt;Contributors License Agreement&lt;/a&gt;, you can have it pushed to Yahoo!&amp;#8217;s content distribution network. Global, high availability serving for JavaScript widgets? Hell yes.&lt;/p&gt;

&lt;p&gt;The best part of the gallery is that it&amp;#8217;s a dead simple way to make modules widely available for use, even if those modules will never really make sense in the context of the YUI framework itself, like my Chroma-Hash module, Luke Smith&amp;#8217;s &lt;a href="http://yuilibrary.com/gallery/show/event-konami"&gt;Konami Event&lt;/a&gt;, or Dav Glass&amp;#8217; quick and dirty port of the &lt;a href="http://yuilibrary.com/gallery/show/simple-editor"&gt;Simple Editor&lt;/a&gt;, but still might be useful to other people today. Plus, it&amp;#8217;s an incubator for code that might someday make sense in the core (&lt;a href="http://yuilibrary.com/gallery/show/yql"&gt;Dav&amp;#8217;s YQL module&lt;/a&gt; being an example). &lt;/p&gt;

&lt;p&gt;Yahoo!, and specifically the YUI team, have demonstrated exactly how a corporately backed open source project &lt;em&gt;should&lt;/em&gt; run, as well as being a great example of why git (or really any distributed source control system) is so great for collaboration, especially for a growing team.&lt;/p&gt;

&lt;p&gt;And it&amp;#8217;s just one way to contribute. &lt;a href="http://www.yuiblog.com/blog/2009/11/03/video-glass-yuiconf2009/"&gt;Dav does a great job outlining all the methods that exist today, and some still to come&lt;/a&gt;&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/dWirwAgVMzQ" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/11/yui3-gallery---community-driven-development.html</feedburner:origLink></entry>

<entry>
    <title>Cloning XML Nodes from one Document into Another</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/wAijppRpYBA/cloning-xml-nodes-from-one-document-into-another.html" />
    <id>tag:blog.foxxtrot.net,2009://1.365</id>

    <published>2009-11-03T16:00:00Z</published>
    <updated>2009-11-06T18:43:44Z</updated>

    <summary>Microsoft’s .NET Framework was designed in part to offer a powerful architecture for working with the Web. In the early 2000’s, when .NET was first being designed, that meant having strong support for handling and manipulating XML. Visual Basic.NET even...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="c" label="C#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xml" label="XML" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;Microsoft&amp;#8217;s .NET Framework was designed in part to offer a powerful architecture for working with the Web. In the early 2000&amp;#8217;s, when .NET was first being designed, that meant having strong support for handling and manipulating XML. Visual Basic.NET even includes support for &lt;a href="http://blogs.msdn.com/wriju/archive/2008/02/07/vb-net-9-0-xml-literal.aspx"&gt;XML literals&lt;/a&gt;. The result of this need was the &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.aspx"&gt;System.XML Namespace&lt;/a&gt;, which contains all the methods and objects you&amp;#8217;ll need to manage an XML document.&lt;/p&gt;

&lt;p&gt;Almost. First, System.XML is kind of a pain to use, but that&amp;#8217;s mostly because parsing XML with a statically typed platform is pretty rough, and frankly, the only languages where working with XML is usually even reasonable are dynamic, unless the XML format is very, very strongly defined, such as in &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;System.XML, however, has no built in mechanism for cloning an element from one document (or document fragment) into another. Attempts to do so (even to copy simple attributes) will &lt;em&gt;always&lt;/em&gt; result in exceptions because the elements were derived from different documents.&lt;/p&gt;

&lt;p&gt;Recently, I was writing a simple set of MSBuild tasks to do xml file replacement on arbitrary XML files after reading a fragment in from a different document. This was in response to a problem I had using the web.config file replacement tasks from the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&amp;amp;displaylang=en"&gt;Web Deployment Projects&lt;/a&gt;. Namely, the web deployment project&amp;#8217;s task works by using the System.Configuration tools to do the section replacement, and that was causing me problems when referencing a non-&lt;a href="http://en.wikipedia.org/wiki/Global_Assembly_Cache"&gt;GAC&lt;/a&gt; assembly in one of the pieces I was replacing when doing a build to production. Their task needs the file to appear to be a valid web.config, and errors out if it thinks it&amp;#8217;s found a problem. Mine doesn&amp;#8217;t care &lt;em&gt;what&lt;/em&gt; you&amp;#8217;re replacing with, so long as it&amp;#8217;s XML.&lt;/p&gt;

&lt;p&gt;My first attempt, was something like this:&lt;/p&gt;

&lt;p&gt;&lt;textarea class="code csharp"&gt;
// This XML Doc won&amp;#8217;t be repeated, since the method signature won&amp;#8217;t change.
/// &lt;summary&gt;
/// Replaces a section of an XML document with the document fragment found in a given file
/// &lt;/summary&gt;
/// &lt;param name="document"&gt;The XmlDocument object to modify in place&lt;/param&gt;
/// &lt;param name="section"&gt;The XPath referencing an XmlElement (or set of elements) to replace&lt;/param&gt;
/// &lt;param name="filename"&gt;The path to the file containing the Xml Fragment to replace with&lt;/param&gt;
void ReplaceSection(XmlDocument document, string section, string filename) 
{
    var sections = document.SelectNodes(section);
    var fragment = new XmlDocument();
    fragment.Load(filename);&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;foreach (var s in sections.Cast&amp;amp;lt;XmlNode&amp;gt;())
{
    document = s.ParentNode.ReplaceChild(fragment, s).OwnerDocument;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;}
&lt;/textarea&gt;&lt;/p&gt;

&lt;p&gt;As stated above, this is going to throw an exception, because the fragment comes from a different document than the document I&amp;#8217;m trying to replace into. So, it because necessary to clone the fragment into a new node, but this is non-trivial.&lt;/p&gt;

&lt;p&gt;&lt;textarea class="code csharp"&gt;
void ReplaceSection(XmlDocument document, string section, string filename) 
{
    var sections = document.SelectNodes(section);
    var fragment = new XmlDocument();
    fragment.Load(filename);&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var newNode = document.CreateNode(fragment.FirstChild.NoteType, 
                                   fragment.FirstChild.Name, 
                                   fragment.FirstChild.NamespaceURI);
newNode.InnerXml = fragment.FirstChild.InnerXml;

foreach (var s in sections.Cast&amp;amp;lt;XmlNode&amp;gt;())
{
    document = s.ParentNode.ReplaceChild(newNode, s).OwnerDocument;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;}
&lt;/textarea&gt;&lt;/p&gt;

&lt;p&gt;XML Parsing engines are great, so that InnerXml property is a lifesaver, since otherwise I&amp;#8217;d have to recursively clone the entire fragment tree in order to do the replacement.&lt;/p&gt;

&lt;p&gt;Keen eyed observers will note that this is also incomplete. since it doesn&amp;#8217;t take into account Attributes on the fragment element, and will in fact, no include them at all. XmlAttributes have the same weaknesses as XmlElements regarding your abililty to simply replace them with ease, so yet more code is required to clone them.&lt;/p&gt;

&lt;p&gt;&lt;textarea class="code csharp"&gt;
var newNode = document.CreateNode(fragment.FirstChild.NoteType, 
                                   fragment.FirstChild.Name, 
                                   fragment.FirstChild.NamespaceURI);
newNode.InnerXml = fragment.FirstChild.InnerXml;&lt;/p&gt;

&lt;p&gt;foreach (XmlAttribute attribute in fragment.FirstChild.Attrbitues)
{
    var newAttribute = document.CreateAttribute(attribute.Name);
    newAttribute.Value = attribute.Value;
    newNode.Attributes.Append(newAttribute);
}
&lt;/textarea&gt;&lt;/p&gt;

&lt;p&gt;This is an awful lot of code to have to write simply to convert an Xml Fragment into a form that .NET will allow me to inject into a new document. But, now that it&amp;#8217;s written, it can be pretty easily injected into a new static method you can use!&lt;/p&gt;

&lt;p&gt;&lt;textarea class="code csharp"&gt;
public static XmlElement CloneNodeIntoDocument(this XmlDocument doc, XmlDocument fragment)
{
    var newNode = document.CreateNode(fragment.FirstChild.NoteType, 
                                       fragment.FirstChild.Name, 
                                       fragment.FirstChild.NamespaceURI);
    newNode.InnerXml = fragment.FirstChild.InnerXml;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;foreach (XmlAttribute attribute in fragment.FirstChild.Attrbitues)
{
    var newAttribute = document.CreateAttribute(attribute.Name);
    newAttribute.Value = attribute.Value;
    newNode.Attributes.Append(newAttribute);
}
return newNode;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;}
&lt;/textarea&gt;&lt;/p&gt;

&lt;p&gt;As always, the code samples on my blog are &lt;a href="http://blog.foxxtrot.net/bsd-license.txt"&gt;BSD-Licensed&lt;/a&gt;, feel free to use and remix them, just give credit where due.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/wAijppRpYBA" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/11/cloning-xml-nodes-from-one-document-into-another.html</feedburner:origLink></entry>

<entry>
    <title>New Thoughts on Carbon Sequestration</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/ECBsN5U2AxA/new-thoughts-on-carbon-sequestration.html" />
    <id>tag:blog.foxxtrot.net,2009://1.364</id>

    <published>2009-11-02T21:17:12Z</published>
    <updated>2009-11-02T21:18:10Z</updated>

    <summary>Generally speaking, I think that most people in the environmental movement tend to focus a bit too heavily on the issue of carbon emissions, often to the exclusion of other issues. For instance, we’re supposed to use compact fluorescent lamps,...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Science" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="carbon" label="Carbon" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="environment" label="Environment" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="environmentalism" label="Environmentalism" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="science" label="science" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ted" label="TED" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;Generally speaking, I think that most people in the environmental movement tend to focus a bit too heavily on the issue of carbon emissions, often to the exclusion of other issues. For instance, we&amp;#8217;re supposed to use &lt;a href="http://en.wikipedia.org/wiki/Compact_fluorescent_lamp"&gt;compact fluorescent lamp&lt;/a&gt;s, because they use less power, but ignoring the mercury used in production (given that &lt;em&gt;most people&lt;/em&gt; don&amp;#8217;t properly recycle the bulbs, this is a huge heavy-metals problem waiting to happen). Same thing with &lt;a href="http://www.youtube.com/watch?v=dKTOyiKLARk&amp;amp;feature=player_embedded"&gt;hybrid cars, like the Toyota Prius&lt;/a&gt;. So little of what goes into current environmental thinking even begins to consider long-tail, that while we&amp;#8217;re busy putting out this current fire, we&amp;#8217;re literally pouring gasoline on the next one.&lt;/p&gt;

&lt;p&gt;Which is why, it&amp;#8217;s so awesome to see real work going on that could potentially solve a lot of problems. Like this talk from July 2009 at &lt;a href="http://www.ted.com/pages/view/id/5"&gt;TED&lt;/a&gt; by &lt;a href="http://www.ted.com/speakers/rachel_armstrong.html"&gt;Rachel Armstrong&lt;/a&gt; on work that she&amp;#8217;s involved in that works on literal nanotechnology that creates this microscopic, almost alive, &lt;a href="http://en.wikipedia.org/wiki/Protists"&gt;protist&lt;/a&gt;-like things that can create limestone reefs in the ocean. And she proposes using this technology to save cities like &lt;a href="http://en.wikipedia.org/wiki/Venice"&gt;Venice&lt;/a&gt;, which has been sinking into the sea for centuries.&lt;/p&gt;

&lt;p&gt;&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/dynamic/RachelArmstrong_2009G-medium.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/RachelArmstrong-2009G.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=667&amp;amp;introDuration=16500&amp;amp;adDuration=4000&amp;amp;postAdDuration=2000&amp;amp;adKeys=talk=rachel_armstrong_architecture_that_repairs_itself;year=2009;theme=a_greener_future;theme=inspired_by_nature;theme=what_s_next_in_tech;theme=tales_of_invention;theme=the_power_of_cities;theme=architectural_inspiration;event=TEDGlobal+2009;&amp;amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/dynamic/RachelArmstrong_2009G-medium.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/RachelArmstrong-2009G.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=667&amp;amp;introDuration=16500&amp;amp;adDuration=4000&amp;amp;postAdDuration=2000&amp;amp;adKeys=talk=rachel_armstrong_architecture_that_repairs_itself;year=2009;theme=a_greener_future;theme=inspired_by_nature;theme=what_s_next_in_tech;theme=tales_of_invention;theme=the_power_of_cities;theme=architectural_inspiration;event=TEDGlobal+2009;"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;If this works, and I do have some concerns about the ecological impact (namely, how does this system &lt;em&gt;stop&lt;/em&gt; growing), it stands to be absolutely amazing, allowing us to create reefs which not only shore up our buildings, but also sequester carbon and serve as habitat for wildlife. Really fascinating.&lt;/p&gt;

&lt;p&gt;But more interesting in the short term, because it definitely seems that the implications are far simpler, is some work being done by Gary Lewis of &lt;a href="http://www.bionz.com/"&gt;BioAgtive Technologies&lt;/a&gt;, where they&amp;#8217;ve designed a tractor kit which takes &lt;a href="http://www.theage.com.au/national/a-farmers-field-of-dreams-buries-climate-change-war-20091031-hqty.html"&gt;tractor emissions and uses them to fertilize a field&lt;/a&gt;. The Australian farmer in the story linked figures he&amp;#8217;s saving a half-million Australian dollars &lt;em&gt;per year&lt;/em&gt; on fertilizer costs. Plus, he&amp;#8217;s taking an output that he&amp;#8217;d have &lt;em&gt;anyway&lt;/em&gt; and utilizing it in a productive manner.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s this sort of enviromental work that really excites me, because they seem to be something which will bring around real, long term, meaningful change in environmental thinking. Incidentally, this is part of why I love TED. The talks are fascinating, and tend to focus on things that you&amp;#8217;re not likely to hear about elsewhere.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/ECBsN5U2AxA" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/11/new-thoughts-on-carbon-sequestration.html</feedburner:origLink></entry>

<entry>
    <title>Food-Grade Hydrogen Peroxide?</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/_T4umYnOb80/food-grade-hydrogen-peroxide.html" />
    <id>tag:blog.foxxtrot.net,2009://1.363</id>

    <published>2009-10-26T18:22:59Z</published>
    <updated>2009-10-26T18:23:57Z</updated>

    <summary>Recently, I was having a conversation with a friend who is an esthetician and she mentioned a conversation she’d had with someone recently, who had begun asking about ‘food-grade’ hydrogen peroxide. With some further investigation, the person said that they...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Life" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="chemistry" label="Chemistry" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cleaning" label="Cleaning" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="health" label="Health" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;Recently, I was having a conversation with a friend who is an &lt;a href="http://en.wikipedia.org/wiki/Cosmetology#Esthetician"&gt;esthetician&lt;/a&gt; and she mentioned a conversation she&amp;#8217;d had with someone recently, who had begun asking about &amp;#8216;food-grade&amp;#8217; &lt;a href="http://en.wikipedia.org/wiki/Hydrogen_peroxide"&gt;hydrogen peroxide&lt;/a&gt;. With some further investigation, the person said that they had heard anecdotal evidence (my words) of a man who drank food-grade hydrogen peroxide to make him healthier, and that he had lost weight because of this practice, however, the health food store where this person found the product indicated they&amp;#8217;d only used it for cleaning tables. Knowing what this person was planning, my friend said that she didn&amp;#8217;t know where to find the product, and had to offer to talk to a nurse client about the practice in order to convince this person not to run out and start drinking the hydrogen peroxide.&lt;/p&gt;

&lt;p&gt;My first question was what &lt;em&gt;is&lt;/em&gt; food-grade hydrogen peroxide? According to the website &lt;a href="http://www.foodgradeh2o2.com/"&gt;foodgradeh2o2.com&lt;/a&gt;, it appears to be a 35% solution of h2o2 (what you buy in the drug store is usually only 3%), and they claim that the &amp;#8216;stabilizers in it are not the toxic stabilizers used in industrial and pharmaceutical grades of hydrogen peroxide&amp;#8217;. I&amp;#8217;ve been able to find absolutely no documentation for the stabilizers used in &amp;#8216;pharmaceutical grade&amp;#8217; hydrogen peroxide, but given that we often apply this stuff to open wounds, I can&amp;#8217;t imagine that they&amp;#8217;re that bad.&lt;/p&gt;

&lt;p&gt;Of course, in addition to people talking about using hydrogen peroxide for weight loss, there are also sites that talk about using hydrogen peroxide for &lt;a href="http://www.cancertutor.com/Cancer/HydrogenPeroxide.html"&gt;cancer treatment&lt;/a&gt;, which apparently works both via ingestion and injection. The basis for this is the idea of &amp;#8216;oxygen therapy&amp;#8217;, which, incidentally, the &lt;a href="http://www.cancer.org/docroot/ETO/content/ETO_5_3X_Oxygen_Therapy.asp?sitearea=ETO"&gt;American Cancer Society does not advocate&lt;/a&gt;, and in fact claims has been linked to several deaths.&lt;/p&gt;

&lt;p&gt;Hydrogen Peroxide has some solid uses, like as a disinfectant, stain remover and bleaching agent. But the way Hydrogen Peroxide accomplishes these tasks chemically, should make &lt;em&gt;anyone&lt;/em&gt; wary of using this stuff internally. When the chemical, H&lt;sub&gt;2&lt;/sub&gt;O&lt;sub&gt;2&lt;/sub&gt;, breaks down it generally results in 2H&lt;sub&gt;2&lt;/sub&gt;O&lt;sub&gt;2&lt;/sub&gt; -&gt; 2H&lt;sub&gt;2&lt;/sub&gt;O + O&lt;sub&gt;2&lt;/sub&gt;, part of why it makes such a great &lt;a href="http://www.wisegeek.com/can-hydrogen-peroxide-really-be-used-as-rocket-fuel.htm"&gt;rocket fuel&lt;/a&gt;, but it also means that there is a &lt;em&gt;lot&lt;/em&gt; of free oxygen running around, just looking for atoms to rip electrons from (remember, &amp;#8216;oxidation&amp;#8217; is just another name for rust!). Yes, we do use this tendency of oxygen to rip electrons from atoms to generate our energy we use, but there are a &lt;em&gt;lot&lt;/em&gt; of dangers to over-exposure to oxygen.  That bubbling you see when you put hydrogen peroxide on a fresh blood stain (or cut for that matter)? That&amp;#8217;s caused by cells rupturing as the oxygen released when the peroxide decomposes begins tearing apart proteins and cell membranes.&lt;/p&gt;

&lt;p&gt;Food-Grade Hydrogen Peroxide &lt;em&gt;might&lt;/em&gt; have better stabilizers in it than what&amp;#8217;s available at the pharmacy, but I&amp;#8217;m not entirely sure. And the chemical can often serve as a better replacement for chlorine bleach as a cleaning agent, but what drinking it is doing to you internally (if it causes weight-loss at all, it&amp;#8217;s probably because it prevents your body from actually absorbing nutrients after a long time ingesting it), is pretty much exactly what it&amp;#8217;s doing when used externally. Tearing cells open. Denaturing proteins. &lt;a href="http://www.greenlivingtips.com/articles/64/1/Hydrogen-peroxide-tips.html"&gt;Use it to clean and disinfect&lt;/a&gt;, but anything that &lt;em&gt;can&lt;/em&gt; be used to kill bacteria, is going to cause you problems internally, and should be treated with care.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/_T4umYnOb80" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/food-grade-hydrogen-peroxide.html</feedburner:origLink></entry>

<entry>
    <title>Corporate Charity Crappiness</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/0ql2XVu4ZXI/corporate-charity-crappiness.html" />
    <id>tag:blog.foxxtrot.net,2009://1.362</id>

    <published>2009-10-24T01:35:37Z</published>
    <updated>2009-10-24T01:39:51Z</updated>

    <summary>I’ve got a pet peeve regarding the way large companies handle their charitable donations. Mostly, that they use the fact that they are considering being charitable as a means to drive direct sales of their products. Like Yoplait’s Save Lids...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Life" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="charity" label="Charity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="company" label="Company" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="corporation" label="Corporation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="shittiness" label="Shittiness" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;I&amp;#8217;ve got a pet peeve regarding the way large companies handle their charitable donations. Mostly, that they use the fact that they are considering being charitable as a means to drive direct sales of their products. Like Yoplait&amp;#8217;s &lt;a href="http://www.yoplait.com/slsl/default.aspx"&gt;Save Lids to Save Lives&lt;/a&gt; campaign, or Dawn&amp;#8217;s &lt;a href="http://www.dawn-dish.com/en_US/savingwildlife/home.do"&gt;1 bottle = $1 to save wildlife campaign&lt;/a&gt;. Okay, so instead of just donating a sum of money to charity and making announcements about that to try to drive sales, they make you buy their product in order to donate a small sum of money per sale. Fine.&lt;/p&gt;

&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aUkOgE4K7j4&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aUkOgE4K7j4&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="mt-enclosure mt-enclosure-image" style="display: inline;"&gt;&lt;img alt="Dawn Donation's 2009" src="http://blog.foxxtrot.net/2009/10/23/Dawn_donation.png" width="187" height="113" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /&gt;&lt;/span&gt;What bothers me more are all the caveats they put on the donation.  Yoplait requires you to collect the lids and &lt;em&gt;mail&lt;/em&gt; them to them. Dawn requires you to go to their website and enter a code to &amp;#8216;activate your donation&amp;#8217;. Look, I&amp;#8217;m not the one donating to charity. You are. Track you god damn sales, and figure things out that way. These companies are hiding behind these processes which &lt;em&gt;most people&lt;/em&gt; aren&amp;#8217;t going to follow through on (people are lazy about this shit, I know I am), in order to try to keep from actually having to donate. According to &lt;a href="http://www.dawn-dish.com/en_US/savingwildlife/faq.do"&gt;Dawn&amp;#8217;s FAQ&lt;/a&gt; their donation program ran from July 1, 2009 to October 1, 2009. Their donation counter as of right now? $126,991. You can fucking bet that Dawn has sold more bottles of their dish detergent than that over third quarter of this year. &lt;/p&gt;

&lt;p&gt;Even worse, as far as I&amp;#8217;m concerned, is that these companies then put these artifical caps on their donation size. For Dawn, it was $500,000 (not that they even came close). For Yoplait, it&amp;#8217;s $1,500,000, and that&amp;#8217;s at $0.10 per lid. That means they need to recieve &lt;strong&gt;fifteen million&lt;/strong&gt; lids to reach that figure. And after that? Fuck you, breast cancer. So what, the company can afford to donate $0.10 per lid they recieve up to fifteen million sales, but not a dime after? Now, Yoplait has guaranteed a minimum donation of $500,000, which is awesome, but I&amp;#8217;ll be really interested to see what their final donation is, after all this is said and done.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m all for corporate sponsorship of charity. And I have no problem with these companies making a big deal of the fact that they&amp;#8217;re donating to charity. But imposing artificial limits on their donation, and requiring me to jump through hoops for them to make these donations is flat ridiculous and dishonest. Make a promise to donate a percentage of all sales or profits over a given timeframe to a given charity. Great. But don&amp;#8217;t create extra work for your customers, who you know full well are unlikely to follow through, in order to try to get the PR boost for being charitable, when in reality, you&amp;#8217;re probably going to be donating a lot less than you imply in your marketing and outside of the fine print on your advertising and labeling. That&amp;#8217;s just being dishonest. At least in Yoplait&amp;#8217;s case, they&amp;#8217;re a lot more upfront about the requirement to mail in lids, and the max donation, then I ever saw on Dawn&amp;#8217;s advertising. &lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/0ql2XVu4ZXI" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/corporate-charity-crappiness.html</feedburner:origLink></entry>

<entry>
    <title>JSON Encoding of .NET Objects</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/lK8xrF-6eD4/json-encoding-of-net-objects.html" />
    <id>tag:blog.foxxtrot.net,2009://1.361</id>

    <published>2009-10-22T17:00:54Z</published>
    <updated>2009-10-22T17:03:04Z</updated>

    <summary>For a recent project, it was a user requirement that we be able to save a snapshot of some statistical data on demand. I decided that the best way to do this would be by saving a JSON representation of...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="net" label=".NET" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="c" label="C#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="json" label="JSON" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="Web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;For a recent project, it was a user requirement that we be able to save a snapshot of some statistical data on demand. I decided that the best way to do this would be by saving a JSON representation of the data, since I was going to be providing a JavaScript method to render the data, and for comparisons, at a later date. I knew that .NET had a mechanism to convert an object to JSON, because ASP.NET MVC has a JsonResult object that returns data as a JSON string to the client via the browser. However, my Google-Fu failed me, and my searches didn&amp;#8217;t return the mechanism to do this.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m using .NET 3.5, and I was &lt;em&gt;appalled&lt;/em&gt; at the difficulty I was having, especially since ASP.NET AJAX is standard in .NET 3.5. But all I kept finding were items off the list of C# parsers from the &lt;a href="http://json.org/"&gt;json.org&lt;/a&gt;. Those libraries and projects are probably fine, but I was trying to avoid adding a new dependency, and again, I knew this had to be possible in core .NET 3.5.&lt;/p&gt;

&lt;p&gt;After cracking open the &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33836"&gt;MS-PL source for ASP.NET MVC&lt;/a&gt;, I found my answer: The &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx"&gt;JavaScript Serializer&lt;/a&gt; class!&lt;/p&gt;

&lt;p&gt;Now, JSON is a data-interchange format that &lt;em&gt;happens&lt;/em&gt; to be syntactically compatible for JavaScript, so I think that name sucks, since I&amp;#8217;m storing this data as JSON, but fine Microsoft, call it what you will. And using the class is dead simple.&lt;/p&gt;

&lt;pre style="code c-sharp"&gt;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string json_string = serializer.Serialize(_model.getData());
DataObject obj = serializer.Deserialize&amp;lt;DataObject&gt;(json_string);
&lt;/pre&gt;

&lt;p&gt;I&amp;#8217;m not completely happy with this API. My first reaction was that I shouldn&amp;#8217;t have to instantiate the JavaScriptSerializer class at all. Apparently this requirement is because I can define a custom &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascripttyperesolver.aspx"&gt;JavaScriptTypeResolver&lt;/a&gt; to aide the serializer in converting my object to a JSON string, but I would still like to see a Singleton implementation of the JavaScript Serializer that allows me to call the Serialize and Deserialize with the default type resolver, but given that this doesn&amp;#8217;t appear to be changing for .NET 4.0, I should probably just get over it.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/lK8xrF-6eD4" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/json-encoding-of-net-objects.html</feedburner:origLink></entry>

<entry>
    <title>Angel Financing and Pitch Fees</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/Zf0xufhTuhU/angel-financing-and-pitch-fees.html" />
    <id>tag:blog.foxxtrot.net,2009://1.360</id>

    <published>2009-10-13T22:40:12Z</published>
    <updated>2009-10-13T22:41:30Z</updated>

    <summary>Jason Calacanis has been on a crusade lately, one which I can fully back. Frankly, this was something of a surprise, since I’m generally debating unfollowing Calacanis on Twitter, and his voice grates on my ears from too many episodes...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Business" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="investments" label="Investments" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="startups" label="Startups" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;&lt;a href="http://www.calacanis.com/"&gt;Jason Calacanis&lt;/a&gt; has been on a crusade lately, one which I can fully back. Frankly, this was something of a surprise, since I&amp;#8217;m generally debating unfollowing Calacanis on Twitter, and his voice grates on my ears from too many episodes of &lt;a href="http://twit.tv/"&gt;This Week in Tech&lt;/a&gt; where I grew to tire of his elitist attitude. While I acknowledge and respect his success, I&amp;#8217;m generally far less sure about him being right than he is.&lt;/p&gt;

&lt;p&gt;That said, I really like Calacanis&amp;#8217; focus on helping startups. He&amp;#8217;s been involved with &lt;a href="http://www.techcrunch50.com/"&gt;TechCrunch50&lt;/a&gt; in the past, and lately he&amp;#8217;s begun a crusade against Angel Investors who actually &lt;em&gt;&lt;a href="http://calacanis.com/2009/10/09/why-startups-shouldnt-have-to-pay-to-pitch-angel-investors/"&gt;charge startups to pitch&lt;/a&gt;&lt;/em&gt;, including a &lt;a href="http://calacanis.com/2009/10/13/and-now-some-smoking-guns-or-part-two-of-angels-that-charge/"&gt;followup where he discusses that one of the firms is threatening to sue him for telling the truth and expressing an opinion in an ugly fashion&lt;/a&gt;, something I can &lt;a href="http://blog.foxxtrot.net/2009/01/food-safety-and-accountability.html"&gt;certianly relate to&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why is it so unreasonable to charge investors to present? Simply because these &lt;em&gt;angel&lt;/em&gt; investors (a term I consider to be somewhat dishonest) are usually given a pretty significant share in a company in exchange for their investment. I&amp;#8217;m not saying this isn&amp;#8217;t a &lt;em&gt;deserved&lt;/em&gt; share, this is after all an investment, but these investors are looking to make money, plain and simple, and startups happens to be a pretty good way to potentially turn a good profit. Sure, there is more risk, but when a startup pays out, it pays out big, generally.&lt;/p&gt;

&lt;p&gt;Anyway, enough complaining about the term &amp;#8216;Angel&amp;#8217;. The fact is these investors occupy a really import market segment. Of course, reading some of these rebuttals, it seems that the people charging are firms that represent investors, not the investors themselves, which says to me that they simply have a flawed business model.&lt;/p&gt;

&lt;p&gt;Ultimately, what&amp;#8217;s coming out of Calacanis&amp;#8217; post is simple: If you&amp;#8217;re a startup, looking for venture capital, don&amp;#8217;t pitch to &lt;em&gt;any&lt;/em&gt; organization which requires fees to pitch, or put you in contact with investors. Investors &lt;em&gt;want&lt;/em&gt; to invest their money in startups they believe in. Sure, finding investors can be difficult, but starting with people like Jason Calacanis, who know a lot of VCs, or any of the investors on the panels at TechCrunch50.&lt;/p&gt;

&lt;p&gt;When you&amp;#8217;re chasing a dream, make sure you don&amp;#8217;t get screwed in the process.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/Zf0xufhTuhU" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/angel-financing-and-pitch-fees.html</feedburner:origLink></entry>

<entry>
    <title>Know Your Farmer, Know Your Food</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/GhswC1IevXU/know-your-farmer-know-your-food.html" />
    <id>tag:blog.foxxtrot.net,2009://1.359</id>

    <published>2009-10-12T22:19:21Z</published>
    <updated>2009-10-12T22:19:56Z</updated>

    <summary>I’ll admit, I was skeptical when Tom Vilsack was appointed US Secretary of Agriculture. Vilsack’s entire political career had been from the heart of the corn belt. He’s a noted supporter of corn-based ethanol. In short, he seemed like another...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Food" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="farmer" label="Farmer" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="food" label="Food" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="local" label="Local" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="regional" label="Regional" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tomvilsack" label="Tom Vilsack" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="usda" label="USDA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;I&amp;#8217;ll admit, I was skeptical when &lt;a href="http://en.wikipedia.org/wiki/Tom_Vilsack"&gt;Tom Vilsack&lt;/a&gt; was appointed US Secretary of Agriculture. Vilsack&amp;#8217;s entire political career had been from the heart of the corn belt. He&amp;#8217;s a noted supporter of corn-based ethanol. In short, he seemed like another Big-Ag shill who had taken over the chief role in US farm policy.&lt;/p&gt;

&lt;p&gt;It appears I was wrong.&lt;/p&gt;

&lt;p&gt;While I wouldn&amp;#8217;t say that Vilsack is &lt;em&gt;anti&lt;/em&gt;-big agriculture, he&amp;#8217;s done a lot of work &lt;a href="http://www.fns.usda.gov/cga/PressReleases/2009/PR-0134.htm"&gt;promoting farmer&amp;#8217;s markets&lt;/a&gt;, and other activities that I &lt;em&gt;do&lt;/em&gt; support, including the USDA&amp;#8217;s new &amp;#8220;&lt;a href="http://www.usda.gov/wps/portal/knowyourfarmer?navid=KNOWYOURFARMER"&gt;Know Your Farmer&lt;/a&gt;&amp;#8221; campaign, which provides support to small-scale local farmers, and even talks about the health importance of a diet based more around fresh fruits and vegetables and meats than the processed fare that many Americans, especially lower-income families, live on today.&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Tms8ye8mw_k&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Tms8ye8mw_k&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

&lt;p&gt;Now, I&amp;#8217;m still not a supporter of this administration. I think that the USDA needs to do &lt;em&gt;more&lt;/em&gt; to revamp the agricultural system, but the work that is being done to encourage the development of local and regional food systems is exciting, and needs to be encouraged.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/GhswC1IevXU" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/know-your-farmer-know-your-food.html</feedburner:origLink></entry>

<entry>
    <title>Classic Adventuring in JavaScript</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/ULTCFA09N4M/classic-adventuring-in-javascript.html" />
    <id>tag:blog.foxxtrot.net,2009://1.358</id>

    <published>2009-10-09T17:45:22Z</published>
    <updated>2009-10-09T17:45:51Z</updated>

    <summary>Ajaxian more than earned it’s spot on my RSS Reader this week when they told me about sarien.net. Now, if you’re around my age, you have really fond memories of the old Sierra Adventure games, and sarien.net is the perfect...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Games" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="canvas" label="Canvas" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="games" label="Games" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="internet" label="Internet" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;&lt;a href="http://ajaxian.com/"&gt;Ajaxian&lt;/a&gt; more than earned it&amp;#8217;s spot on my &lt;a href="http://www.google.com/reader/"&gt;RSS Reader&lt;/a&gt; this week when they told me about &lt;a href="http://sarien.net/"&gt;sarien.net&lt;/a&gt;. Now, if you&amp;#8217;re around my age, you have really fond memories of the old Sierra Adventure games, and sarien.net is the perfect way to honor these classic games, by making them playable &lt;em&gt;in your web browser&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Now, there have been other &lt;a href="http://www.playnes.net/flashgames/5/Puzzle"&gt;browser-based retro gaming sites&lt;/a&gt;, but in this case, it&amp;#8217;s implemented in JavaScript and Canvas. Of course, this means it only works in new browsers (Safari 4, Firefox 3+, etc), and that it &lt;em&gt;doesn&amp;#8217;t&lt;/em&gt; work in IE at all, but this is a seriously cool hack.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://martinkool.com/"&gt;Martin Kool&lt;/a&gt;, the guy behind the site, has a &lt;a href="http://sarien.net/about"&gt;pretty decent write-up about the tech&lt;/a&gt;, though I&amp;#8217;d like some more techy-details, that I&amp;#8217;ll have to go to the &lt;a href="http://sarien.net/source"&gt;source&lt;/a&gt; for.&lt;/p&gt;

&lt;p&gt;So, how&amp;#8217;s it work?  Well, Martin has extracted the data files from the old Sierra games, and run them through a special parser that converts the AGI code to JavaScript. This is no small feat, really, as JavaScript has no support for things that AGI requires (like GOTO), and using the Canvas support in modern browsers to render the images. He does add support for the &lt;a href="http://code.google.com/p/q42multiplayer"&gt;Q42 multiplayer engine&lt;/a&gt; developed at the company he works for so that you can visit with other players while you&amp;#8217;re playing, though I&amp;#8217;m unsure how interested I am in that, luckily, you can turn that bit off.&lt;/p&gt;

&lt;p&gt;Martin&amp;#8217;s rewrite of the javascript code, converts the application into an enormous switch-case block which allows a reasonable equivalent to the &amp;#8216;goto&amp;#8217; that AGI uses. I haven&amp;#8217;t had a chance to analyze the exporter, so I can&amp;#8217;t say much about it, but I agree with Martin, that I hope Activision-Blizzrd (the current copyright holders of the old Sierra games) allow this site to remain as what it is, a beautiful shrine to these fantastic games, and hopefully it might encourage more movement on the adventure game front in the modern world.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/ULTCFA09N4M" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/classic-adventuring-in-javascript.html</feedburner:origLink></entry>

<entry>
    <title>Flock of Dodos</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/kcOgfJy6tVI/flock-of-dodos.html" />
    <id>tag:blog.foxxtrot.net,2009://1.357</id>

    <published>2009-10-08T15:00:00Z</published>
    <updated>2009-10-07T22:37:45Z</updated>

    <summary>Randy Olson earned his Ph.D. in Biology from Harvard University in 1984 as an environmental ecologist, primarily in reef ecology. In the late 90s, he decided to go into film making, and caught a lot of attention for 2006’s “Flock...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Movies" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="behe" label="Behe" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="education" label="education" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="evolution" label="evolution" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="intelligentdesign" label="Intelligent Design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movies" label="movies" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reviews" label="reviews" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="science" label="science" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Randy_Olson"&gt;Randy Olson&lt;/a&gt; earned his Ph.D. in Biology from Harvard University in 1984 as an environmental ecologist, primarily in reef ecology. In the late 90s, he decided to go into film making, and caught a lot of attention for 2006&amp;#8217;s &amp;#8220;&lt;a href="http://www.flockofdodos.com/"&gt;Flock of Dodos: The Evolution - Intelligent Design Debate&lt;/a&gt;&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Okay, so it&amp;#8217;s a documentary about the &amp;#8216;debate&amp;#8217; between ID and Evolution from a guy who, quite simply, firmly knows that Evolution takes place. It&amp;#8217;s probably stands up to logical rigor as well as Michael Moore on a treadmill, right?&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll admit a bit of bias, in that I find the &amp;#8216;debate&amp;#8217; around Evolution ridiculous, but Olson gives the ID people ample time to try to convince him of their world view in his movie. Probably close to 75% of the movie centers around discussions with ID proponents, and they generally are glad, and quick, to show how little they truly understand about modern evolutionary theory.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll be getting to that part in a bit, but I will say that Olson, for his part, doesn&amp;#8217;t let the evolutionary biologists off free and clear. He paints an, unfortunately somewhat accurate, portrait of the modern evolutionary biologist as a older, white male, who is completely incapable of expressing their work in reasonable terms, and who tends to become belligerent when presented with someone who doesn&amp;#8217;t accept a well-understood (by those who&amp;#8217;ve read &lt;em&gt;any&lt;/em&gt; of the literature, at least) scientific fact like evolution.&lt;/p&gt;

&lt;p&gt;In fact, both sides of the argument fail to provide a rigorous platform with which to convince people of their cause. The ID proponents use ridiculous comparisons and poor science to push their agenda, while the scientific establishment has tried to pretend these people don&amp;#8217;t exist in the modern age. Sadly, these people &lt;em&gt;do&lt;/em&gt; exist, and so do people who &lt;a href="http://www.theflatearthsociety.org/"&gt;honestly believe that the Earth is flat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The core argument that the ID proponents put forward is that &lt;em&gt;Darwinian Evolution&lt;/em&gt; can&amp;#8217;t explain everything. Which is certainly true. But then, Darwin didn&amp;#8217;t really try all that hard to describe &lt;em&gt;how&lt;/em&gt; common descent began, and Darwin&amp;#8217;s &lt;a href="http://en.wikipedia.org/wiki/The_Origin_of_Species"&gt;On the Origin of Species&lt;/a&gt; was published 150 years ago (next month, actually). To suggest, as ID proponents surreptitiously do, that evolutionary theory hasn&amp;#8217;t progressed in 15 decades, is ridiculous. In fact, the biological community no longer believes with one of the core ideas presented in &amp;#8220;Origin&amp;#8221;, that the primary driver of evolution was &amp;#8216;survival of the fittest&amp;#8217;. Certainly that&amp;#8217;s viewed as &lt;em&gt;a&lt;/em&gt; driver, but not as the most important one.&lt;/p&gt;

&lt;p&gt;The, there is &lt;a href="http://en.wikipedia.org/wiki/Michael_Behe"&gt;Michael Behe&lt;/a&gt;, a well respected biochemist, who is basically responsible for the modern face of Intelligent Design. I&amp;#8217;ve seen Behe speak, the &lt;a href="http://sciphre.org/"&gt;video from the talk being available online&lt;/a&gt;. Behe is, as one might expect, the consummate Intelligent Design proponent. He mentions that he&amp;#8217;s a professor at &lt;a href="http://www.lehigh.edu/"&gt;Lehigh University&lt;/a&gt;, but that his department clearly &lt;a href="http://www.lehigh.edu/~inbios/news/evolution.htm"&gt;states that they disagree with him on the issue of Intelligent Design&lt;/a&gt;, regarding it as unscientific.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s not so much that he mentions this, but how he mentions it that&amp;#8217;s offensive. He says it, to suggest that he is somehow being persecuted by his peers, when really, if he was being truly persecuted, he wouldn&amp;#8217;t likely even &lt;em&gt;be&lt;/em&gt; on the faculty at Lehigh anymore. All his department has done is said that, while they respect Behe, and his science, they don&amp;#8217;t believe the Intelligent Design is science, and don&amp;#8217;t want his affiliation with Lehigh to lend credibility to it.&lt;/p&gt;

&lt;p&gt;Why doesn&amp;#8217;t the Biology Faculty at Lehigh University believe that Intelligent Design is Science? Because it isn&amp;#8217;t. Science is defined as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The collective discipline of study or learning acquired through the scientific method; the sum of knowledge gained from such methods and discipline.&lt;/li&gt;
&lt;li&gt;A particular discipline or branch of learning, especially one dealing with measurable or systematic principles rather than intuition or natural ability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Intelligent Design fails to live up to either of these definitions. The most trumpeted principle used by ID proponents, &lt;a href="http://en.wikipedia.org/wiki/Irreducible_complexity"&gt;irreducible complexity&lt;/a&gt;, states that some systems are too complex to have been arrived at via gradual evolution, and small steps and changes over time. Behe&amp;#8217;s favorite example of this one, is that of a &lt;a href="http://en.wikipedia.org/wiki/Flagella"&gt;flagella&lt;/a&gt;, specifically the &lt;a href="http://en.wikipedia.org/wiki/File:Flagellum_base_diagram_en.svg"&gt;protein &amp;#8216;motor&amp;#8217; that drives the filament&lt;/a&gt;. Admittedly, this is a complex mechanism, one that, to my knowledge, Science is currently unable to explain the origin of. However, that &lt;em&gt;doesn&amp;#8217;t&lt;/em&gt; make irreducible complexity a scientific principle.&lt;/p&gt;

&lt;p&gt;Science, and the scientific method, are based around asking questions. Even after Darwin wrote &amp;#8220;Origin&amp;#8221;, there were a lot of things he didn&amp;#8217;t understand. Darwin didn&amp;#8217;t know the &lt;em&gt;mechanism&lt;/em&gt; by which traits were passed from parents to offspring, but we&amp;#8217;ve answered that question, because someone formed some intuition that they could then measure and test via &amp;#8216;systematic principles&amp;#8217;. Irreducible Complexity says &amp;#8220;I don&amp;#8217;t know how this happened, so clearly, it must have been implanted by some sort of designer.&amp;#8221; That&amp;#8217;s not science. That&amp;#8217;s anti-science, and a classic application of the logical falacy of &amp;#8216;&lt;a href="http://en.wikipedia.org/wiki/Argument_from_ignorance"&gt;argumentum ad ignorantiam&lt;/a&gt;&amp;#8217;.&lt;/p&gt;

&lt;p&gt;This is also to ignore the outright &lt;em&gt;lies&lt;/em&gt; that ID proponents will tell in order to push their agenda. The focusing on the term &amp;#8216;theory of evolution&amp;#8217;, even though in Science and Mathematics, something can only earn the title &amp;#8216;Theory&amp;#8217;, when it has passed scientific rigor to the point where it is universally accepted. The lies which talk about &lt;a href="http://en.wikipedia.org/wiki/Ernst_Haeckel"&gt;Ernst Haeckel&lt;/a&gt;&amp;#8217;s embryo drawings as if they were still being used in modern teaching. In the movie, Olson takes an embryology text book on the bookshelf of the gentleman he&amp;#8217;s talking to who is making this claim about Haeckel&amp;#8217;s embryos, and &lt;em&gt;they can&amp;#8217;t even find a mention of Haeckel in the book&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Intelligent Design &lt;em&gt;has&lt;/em&gt; to assume that science has stood still for the century or more, because it&amp;#8217;s the only way the are able to put together a wide breadth of arguments into the failures (or more accurately, misunderstandings) of evolutionary theory.&lt;/p&gt;

&lt;p&gt;What people need to understand is that science doesn&amp;#8217;t exclude the existence of God, or a Creator. It simply doesn&amp;#8217;t &lt;em&gt;presuppose&lt;/em&gt; such existence. It seems to me that because they don&amp;#8217;t make that presupposition, because a scientific universe &lt;em&gt;could&lt;/em&gt; exist without some sort of divine outer influence, many people believe that it completely precludes the possibility of divinity. And certainly there are some &lt;a href="http://en.wikipedia.org/wiki/Richard_Dawkins"&gt;vocal members of the scientific community who routinely mock the faithful&lt;/a&gt;, but for most in the community, the existence of God simply isn&amp;#8217;t &lt;em&gt;relevant&lt;/em&gt; to the work that their doing.&lt;/p&gt;

&lt;p&gt;Ultimately, part of the reason ID has gained so much traction is that it&amp;#8217;s simply better marketed, in part because the scientific community felt they didn&amp;#8217;t need to defend themselves against it&amp;#8217;s claims. We need to support groups, like the &lt;a href="http://www.ncseweb.org/"&gt;National Center for Science Education&lt;/a&gt;, who seek to defend the teaching of science from the illogical attacks from Intelligent Design, and other fundamentally religious arguments. They are under funded compared to their opposition, however, but you can &lt;a href="http://ncseweb.org/membership"&gt;join for as little as $30 per year&lt;/a&gt;, a perfectly reasonable amount to try to change science education in this country for the better.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/kcOgfJy6tVI" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/flock-of-dodos.html</feedburner:origLink></entry>

<entry>
    <title>Undoing a Lockout on an Android Phone</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/ZSVJ3wyOXac/undoing-a-lockout-on-an-android-phone.html" />
    <id>tag:blog.foxxtrot.net,2009://1.356</id>

    <published>2009-10-06T15:00:00Z</published>
    <updated>2009-10-05T21:25:28Z</updated>

    <summary>Over the weekend I ran into a major problem with my Android-based phone. While we were moving into our new condo, I had the phone in my pocket, and had somehow triggered the touch screen pattern-unlock mechanism, and proceeded to...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Security" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="Android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="security" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sql" label="SQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;Over the weekend I ran into a major problem with my Android-based phone. While we were moving into our new condo, I had the phone in my pocket, and had somehow triggered the touch screen pattern-unlock mechanism, and proceeded to accidentally lock out my phone badly enough that it was demanding my username and password to unlock the device.&lt;/p&gt;

&lt;p&gt;Unfortunately, I apparently can&amp;#8217;t remember that password.&lt;/p&gt;

&lt;p&gt;Fortunately, if you have debugging over USB enabled, you can hack your way into the phone.&lt;/p&gt;

&lt;p&gt;Yes, this is a security vulnerability, but most any device has some security problems when you have physical access to it, and at least in this case, you have to enable USB Debugging, which is only enabled by default on developer firmwares.&lt;/p&gt;

&lt;p&gt;To perform this fix, you need to have the &lt;a href="http://developer.android.com/sdk/index.html"&gt;Android SDK&lt;/a&gt;, and your phone needs to appear on the output of &lt;code&gt;adb devices&lt;/code&gt;. Google provides a &lt;a href="http://developer.android.com/guide/developing/device.html"&gt;Windows Driver&lt;/a&gt;, and most Linux distributions should work fine.  Once you have the device attached, just execute the following.&lt;/p&gt;

&lt;pre style="code sh"&gt;
$ adb -d shell
# sqlite3 data/data/com.android.providers.settings/databases/settings.db    
sqlite&gt; update system set value=0 where name='lockscreen.lockedoutpermanently';
sqlite&gt; .exit
# exit
&lt;/pre&gt;

&lt;p&gt;The effect should be almost immediate. Press the &amp;#8216;Menu&amp;#8217; button on your phone, and you&amp;#8217;ll be prompted for your pattern. If you&amp;#8217;ve, for some reason, forgotten what your pattern is, you can follow &lt;a href="http://forum.xda-developers.com/showthread.php?t=485988"&gt;these instructions&lt;/a&gt; to disable the pattern prompt, which was the basis for my solution.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/ZSVJ3wyOXac" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/undoing-a-lockout-on-an-android-phone.html</feedburner:origLink></entry>

<entry>
    <title>Home Ownership The DIY-Way</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/qkZWpcs_Lew/home-ownership-the-diy-way.html" />
    <id>tag:blog.foxxtrot.net,2009://1.355</id>

    <published>2009-10-05T21:04:58Z</published>
    <updated>2009-10-05T21:07:06Z</updated>

    <summary>My wife, Catherine, and I have finally had a chance to move into the Condo we bought two months ago. Needless to say, I’m exhausted today, but the reason it’s taken so long for us to get our stuff into...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Homeownership" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;My wife, Catherine, and I have finally had a chance to move into the Condo we bought two months ago. Needless to say, I&amp;#8217;m exhausted today, but the reason it&amp;#8217;s taken so long for us to get our stuff into this place is simply the sheer amount of work we needed to do.&lt;/p&gt;

&lt;p&gt;We had to replace the carpet, with a beautiful hardwood floor, including new trim. We had to repaint the walls (which has been painted with a really lousy paint). I had to fix the toilet which started leaking last week after the place had been empty for eighteen months. We had to replace the curtains, which smelled as bad as the ugly carpet, as the previous owner had apparently smoked cigars regularly in the space. This list seems short, but there are many smaller projects that I can&amp;#8217;t really name at the moment. Worse, it pales in comparison to all the other projects that we want to do.&lt;/p&gt;

&lt;p&gt;&lt;span class="mt-enclosure mt-enclosure-image" style="display: inline;"&gt;&lt;img alt="Black and Decker Photo Guide to Home Repair" src="http://blog.foxxtrot.net/2009/10/05/black-decker-home-repair-cover.jpg" width="232" height="300" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /&gt;&lt;/span&gt;Monday has generally been my &amp;#8216;sustainability&amp;#8217; posts, which I hope to be able to talk more about in the future as we settle into the new place, but I&amp;#8217;m going to be working in posts about the repairs and additions that we make into our new condo. My parents had given me the &lt;a href="http://search.barnesandnoble.com/Black-and-Decker-Complete-Photo-Guide-to-Home-Repair/Editors-of-creative-Publishing/e/9781589234178/?itm=5&amp;amp;usri=Home+Repair"&gt;Black and Decker Complete Photo Guide to Home Repair&lt;/a&gt; which has helped be a guide to many of the projects that we&amp;#8217;ve taken on, and certainly many more we will be. It&amp;#8217;s a good guide, and I&amp;#8217;d recommend it based on my experience with it.&lt;/p&gt;

&lt;p&gt;Some coming posts I have regard said broken toilet, freeing heavily rusted pipe fittings, replacing a bathroom ceiling fan, some wiring stuff. Really, I&amp;#8217;ve got an insane amount of work I want to do, and no doubt, each new project will result in a new post here. This is still, and will remain, a primarily technology blog. But this content has a place as well, and I certainly hope it will help someone else.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/qkZWpcs_Lew" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/10/home-ownership-the-diy-way.html</feedburner:origLink></entry>

<entry>
    <title>Derived Property Data Binding in Silverlight</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/ScLIQwVe92Q/derived-property-data-binding-in-silverlight.html" />
    <id>tag:blog.foxxtrot.net,2009://1.354</id>

    <published>2009-09-29T22:27:29Z</published>
    <updated>2009-09-29T22:29:53Z</updated>

    <summary>For our Silverlight-based Schedule Proofing application at work, we have a special requirement for Summer Session, where they have course ‘blocks’, or a set of predefined dates beyond just ‘full term’ and ‘whatever’. This required a few interesting blocks, but...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="c" label="C#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="events" label="Events" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linq" label="LINQ" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="silverlight" label="Silverlight" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xaml" label="XAML" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;For our &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;-based Schedule Proofing application at work, we have a special requirement for Summer Session, where they have course &amp;#8216;blocks&amp;#8217;, or a set of predefined dates beyond just &amp;#8216;full term&amp;#8217; and &amp;#8216;whatever&amp;#8217;. This required a few interesting blocks, but mostly, it required some interesting tweaks related to data binding, that unfortunately, I had to do in code.&lt;/p&gt;

&lt;p&gt;The relevant XAML looks like this:&lt;/p&gt;

&lt;pre class="code xml"&gt;
&amp;lt;my:DataGrid x:Name="Selector"
            AutoGenerateColumns="False"
            HeadersVisibility="Column"
            GridLinesVisibility="None"
            IsReadOnly="True"
            Visibility="Visible"
            FontSize="11"
            RowDetailsVisibilityMode="VisibleWhenSelected"&gt;
    &amp;lt;my:DataGrid.Columns&gt;
        &amp;lt;my:DataGridTemplateColumn Header="Start Date"&gt;
            &amp;lt;my:DataGridTemplateColumn.CellTemplate&gt;
                &amp;lt;DataTemplate&gt;
                    &amp;lt;TextBlock Text="{Binding StartDate}" Margin="5,4,5,4"/&gt;
                &amp;lt;/DataTemplate&gt;
            &amp;lt;/my:DataGridTemplateColumn.CellTemplate&gt;
            &amp;lt;my:DataGridTemplateColumn.CellEditingTemplate&gt;
                &amp;lt;DataTemplate&gt;
                    &amp;lt;mye:DatePicker SelectedDate="{Binding StartDate, Mode=TwoWay}" /&gt;
                &amp;lt;/DataTemplate&gt;
            &amp;lt;/my:DataGridTemplateColumn.CellEditingTemplate&gt;
        &amp;lt;/my:DataGridTemplateColumn&gt;
        &amp;lt;my:DataGridTemplateColumn Header="End Date"&gt;
            &amp;lt;my:DataGridTemplateColumn.CellTemplate&gt;
                &amp;lt;DataTemplate&gt;
                    &amp;lt;TextBlock Text="{Binding EndDate}" Margin="5,4,5,4"/&gt;
                &amp;lt;/DataTemplate&gt;
            &amp;lt;/my:DataGridTemplateColumn.CellTemplate&gt;
            &amp;lt;my:DataGridTemplateColumn.CellEditingTemplate&gt;
                &amp;lt;DataTemplate&gt;
                    &amp;lt;mye:DatePicker SelectedDate="{Binding EndDate, Mode=TwoWay}" /&gt;
                &amp;lt;/DataTemplate&gt;
            &amp;lt;/my:DataGridTemplateColumn.CellEditingTemplate&gt;
        &amp;lt;/my:DataGridTemplateColumn&gt;
            &amp;lt;my:DataGridTemplateColumn.CellTemplate&gt;
                &amp;lt;DataTemplate&gt;
                    &amp;lt;TextBlock Text="{Binding BlockName}" Margin="5,4,5,4"/&gt;
                &amp;lt;/DataTemplate&gt;
            &amp;lt;/my:DataGridTemplateColumn.CellTemplate&gt;
            &amp;lt;my:DataGridTemplateColumn.CellEditingTemplate&gt;
                &amp;lt;DataTemplate&gt;
                    &amp;lt;ComboBox ItemsSource="{Binding TermInfo.Blocks}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedBlock, Mode=TwoWay}" /&gt;
                &amp;lt;/DataTemplate&gt;
            &amp;lt;/my:DataGridTemplateColumn.CellEditingTemplate&gt;
        &amp;lt;/my:DataGridTemplateColumn&gt;
    &amp;lt;/my:DataGrid.Columns&gt;
&amp;lt;/my:DataGrid&gt;
&lt;/pre&gt;

&lt;p&gt;The relevant portions of the data structure looks basically like this:&lt;/p&gt;

&lt;pre class="code c-sharp"&gt;
class SectionData
{
    private DateTime startDate;
    private DateTime endDate;
    private YearTerms termInfo;

    public YearTerms TermInfo
    {
        get
        {
            return termInfo;
        }
    }

    public DateTime StartDate {
        get { return startDate; }
        set
        {
            startDate = value;
            NotifyPropertyChanged("StartDate");
        }
    }
    public DateTime EndDate {
        get { return endDate; }
        set
        {
            endDate = value;
            NotifyPropertyChanged("EndDate");
        }
    }

    public SummerSessionBlock SelectedBlock
    {
        get
        {
            if (termInfo.Blocks == null) return null;

            var b = termInfo.Blocks.Where(q =&gt; q.Begin == startDate)
                .Where(q =&gt; q.End == endDate)
                .SingleOrDefault();
            return b ?? termInfo.Blocks.Where(q =&gt; q.Name == "Custom").Single();
        }
        set
        {
            var b = termInfo.Blocks.Where(q =&gt; q.Begin == startDate)
                .Where(q =&gt; q.End == endDate)
                .Any();
            if ((value.Name == "Custom" &amp;&amp; b) || value.Name != "Custom")
            {
                startDate = value.Begin;
                endDate = value.End;
            }
            NotifyPropertyChanged("Block");
            NotifyPropertyChanged("StartDate");
        }
    }

    public string BlockName
    {
        get
        {
            return SelectedBlock != null ? SelectedBlock.Name : string.Empty;
        }
    }
}

public class YearTerms
{
    public ObservableCollection&lt;SummerSessionBlock&gt; Blocks { get; set; }
}

public class SummerSessionBlock
{
    public int Year { get; set; }
    public int Term { get; set; }
    public string Name { get; set; }
    public DateTime Begin { get; set; }
    public DateTime End { get; set; }
}
&lt;/pre&gt;

&lt;p&gt;Alright, that&amp;#8217;s a lot of code, and most of it, I&amp;#8217;m not really going to address here, since I&amp;#8217;m assuming a basic understanding of &lt;a href="http://msdn.microsoft.com/en-us/library/ms752347.aspx"&gt;Data Binding&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms752914.aspx"&gt;Dependency Properties&lt;/a&gt;. Basically, all those NotifyPropertyChanged calls ensure that the UI gets updated. Also, the YearTerms.Blocks property will, in my case, be NULL for all terms that aren&amp;#8217;t a summer session.&lt;/p&gt;

&lt;p&gt;Now, since blocks don&amp;#8217;t mean anything outside of Summer Session, I don&amp;#8217;t want that column to be visible outside of that case. This isn&amp;#8217;t a big problem, since all the sections which will be viewed on one instance of this data grid will, by definition, be from the same term, however, attempts to use XAML DataBinding failed with XAML parsing errors.&lt;/p&gt;

&lt;pre style="code c-sharp"&gt;
    &amp;lt;my:DataGridTemplateColumn Header="Block"  Visibility="{Binding BlockName, Converter={StaticResource VVC}}"&gt;
&lt;/pre&gt;

&lt;p&gt;The VVC StaticResource just sets the Visibility to Hidden if BlockName is the empty string, Visible otherwise. As I said, this excepts with an obscure XAML parsing error. Unfortunately, things that can be quite simple in XAML can be a real pain in code when using Silverlight or (presumably) WCF. Partially because of how you have to identify the column.  The solution is fairly simple, when the DataContext of the DataGrid is modified, I simply determine what the visibility should be and call a function that sets the visibilty.&lt;/p&gt;

&lt;pre class="code c-sharp"&gt;
public void SetColumnVisibility(string columnHeader, Visibility visible)
{
    try {
        Selector.Columns.Where(c =&gt; c.Header.ToString() == columnHeader)
            .Single().Visibility = visible;
    } catch (Exception e) {
        throw new ArgumentException("Column '" + columnHeader + "' does not exist.");
    }
}
&lt;/pre&gt;

&lt;p&gt;Have I mentioned yet that &lt;a href="http://search.yahoo.com/search?p=LINQ+site%3Ablog.foxxtrot.net"&gt;I really love LINQ&lt;/a&gt;? This code is all wrapped up in a custom control, but I&amp;#8217;m debating converting this function to an extension method on the DataGrid, since nothing quite like it is offered. This function is called from the web service callback responsible for setting the data context on this control, and it ensures that users only see this column when it makes sense to. Would have been nice to data bind this, but in reality, the binding works because &lt;em&gt;I&lt;/em&gt; know that the data which determines the column visibility is technically shared among all members of the data, but the Silverlight Runtime doesn&amp;#8217;t have any way of knowing that for certain.&lt;/p&gt;

&lt;p&gt;More annoying is the second problem. The Date fields should not be modifyable directly by the user &lt;em&gt;unless&lt;/em&gt; they&amp;#8217;ve selected a special &amp;#8216;custom&amp;#8217; option in the Blocks list. The &amp;#8216;custom&amp;#8217; option is added at runtime, and is defined with start and end dates being just within the boundaries of the full term option. Which involves setting the IsReadOnly flag on the Columns for Start Date and End Date. Again, the Data Binding fails with a completely unhelpful XAML parsing error, and in this case, the data that I&amp;#8217;m binding against &lt;em&gt;is&lt;/em&gt; unique for the row, and doesn&amp;#8217;t effect the rows around it, so I was kind of at a loss.&lt;/p&gt;

&lt;p&gt;The problem with IsReadOnly on the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcolumn%28VS.95%29.aspx"&gt;DataGridColumn&lt;/a&gt; is that it effects &lt;em&gt;all&lt;/em&gt; rows, not really what I want. So, really it&amp;#8217;s out. But I don&amp;#8217;t see a way to bind the IsEnabled flag on the Cell using a data binding (I&amp;#8217;m fairly new to Silverlight, so this is likely my failing). So, to code it is. The problem I found was that, Silverlight doesn&amp;#8217;t make it really easy to access the individual cells for a datagrid. You can get access to columns easily, and rows through a few events, but to access the cell&amp;#8230;.that&amp;#8217;s non-trivial.&lt;/p&gt;

&lt;pre class="code c-sharp"&gt;
private void SetDateEditability(DataGridRow dataGridRow)
{
    var msi = dataGridRow.DataContext as MasterSectionInfo;

    // The fields should be editable if either of these are true, but not otherwise
    bool editable = msi.BlockName == "Custom" || msi.BlockName == string.Empty;
    // Should only except if Columns can't be found
    try
    {
        // I need these columns with these two names.
        var e = Selector.Columns.Where(c =&gt; c.Header.ToString() == "Start Date" || c.Header.ToString() == "End Date").Select(c =&gt; c);
        // For each column in the LINQ query above
        foreach (var column in e)
        {
            // Get the Cell Content for the argument row
            var el = column.GetCellContent(dataGridRow);
            // Get the cell itself, and set it's IsEnabled flag.
            (el.Parent as DataGridCell).IsEnabled = editable;
        }
    }
    catch (Exception) { }
}
&lt;/pre&gt;

&lt;p&gt;Now, the question is, when does this method need to be called? It needs to be called anytime the selection for the Block column changes, which is accomplished through the CellEditEnded event on the data grid. For my purposes, I check that the edited cell is in the Block column, to save just a bit of time, but you can always decide how necessary that is in your own application. However, this isn&amp;#8217;t sufficient, since it doesn&amp;#8217;t effect the rows as they load, so you&amp;#8217;ll also need to add a LoadingRow event handler which calls into this method for each row as it loads.&lt;/p&gt;

&lt;p&gt;So, there you have it. How I created a virtual property driven by two backing properties, and tied the editability of the backing properties to the selection. I&amp;#8217;ll be the first to admit, it&amp;#8217;s not the prettiest looking solution in the world, and I&amp;#8217;m sure it could be done better, but I was under a deadline, and really, this works pretty cleanly, for a solution derived from a Silverlight newbie.&lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/ScLIQwVe92Q" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/09/derived-property-data-binding-in-silverlight.html</feedburner:origLink></entry>

<entry>
    <title>Pollan Protests in Wisconsin</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadBeautifulIdeas/~3/P4EMNpSNvFM/pollan-protests-in-wisconsin.html" />
    <id>tag:blog.foxxtrot.net,2009://1.353</id>

    <published>2009-09-28T22:45:28Z</published>
    <updated>2009-09-28T22:46:41Z</updated>

    <summary>Apparently, this is going to be a particularly good year for Michael Pollan, at least in terms of book sales, as both Washington State University, and University of Wisconsin-Madison have chosen his books for their Freshman Common Reading programs. I...</summary>
    <author>
        <name>Jeff Craig</name>
        
    </author>
    
        <category term="Food" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="books" label="Books" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="food" label="Food" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="michaelpollan" label="Michael Pollan" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reading" label="Reading" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="science" label="science" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wsu" label="WSU" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.foxxtrot.net/">
        &lt;p&gt;Apparently, this is going to be a particularly good year for &lt;a href="http://www.michaelpollan.com/"&gt;Michael Pollan&lt;/a&gt;, at least in terms of book sales, as both &lt;a href="http://commonreading.wsu.edu/"&gt;Washington State University&lt;/a&gt;, and &lt;a href="http://www.gobigread.wisc.edu/"&gt;University of Wisconsin-Madison&lt;/a&gt; have chosen his books for their Freshman Common Reading programs. I don&amp;#8217;t know what the freshman class at UW-Madison looks like this year, but at WSU that equates to around 3300 copies of the book, &lt;a href=""&gt;The Omnivore&amp;#8217;s Dilemma&lt;/a&gt;, just for Freshman. &lt;a href=""&gt;The Bookie&lt;/a&gt; was also offering 20% off list to anybody else who wanted to buy the book (Students/Faculty/Staff/Parents/Alumni/etc) so all told, I really have no idea how many copies of the book are now floating around the WSU campus, but it&amp;#8217;s not insignificant.&lt;/p&gt;

&lt;p&gt;And, it almost didn&amp;#8217;t happen.&lt;/p&gt;

&lt;p&gt;Due to financial shortfalls here in Washington, the University felt it was going to have to completely cut the Common Reading program, largely because the program has historically involved an author visit, but the school couldn&amp;#8217;t afford it. There were &lt;a href="http://seattletimes.nwsource.com/html/localnews/2009246926_webbook21.html"&gt;rumours that the &lt;em&gt;real&lt;/em&gt; reason for the cut was pressure from Agribusiness&lt;/a&gt;, which I&amp;#8217;ve never seen any real credible proof of, though certainly Pollan&amp;#8217;s book is critical of the sort of agriculture common in the Palouse (re: monoculture), an agriculture which WSU has been instrumental in creating through years of wheat genetics and hybridization. Universitry of Wisconsin-Madison, who chose Pollan&amp;#8217;s later &lt;a href=""&gt;In Defense of Food: An Eater&amp;#8217;s Manifesto&lt;/a&gt;, is no doubt just as tied to Agribusiness as Washington State. &lt;/p&gt;

&lt;p&gt;[Bill Marler], whom I&amp;#8217;ve wrote about before, decided to &lt;a href="http://www.marlerblog.com/2009/05/articles/lawyer-oped/washinton-state-university-a-place-where-speaking-your-mind-is-encouraged-michael-pollan-will-be-coming/"&gt;provide a donation to WSU to keep Pollan on the agenda&lt;/a&gt;, and the Common Reading program has been moving forward, with a planned visit from Pollan on January 13th of 2010. Having read both of Omnivore and Defense, I&amp;#8217;m looking forward to the visits, though I suspect that WSU&amp;#8217;s experience with  Pollan&amp;#8217;s visit will be no less &lt;a href="http://www.google.com/hostednews/ap/article/ALeqM5g6NIdfE-Vc9-4-IsgZYmK2pQL4fAD9ATA7IG2"&gt;controversial than his visit to Madison&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://civileats.com/2009/09/24/in-defense-of-michael-pollan-and-a-more-nuanced-food-debate/"&gt;Civil Eats has already broke this story down&lt;/a&gt;, and I&amp;#8217;m planning on simply adding to what Paula Crossfield has had to say on the issue, though perhaps not as kindly as she has been.&lt;/p&gt;

&lt;p&gt;First, the &lt;a href="http://www.fairfoodfight.com/blog/el-drag%C3%B3n/mysterious-group-defense-farmers-take-michael-pollan-madison"&gt;Defense of Farmers group&lt;/a&gt;. Anyone who claims that Pollan is anti-Farmer is a fucking idiot. In both Ominvore and Defense, Pollan routinely says that the small amount American&amp;#8217;s spend, and expect to spend, on food is downright ridiculous. Currently, it&amp;#8217;s about &lt;a href="http://www.salem-news.com/articles/july192006/food_prices_71906.php"&gt;10% of our disposable income&lt;/a&gt;. Prior to 1933, that figure was closer to 25%, per the Salem-News article linked above.&lt;/p&gt;

&lt;p&gt;And what&amp;#8217;s allowed for that? Mechanization. Hybridization. Specialization. The hallmarks of modern agribusiness, and they&amp;#8217;ve done a fantastic job in churning out massive numbers of calories. However, the food that&amp;#8217;s resulted, is quite easily shown to be not as good for us. We have the highest instances of obesity, diabetes, heart disease, and a whole host of other problems than we &lt;em&gt;ever&lt;/em&gt; have had historically (but the problems in the health care industry are totally the insurance companies, right?). These problems are effecting more people every year. And younger people. In the last thirty years, incidence of &lt;a href="http://www.cdc.gov/diabetes/statistics/prev/national/figbyage.htm"&gt;Diabetes among people under the age of forty has gone up a full percentage point&lt;/a&gt;, nearly three times. Among older people (45+), it&amp;#8217;s at least doubled. And when you look at Type 2 Diabetes, the type most often linked to weight and nutrition, it&amp;#8217;s figured that over &lt;a href="http://www.amortlamalbouffe.org/pg/pages/view/1121"&gt;13% of African Americans, 9% of Latino Americans, and 8% of Caucasian Americans&lt;/a&gt; suffer from Type 2 Diabetes.&lt;/p&gt;

&lt;p&gt;And why would the numbers be more prevalent among racial minorities? Generally these people are poorer than Caucasian Americans (this is a generalization, and one I don&amp;#8217;t intend to discuss the reasons for here. It&amp;#8217;s an injustice, a pretty disgusting one, but it&amp;#8217;s also a completely different discussion). And heavily processed foods tend to be cheaper, so they tend to be consumed more by poorer people. If agribusiness were to be restructured along the lines presented in Pollan&amp;#8217;s book (which is basically impossible, and possibly improbable), then these people would be getting more fresh fruits and vegetables, and less corn-derived food products. And, yes, they&amp;#8217;d be paying more for it. Which might not be a bad thing. More money on food, less on Cable TV and other non-necessities. &lt;/p&gt;

&lt;p&gt;And, there would be more jobs for farmers. Higher prices paid to farmers (particularly if Farmer&amp;#8217;s Markets can become more prevalent). It might actually be possible for a farmer in the corn belt, or the heart of the dairy belt, to survive without government subsidy. And to make more money than they do now. And, we&amp;#8217;ll be taking better care of the soil, and ourselves. No more &lt;a href="http://www.gulfhypoxia.net/News/default.asp?XMLFilename=200908171026.xml"&gt;hypoxic algae blooms&lt;/a&gt;. No more &lt;a href="http://www.ewg.org/reports/nitrate"&gt;nitrate contamination of drinking water&lt;/a&gt; (There is no corroborating evidence of the so-called &amp;#8216;blue baby syndrome&amp;#8217;, but artificially high nitrate levels have been shown to negatively impact water life). And most likely, a decrease in the incidence of obesity and it&amp;#8217;s host of related health problems that have begun to plague the developing world.&lt;/p&gt;

&lt;p&gt;But we live in a post-consumer economy. It&amp;#8217;s hard to sell people on the idea that we need, in the words of &lt;a href="http://en.wikipedia.org/wiki/World_war_z"&gt;Arthur Sinclair&lt;/a&gt; to &amp;#8220;get a lot of white collars dirty.&amp;#8221; We need more farmers, and we need people who are willing to spend more money on food. And those two goals&amp;#8230;might be tough to reach. Still, neither of those goals are anti-farmer. In fact, they&amp;#8217;re far more pro-farmer than any agricultural policy than we&amp;#8217;ve seen in a long time. They&amp;#8217;re ideas that seek to make sure that Farmer&amp;#8217;s can actually afford a living wage, and not be dependent on government subsidies, because the current food system is a boon to Monsanto, Tyson, and other large-scale agribusiness. Not to the American farmer.&lt;/p&gt;

&lt;p&gt;The second point I&amp;#8217;d like to address, are comments by John Lucey, Madison professor and food scientist, who was quoted by the AP as complaining about how Pollan says Food Science has merely broken foods down to nutrients, and completely missed the point of the work in the strides that food science has made in food preservation, food safety, and meal prepration time. Now, Food Safety is kind of a joke. Just read &lt;a href=""&gt;Bill Marler&amp;#8217;s Blog&lt;/a&gt;, we have one of the most unsafe food systems in the world, and most of it is because of the work of modern food science, which has created this single supplier system we have. &lt;a href="http://www.webmd.com/food-recipes/food-poisoning/news/20090114/salmonella-prompts-peanut-butter-recall"&gt;A food safety problem at a single plant, can make people sick nationwide&lt;/a&gt;, something that was never possible before the shelf stabilization and preservation additives that Dr. Lucey is claiming are so great. &lt;a href="http://www.sixwise.com/Newsletters/2009/May/13/Artificial-Colors-Secret-Shame-of-Food-Industry.htm"&gt;Which is to say nothing of the other risks such additives occasionally supply&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A lot of these problems are &lt;em&gt;not&lt;/em&gt; the blame of food scientists. And not all additives have been linked to potential health risks due to overexposure (and it&amp;#8217;s really easy to be overexposed to food chemicals these days). However, food science has not proven to be a panacea, and while there has been good things to come from it, it hasn&amp;#8217;t made us any safer than we used to be. If anything, food science has caused most people to lose any sort of cultural knowledge of food, instead trusting it to the supermarket and the labels therein, which is the real crime in Pollan&amp;#8217;s eyes. &lt;/p&gt;

        

    &lt;img src="http://feeds.feedburner.com/~r/MadBeautifulIdeas/~4/P4EMNpSNvFM" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://blog.foxxtrot.net/2009/09/pollan-protests-in-wisconsin.html</feedburner:origLink></entry>

</feed>
